内容简介:分块传输绕WAF在年初的我们先来看看插件要实现的功能限于边幅,我只说明核心函数,并通过注释的方式解释代码的相关功能。
分块传输绕WAF在年初的 《利用分块传输吊打所有WAF》 中学习到了,不过没有深入研究。最近在T00ls上看到大佬们在编写sqlmap的tamp脚本,过程中遇到了比较难解决的一个问题,对sqlmap数据包加入 Transfer-Encoding: chunked
HTTP头。本周尝试通过编写Burp插件来解决这个问题,同时也为了方便在Burp上快速测试分块传输是否能绕过waf。我们开始吧!
0x01 功能设计
我们先来看看插件要实现的功能
- 在Burp Repeater套件上可对数据包进行快速chunked解码编码
- 自动化对Burp的Proxy,scanner,spider等套件的数据包进行编码
- 可设置分块长度,是否开启注释
0x02 编写代码
限于边幅,我只说明核心函数,并通过注释的方式解释代码的相关功能。
2.1 编码函数
这是我们的核心函数,对各个套件数据HTTP数据进行 chunked
编码
public static byte[] encoding(IExtensionHelpers helpers, IHttpRequestResponse requestResponse, int split_len, boolean isComment) throws UnsupportedEncodingException { byte[] request = requestResponse.getRequest(); IRequestInfo requestInfo = helpers.analyzeRequest(request); int bodyOffset = requestInfo.getBodyOffset(); int body_length = request.length - bodyOffset; String body = new String(request, bodyOffset, body_length, "UTF-8"); // 对长度大于10000的数据包,不处理 if (request.length - bodyOffset > 10000){ return request; } //对数据包进行编码处理 List<String> str_list = Util.getStrList(body,Config.splite_len); String encoding_body = ""; for(String str:str_list){ if(Config.isComment){ encoding_body += String.format("%s;%s",Util.decimalToHex(str.length()),Util.getRandomString(10)); }else{ encoding_body += Util.decimalToHex(str.length()); } encoding_body += "\r\n"; encoding_body += str; encoding_body += "\r\n"; } encoding_body += "0\r\n\r\n"; //在数据包中添加Transfer-Encoding: chunked头 List<String> headers = helpers.analyzeRequest(request).getHeaders(); Iterator<String> iter = headers.iterator(); while (iter.hasNext()) { if (((String)iter.next()).contains("Transfer-Encoding")) { iter.remove(); } } headers.add("Transfer-Encoding: chunked"); return helpers.buildHttpMessage(headers,encoding_body.getBytes()); }
自动编码其他模块的数据包,我们可以通过实现Burp的 IHttpListener
, IProxyListener
这两个接口,分别实现 processHttpMessage()
, processProxyMessage()
这两个方法。
这里注意一个问题,Burp的所有模块的HTTP流量都会经过 IHttpListener.processHttpMessage()
这个方法,但是如果在这里处理数据包的话,Burp Proxy模块的数据包被修改之后,不会在Proxy套件UI界面显示修改后的流量,故Proxy模块流量处理单独使用 IProxyListener.processProxyMessage()
。
2.2 自动编码Proxy套件的流量
@Override public void processProxyMessage(final boolean messageIsRequest, final IInterceptedProxyMessage proxyMessage){ if(messageIsRequest && isValidTool(IBurpExtenderCallbacks.TOOL_PROXY)){ IHttpRequestResponse messageInfo = proxyMessage.getMessageInfo(); IRequestInfo reqInfo = helpers.analyzeRequest(messageInfo.getRequest()); //只对Content-Typt头为application/x-www-form-urlencode的POST包进行编码 if(reqInfo.getMethod().equals("POST") && reqInfo.getContentType() == IRequestInfo.CONTENT_TYPE_URL_ENCODED){ try { //使用encoding方法对原请求包进行chunked编码 byte[] request = Transfer.encoding(helpers, messageInfo, Config.splite_len,Config.isComment); if (request != null) { //将原HTTP请求包替换为chunked编码后的请求包 messageInfo.setRequest(request); } } catch (Exception e) { stderr.println(e.getMessage()); } } } }
2.3 自动编码Proxy之外的套件(Intruder,scanner…)流量
@Override public void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo){ //Proxy套件流量不处理,否则会出现两次编码问题,其余套件均在这里处理。 if(messageIsRequest && isValidTool(toolFlag) && (toolFlag != IBurpExtenderCallbacks.TOOL_PROXY)){ IRequestInfo reqInfo = helpers.analyzeRequest(messageInfo.getRequest()); if(reqInfo.getMethod().equals("POST") && reqInfo.getContentType() == IRequestInfo.CONTENT_TYPE_URL_ENCODED){ try { byte[] request = Transfer.encoding(helpers, messageInfo, Config.splite_len,Config.isComment); if (request != null) { messageInfo.setRequest(request); } } catch (Exception e) { stderr.println(e.getMessage()); } } } }
完整的代码,已经上传github,地址如下:
http://github.com/c0ny1/chunked-coding-conveter
0x03 效果演示
3.1 演示一:快速编码解码
在Burp repeater套件可以快速对请求内容进行chunked编码解码,来对WAF进行测试。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- HTTP 响应的分块传输
- 利用分块传输吊打所有WAF
- 从零开始学算法:6.链表与分块
- 从零开始一个文件分块上传【后端为Golang】
- 【火炉炼AI】机器学习037-NLP文本分块
- Flutter-Http分块下载与断点续传
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Transcending CSS
Andy Clarke、Molly E. Holzschlag / New Riders / November 15, 2006 / $49.99
As the Web evolves to incorporate new standards and the latest browsers offer new possibilities for creative design, the art of creating Web sites is also changing. Few Web designers are experienced p......一起来看看 《Transcending CSS》 这本书的介绍吧!
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
URL 编码/解码
URL 编码/解码