图2.1.2 检查注释符是否能被WAF识别
图2.2.1 通过/**/来绕过XSS检测
与这种思路相似的,可以用于绕过上传检测。如图2.2.2所示。/**/对于一般的代码来说确实是注释符,但是如果/**/根本就不在代码的开始标签中,则可能导致基于注释歧义的WAF绕过问题。图2.2.2 通过/**/来绕过webshell内容检测
表2.3.1 多重注释导致的WAF识别错误
原始数据 | Normalize之后 | 数据库引擎 |
1 union -- /*select md5(1)? -- */ | 1 union --? | 1 union select md5(1) |
http://192.168.6.183/test/sqli.php?width:100%" border="1"> |
http://192.168.6.183/test/sqli.php?&id=@`/*`%20union%20select%20@`*/`%20from%20user |
图2.3.2 通过伪造注释绕过WAF
图2.3.3 通过构造不存在参数带入/**/绕过WAF
表2.4.1 内联注释的使用方式
类型 | 内联注释 | 数据库引擎解析 |
普通注释 | /*union*/select | select |
内联注释 | /*!union*/select | union select |
内联注释 | /*!50001union*/select | union select |
图2.4.1 两种内联注释均能被WAF识别并拦截
图2.4.2 绕过WAF的内联注释数字
1) 把所有的不可见字符替换为空格
2) 把百分号%替换为空(兼容mssql+asp的场景)
3) 把上传文件的内容替换为空(上传文件较大,部分WAF为了提高效率,会在正则之前先把上传文件的内容替换为空)
只要是WAF进行了操作,那么就可能会有被利用的空间,我们站在WAF设计的角度来分析WAF可能出现的安全性问题,就会发现其实可利用的点还有很多。
本文以安全研究为目的,不针对特定WAF产品,请勿对号入座。很赞哦! (119)