欢迎来到HDUISA wiki,如果这是你的第一次到来,请点击此处注册

XSS跨站脚本攻击,又叫XSS,全称:Cross-site scripting,为了不与层叠样式表CSS混淆,将跨站脚本缩写的第一位C改为X,简称XSS。XSS是一种发生在客户端的攻击。攻击者可以在客户端的脚本中注入自己的恶意代码,从而达到窃取Cookie,绕过同源策略,进行钓鱼,截取受害者屏幕等目的,甚至可以制造XSS蠕虫进行自动传播,危害相当严重,也比较容易挖掘。

简介

XSS跨站脚本攻击,又叫XSS,全称:Cross-site scripting,是一种发生在客户端的攻击。攻击者可以在客户端的脚本中注入自己的恶意代码,从而达到窃取Cookie,绕过同源策略,进行钓鱼,截取受害者屏幕等目的,甚至可以制造XSS蠕虫进行自动传播,危害相当严重,也比较容易挖掘。

造成漏洞的根本原因还是代码与数据未做正确的区分,将用户的输入当作了HTML或JS脚本的一部分进行了执行,从而导致了恶意脚本在客户端被执行。所以应当对用户的输入进行严格的过滤,防止出现其他的HTML标签,防止引入不必要的标签。

很多人以为只要过滤掉SCRIPT标签即可,但实际上,img,a,iframe等标签都有可能为XSS攻击提供便利,在后续小节中会有一部分介绍。

'本词条尽可能详述的讲解何为XSS攻击,以及如何防御,并未涉及如何攻击等。'

分类

和SQL注入一样,XSS并没有一个标准的统一标准,下面的这个分类只是大家约定俗成的,并非何种标准分类。

反射型XSS

反射型XSS又叫非持久性XSS,这可能是最容易挖掘的一类XSS漏洞,简单来说,你插入的脚本不会存储在服务端,只是一次简单的“输入输出”,例如一次搜索,一次查询等等。举个例子:

服务端代码:

<syntaxhighlight lang=“php” line> <?php

echo "hello ".$_GET['name'];

</syntaxhighlight>

访问http://localhost/?name=lightless时,浏览器将输出Hello lightless,这个输入的参数并没有存储在服务端中,而是简单的输出出来,如果换一个请求参数,将会输出不同的结果。

但是当访问http://localhost/?name=<script>alert()</script>时,会弹出一个对话框,这是因为插入的“<scipt>alert()</script>“被浏览器当作脚本执行了,从而造成了XSS。这就是一个简单的反射型XSS。

存储型XSS

存储型XSS,又叫持久性XSS,与反射型相反,这类XSS会将攻击者的恶意脚本保存在服务器中,例如写一篇博客,在其中插入恶意代码,造成了XSS攻击。这类XSS的利用价值并非比反射型高,在不同的情况下会有不同的用法,有时候反射型也可以发挥大用处。

基于DOM的XSS

DOM是文档对象模型,如果不知道什么DOM的话请自行搜索,这里不再赘述。在大部分网站上,Javascript会将我们的输入进行处理或者渲染,可能会生成新的节点,可能会删除某些节点,也有可能改变某些节点的属性。可能原本我们的输入并不会造成XSS,但是由于在处理过程中节点的变化,触发了XSS,这就是DOM型XSS。

Flash XSS

顾名思义,这一类的XSS是由Flash对输入参数处理不当造成的,多数情况下为反射型XSS,但是有些可以进行深入利用,达成意想不到的效果。

mXSS

mXSS,又称突变XSS,这是一类比较神奇的XSS漏洞。用户所提供的富文本内容通过javascript代码进入innerHTML属性后,一些意外的变化会使得一串看似没有任何危害的HTML代码,最终将进入某个DOM节点的innerHTML中,浏览器的渲染引擎会将本来没有任何危害的HTML代码渲染成具有潜在危险的XSS攻击代码。随后,该段攻击代码可能会被JS代码中的其它一些流程输出到DOM中或是其它方式被再次渲染,从而导致XSS的执行。

攻击原理以及常用工具

攻击原理

攻击原理在上一节中已经说到了一部分,这里作简单说明,更多的说明请参考外部链接。

假设服务端有以下代码: <syntaxhighlight lang=“python” line> <?php

echo "hello ".$_GET['name'];

</syntaxhighlight> 访问http://localhost/?name=lightless时,浏览器将输出Hello lightless,这个输入的参数并没有存储在服务端中,而是简单的输出出来,如果换一个请求参数,将会输出不同的结果。

但是当访问http://localhost/?name=<script>alert()</script>时,会弹出一个对话框,这是因为插入的”<scipt>alert()</script>“被浏览器当作脚本执行了,从而造成了XSS。这就是一个简单的反射型XSS。

常用工具

# beef # 各种xss平台 # 自写脚本

教程

《xss跨站脚本攻击剖析与防御》

乌云实例教程:[http://wooyun.org/whitehats/%E5%BF%83%E4%BC%A4%E7%9A%84%E7%98%A6%E5%AD%90 那些年我们一起学XSS]

挖掘技巧

推荐在上一节的实例教程中学习技巧。 # 注意输入点和输出点在什么地方 # 对于有多个输出点的情况,需要一一仔细研究。 # 若输入点限制长度,是否可以绕开限制,或通过注释的方法多次插入。 # self XSS是否也可以通过精心构造进行利用。 # 当遇到WAF或被过滤的时候,考虑进行各种编码以及变形。 # 当无法绕过WAF的时候,是否尝试过mXSS。

JS变形例子

window['documen'+'t']['wr\x69'+'te']('aaa'+'bbb');

['NULL'](alert());

window['ale'+'rt']('1');

<iframe onload=“eval(this.fuckyou)” fuckyou=“alert()”>

<svg><x><script>HTML实体</x>

参考:http://utf-8.jp/

XSS Cheat Sheet

Translate from OWASP

请戳 : https://www.zybuluo.com/Aklis/note/275897

绕过案例

[http://nohackair.net/oh_31.shit 关于DOM-XSS的绕过案例]

实际案例

[http://wooyun.org/bugs/wooyun-2010-053221 百度贴吧xss蠕虫20140309]

[http://wooyun.org/bugs/wooyun-2010-055208 搜狐视频主站 XSS蠕虫危害甚大]

[http://wooyun.org/bugs/wooyun-2010-034278 360手机卫士意见反馈出xss漏洞可打到后台和cookie]

危害

* cookie被盗取,用户身份被冒用。 * 截取用户屏幕,监控用户。 * 绕过同源策略,获取用户隐私信息。 * 盲打后台的时候,可以获取后台地址等信息。 * 造成xss蠕虫,自动传播

防御

* 服务端进行过滤,例如PHP的函数:htmlentities() htmlspecialchars() * 对用户的输入进行正则匹配并进行过滤(然而这样就变成了正则表达式之间的战争)。 * 白名单/黑名单机制 * 对Cookie加入httponly属性,防止Cookie被盗取(在某些特定的服务器版本上,httponly属性的cookie也可以被盗取,或是程序员手贱直接输出了httponly的cookie,也可能导致Cookie被盗)。

更多的防御方法请参考外部链接中的[https://www.owasp.org/index.php/Cross-site_Scripting_(XSS) OWASP]!

相关漏洞
外部资料
打印/导出