XSS绕过之中文尖括号
记录一个我实战中遇到的比较有意思的XSS绕过,过滤方式比较奇葩,把>
变为了中文的尖括号>
,导致插入页面的xss payload
不能被浏览器解析,但是经过一番测试无意间发现了一种绕过方式,构造方法比较特殊,在这分享一下~
过滤方式如下
可以看到对输入的过滤是将>
变为了中文的尖括号>
,这样的话浏览器在解析html标签时,由于标签无法正常闭合就会出现语法错误而导致xss payload
无法被浏览器解析执行,加上页面可以利用的输出点只有这一个位置并且在DOM的文本节点,所以在构造xss payload
的时候>
符号是必不可少的
bypass
绕过其实也很简单,构造payload
如下
|
|
输出点变成了下面的样子
这一点的构造思路正是用到了中文尖括号>
在浏览器解析时不能被浏览器识别的特点,这样的话>”</span
会被浏览器当成img
标签的src
属性的属性值,也就是一个错误的图片资源,导致后面span
标签的>
逃逸,于是span
标签的>
闭合了img
标签,xss payload执行
补充其它的绕过方法
经过交流群里师傅们的指点,发现对于这种只过滤了>
的XSS
是很不安全的,因为浏览器的容错性,在html标签内,很多标签并不需要>
的闭合就可以解析html,所以绕过方法很多,例如:
payload:
|
|
使用firebug查看经过DOM渲染后的html代码,可以看到浏览器会自动的按照正确的html格式去补全标签
payload:
|
|
可以看到由于浏览器的容错性,标签也会被浏览器补全完整
所以XSS的防御一定要完整的过滤转义<>
这一对标签,仅仅只是过滤转义了>
还是很危险的