C1imber's Blog

记一次有意思的XSS绕过之奇葩的中文尖括号

字数统计: 565阅读时长: 2 min
2018/09/02 Share

记一次有意思的XSS绕过之奇葩的中文尖括号

记录一个我实战中遇到的比较有意思的XSS绕过,过滤方式比较奇葩,把>变为了中文的尖括号,导致插入页面的xss payload不能被浏览器解析,但是经过一番测试无意间发现了一种绕过方式,构造方法比较特殊,在这分享一下~

奇葩的过滤

过滤方式如下
mark
可以看到对输入的过滤是将>变为了中文的尖括号,这样的话浏览器在解析html标签时,由于标签无法正常闭合就会出现语法错误而导致xss payload无法被浏览器解析执行,加上页面可以利用的输出点只有这一个位置并且在DOM的文本节点,所以在构造xss payload的时候>符号是必不可少的

bypass

绕过其实也很简单,构造payload如下

1
<img onerror=alert(1) src=>

输出点变成了下面的样子
mark
这一点的构造思路正是用到了中文尖括号在浏览器解析时不能被浏览器识别的特点,这样的话>”</span会被浏览器当成img标签的src属性的属性值,也就是一个错误的图片资源,导致后面span标签的>逃逸,于是span标签的>闭合了img标签,xss payload执行
mark
mark

补充其它的绕过方法

经过交流群里师傅们的指点,发现对于这种只过滤了>XSS是很不安全的,因为浏览器的容错性,在html标签内,很多标签并不需要>的闭合就可以解析html,所以绕过方法很多,例如:

payload:

1
<img src=1 onerror=alert(1)//

mark
使用firebug查看经过DOM渲染后的html代码,可以看到浏览器会自动的按照正确的html格式去补全标签

payload:

1
<svg onload=alert(1)//

可以看到由于浏览器的容错性,标签也会被浏览器补全完整
mark
所以XSS的防御一定要完整的过滤转义<>这一对标签,仅仅只是过滤转义了>还是很危险的

CATALOG
  1. 1. 记一次有意思的XSS绕过之奇葩的中文尖括号
    1. 1.0.1. 奇葩的过滤
    2. 1.0.2. bypass
    3. 1.0.3. 补充其它的绕过方法