通过把SQL命令插入到Web表单递交或输入域名、页面请求的查询字符串中,最终达到欺骗服务器执行恶意的SQL命令。
示例:
以输入用户名、密码进行登录校验为例,当程序中存在SQL拼接时,可能发生的SQL注入攻击
JdbcConnection conn = new JdbcConnection();
// 拼接SQL,引起 SQL 注入
String sql = "select * from user where name = '" + request.getParameter("name") + "' and pwd='"+request.getParameter("pwd")+"'";
conn.execqueryResultSet(sql);
当pwd参数传值为(1’ or ‘1’='1),此时sql结果为真,可以进入后台
select * from user
where
name = 'admin' and pwd = '1' or '1'= '1'
当pwd参数传值为(1’ or exists(select 列名 from 表名) --),使用"–"注释符规避语法错误,可以根据是否成功进一步猜测表名和列名
select * from user
where
name = 'admin'
and pwd = '1' or exists(select 列名 from 表名) --'
恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,以此达到恶意攻击用户的目的。XSS 攻击对WEB 服务器虽无直接危害,但是它借助网站进行传播,使网站的使用用户受到攻击,导致网站用户帐号被窃取,从而对网站也产生
了较严重的危害
XSS 类型包括:
示例:(窃取网页浏览中的cookie信息)
如查看留言板功能,攻击者留言为一段javascript代码,如:
那么留言板界面的网页代码就会变成形如以下,当有用户不小心点击图片时,便会向目标主机发送cookie信息,击者很可能能够直接利用cookie不用密码直接登录被攻击者的账户。
xss攻击
留言记录:
指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定,一旦权限验证不充分,就易致越权漏洞。
水平越权:指攻击者尝试访问与他拥有相同权限的用户资源。例如,用户A和用户B属于同一角色,拥有相同的权限等级,他们能获取自己的私有数据(数据A和数据B),但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据(数据B),那么用户A访问数据B的这种行为就叫做水平越权访问。
垂直越权:由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。
应用存在默认口令或口令较简单易被猜到。通过爆破工具可以很容易破解用户的弱口令。
示例:
如用户登录,通过burp suite爆破登录密码。
通过大规模互联网流量淹没目标服务器或其周边基础设施,以破坏目标服务器、服务或网络正常流量的恶意行为
推荐参考:DDos攻击与防御
设置高性能设备,保证网络设备不能成为瓶颈
保证带宽,提高抗受攻击的能力
异常流量清洗
通过DDoS硬件防火墙对异常流量的清洗过滤,通过数据包的规则过滤、数据流指纹检测过滤、及数据包内容定制过滤等顶尖技术能准确判断外来访问流量是否正常,进一步将异常流量禁止过滤。
分布式集群防御
目前网络安全界防御大规模DDoS攻击的最有效办法。分布式集群防御的特点是在每个节点服务器配置多个IP地址,并且每个节点能承受不低于10G的DDoS攻击,如一个节点受攻击无法提供服务,系统将会根据优先级设置自动切换另一个节点,并将攻击者的数据包全部返回发送点,使攻击源成为瘫痪状态,从更为深度的安全防护角度去影响企业的安全执行决策。
IP轮询技术
对稳定性、流畅性以及安全性上要求较高的业务,用户遭受 DDoS 攻击且达到一定峰值时,系统通过 IP 轮询机制,将从IP 池中灵活调取一个新的 IP 充当业务 IP,使攻击者失去攻击目标,以此保证业务在 DDoS 的攻击下正常运转。
当恶意攻击者以很低的速率发起HTTP请求,使得服务端长期保持连接,这样使得服务端容易造成占用所有可用连接,导致拒绝服务。
XXE(XML External Entity Injection),即MXL外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站,发起dos攻击
推荐参考:XXE漏洞学习
示例:
这种写法则调用了本地计算机的文件/etc/passwd
,XML内容被解析后,文件内容便通过&xxe
被存放在了methodname
元素中,造成了敏感信息的泄露。
]>
&xxe;
配置XML处理器去使用本地静态的DTD,不允许XML中含有任何自己声明的DTD。
过滤用户提交的XML数据。
过滤关键词:
攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
CSRF 主要用于使用受害者的特权对目标站点执行操作,通过访问响应来公开信息。当目标站点易受 XSS 攻击时,信息泄露的风险会急剧增加,因为 XSS 可以作为 CSRF 的平台,允许攻击在同源策略的范围内进行。
示例:
用户在某网站配置其电子邮件帐户用于接收邮件信息,简单的from表单提交如:
攻击者通过查看此 HTML 源代码或使用此表单推断出合法请求的格式类似于以下内容:
POST /account/edit HTTP/1.1
Host: example.org
Content-Type: application/x-www-form-urlencoded
Content-Length: 19
Cookie: PHPSESSID=1234
如果攻击者可以伪造来自其他用户的此类请求,则攻击者可能会开始接收受害者的所有电子邮件。如使用 JavaScript 提交包含隐藏字段的表单:
或者是通过横幅广告、跨站点脚本缺陷或其他方式来实现请求的伪造。
所以被CSRF攻击,一般要同时满足两个条件:
验证 HTTP Referer 字段
在request header中,有个referer字段,表明请求的来源,服务端可以通过这个字段判断是否是在合法的网站下发送的请求。
在请求地址中添加 token 并验证,
用户提交请求后, 服务端验证表单中的Token是否与用户Session中的Token一致,一致为合法请求,不是则非法请求。
在 HTTP 头中自定义属性并验证
这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。
在用户进入登录页面,但还未登录时,会产生一个session,用户输入信息,登录以后,session的id没有改变,也就是说没有建立新session,原来的session没有被销毁, 可以继续使用,黑客可利用此漏洞窃取或操纵客户会话和cookie,用于模仿合法用户,从而能够以该用户身份查看或变更用户记录以及执行事务。
点击劫持(Click Jacking)是一种视觉上的欺骗手段,攻击者通过使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,通过调整iframe页面的位置,可以使得伪造的页面恰好和iframe里受害页面里一些功能重合(按钮),以达到窃取用户信息或者劫持用户操作的目的。
JSON 劫持又为“ JSON Hijacking ”,最开始提出这个概念大概是在 2008 年国外有安全研究人员提到这个 JSONP 带来的风险。其实这个问题属于 CSRF( Cross-site request forgery 跨站请求伪造)攻击范畴。当某网站听过 JSONP 的方式来快域(一般为子域)传递用户认证后的敏感信息时,攻击者可以构造恶意的 JSONP 调用页面,诱导被攻击者访问来达到截取用户敏感信息的目的。
示例:
某网站存在一个api接口,http://www.demo.com/api/getVipCardInfo
已登录用户访问该接口,会返回会员卡信息,如{“balance”: “2000”,“userId”:1000,“vipCardId”:999}
用户此时在网页上不小心点了一个恶意植入的广告等,访问了一个恶意站点http://www.attack.com/
这个站点下存在如下的恶意代码
上述代码会首先向将http://www.demo.com/api/getVipCardInfo地址发起请求,获取到的用户敏感信息通过对JS对象默认的setter方法重写,用户敏感信息被发送到一个恶意收集信息的站点。至此,用户敏感信息被泄露,JSON劫持攻击完成。
json劫持属于CSRF( Cross-site request forgery 跨站请求伪造)的攻击范畴,所以解决的方法和解决csrf的方法一样。
参照CSRF攻击修复修复建议:Csrf修复修复建议
函数劫持,顾名思义,即在一个函数运行之前把它劫持下来,添加我们想要的功能。当这个函数实际运行的时候,它已经不是原本的函数了,而是带上了被我们添加上去的功能。以此可以非法获取用户的资料。
JavaScript劫持的经典结构
window.onload=function(){
var _func=func;
window.func=function(){
}
}
var _func=func中func指代的就是一个实际的JavaScript native方法,window.func=function(){}指的就是重写的内容。
示例:
劫持alert()函数,将信息上传到攻击者的服务器
window.alert = function (message) {
console.log('alert: ' + message.toString());
//把信息上报到攻击者的服务器上
sendToAttacker(message);
}
Cookie中的HttpOnly属性值规定了Cookie是否可以通过客户端脚本进行访问,能起到保护Cookie安全的作用,如果在Cookie中没有将HttpOnly属性设置为true,那么攻击者就可以通过程序(JS脚本、Applet等)窃取用户Cookie信息,增加攻击者的跨站脚本攻击威胁。
HttpServletResponse response = (HttpServletResponse)response;
response.setHeader( "Set-Cookie", "name=value; HttpOnly");
对于敏感业务,如登录、转账、支付等,需要使用HTTPS来保证传输安全性,如果会话Cookie缺少secure属性,Web应用程序通过SSL向服务器端发送不安全的Cookie,可能会导致发送到服务器的Cookie被非HTTPS页面获取,造成用户Cookie信息的泄露。如果启用了secure属性,浏览器将仅在HTTPS请求中向服务端发送cookie内容。
参数值中发现了内部IP,会为渗透攻击打下良好基础,攻击者可能会以此收集有关 Web 应用程序的敏感信息,如用户名、密码、机器名或敏感文件位置。