拜读了c0ny1大佬的文章《编写Burp分块传输插件绕WAF》,并且研究了该插件的使用。发现这款工具确实好用,waf多是基于关键字匹配检测,而chunked方式把数据分块,使得waf匹配不到对应关键字,从而达到绕过的效果。虽然没有试验,但是相信能绕过不少基于ModSecurity做的WAF产品。
分块传输原理图

分块传输原理图 by:M_ZPHr

站在防御者的角度,如何检测分块传输呢?

1、该插件利用的请求是post方法。如果是服务器是get方法的,需要把get请求改为post请求,同时要满足服务器能接受post请求并正确响应。
2、请求包中消息头带有Transfer-Encoding: chunked,这是分块传输的标志。目前web应用很少能见到分块传输,更多的是断点续传,如果我们没有利用分块传输的web应用,而IDS、IPS或者流量分析系统检测到http请求头有“Transfer-Encoding: chunked”,则说明有人尝试利用分块传输发动攻击。
3、消息主体,其特征值是分块传输的规则。基本格式是第一行表示下一行内容的长度,第二行则是内容,最末尾倒数第三行为0,然后最后两行为空行。所以要把传输的块拼接起来就是,偶数行拼接。而加入的注释干扰项是在表示下一行长度的这行尾部添加 ;(数字+字母大小写随机字符串)。更详细的规则可以参考HTTP协议之chunk编码(分块传输编码)技术讨论 | 在HTTP协议层面绕过WAF
以下是在dvwa中sql盲注的演示,payload为 1' and 1=2
原始请求:
DeepinScrot-0343.png
更改为post型:
DeepinScrot-0454.png
分块编码后(每块长度为5~10):
DeepinScrot-0812.png
分块编码后(每块长度为1~5):
DeepinScrot-1543.png

burp分块传输插件项目地址: https://github.com/c0ny1/chunked-coding-converter
Last modification:March 24th, 2019 at 10:31 pm