点击订阅关注我哦
分块传输
分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网页服务器发送给客户端应用( 通常是网页浏览器)的数据可以分成多个部分。通常,HTTP应答消息中发送的数据是整个发送的,Content-Length消息头字段表示数据的长度。数据的长度很重要,因为客户端需要知道哪里是应答消息的结束,以及后续应答消息的开始。然而,使用分块传输编码,数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。
绕WAF原理
有些WAF无法处理分块传输编码传输机制,所以可以利用该机制将payload切分成多份来绕过WAF。
展开说说
分块传输请求包主要是修改下面三个地方:
1、
请求的header部分,增加一个 “Tranfer-Encoding: chunked” 的 header,表示本次请求使用分块传输。
2、
请求的body部分切成多份,每一份都是 “Length(下一行字符串的Length)+换行+Value+换行” 的格式。
3、
body部分的最后,增加 “0+空行+空行” 作为结束符
例子:
payload:exec('whoami')
POST / HTTP 1.1
POST / HTTP 1.1
发包自动化
对于burpsuite
burp有对应的自动化插件:https://github.com/c0ny1/chunked-coding-converter 该插件可以添加脏数据和延时分块传输
对于sqlmap
新版 sqlmap 已经集成了 chunk 功能, 可以通过 一chunk 指定:
https://github.com/sqlmapproject/sqlmap/pull/3536
最后说一下分块传输使用缺陷
1.只能使用在post环境。
2.HTTP/1.1才支持分块传输
当然要考虑实际利用环境,我之前实验sql注入靶场利用分块延时都没成功。很生气。还不如手注。也可能是是使用姿势不太对。
END
参考:
利用 Transfer-Encoding:Chunked 绕过 WAF :
利用分块传输吊打所有WAF: