分块传输绕WAF在年初的《利用分块传输吊打所有WAF》中学习到了,不过没有深入研究。最近在T00ls上看到大佬们在编写sqlmap的tamp脚本,过程中遇到了比较难解决的一个问题,对sqlmap数据包加入Transfer-Encoding: ChunkedHTTP头。本周尝试通过编写Burp插件来解决这个问题,同时也为了方便在Burp上快速测试分块传输是否能绕过waf。我们开始吧!
0x01
功能设计
我们先来看看插件要实现的功能
- 在Burp Repeater套件上可对数据包进行快速chunked解码编码
- 自动化对Burp的Proxy,scanner,spider等套件的数据包进行编码
- 可设置分块长度,是否开启注释
0x02
代码编写
限于边幅,我只说明核心函数,并通过注释的方式解释代码的相关功能。
2.1 编码函数
这是我们的核心函数,对各个套件数据HTTP数据进行chunked编码
自动编码其他模块的数据包,我们可以通过实现Burp的IHttpListener,IProxyListener这两个接口,分别实现processHttpMessage(),processProxyMessage()这两个方法。
注意:
这里注意一个问题,Burp的所有模块的HTTP流量都会经过IHttpListener.processHttpMessage()这个方法,但是如果在这里处理数据包的话,Burp Proxy模块的数据包被修改之后,不会在Proxy套件UI界面显示修改后的流量,故Proxy模块流量处理单独使用IProxyListener.processProxyMessage()。
2.2 自动编码Proxy套件的流量
2.3 自动编码Proxy之外的套件(Intruder,scanner…)流量
完整的代码,请后台留言“Burp分块传输插件”,获取下载地址。
0x03
效果演示
演示一:快速编码解码
在Burp repeater套件可以快速对请求内容进行chunked编码解码,来对WAF进行测试。
演示二:搭配sqlmap进行sql注入
sqlmap代理到Burp中,插件对Proxy套件的流量进行编码处理,来绕过waf。
动图有些大无法上传公众,请访问博客图片,地址如下:
http://gv7.me/articles/2019/chunked-coding-converter/sqlmap-bypassWAF.gif