记一次分块传输绕WAF学习
2023-11-10 20:24:2 Author: mp.weixin.qq.com(查看原文) 阅读量:14 收藏

点击订阅关注我哦

分块传输

      分块传输编码(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.1Host: x.x.x.xContent-Length: xxxTransfer-Encoding: chunked
2ex2ec3('w3hoa3mi'1)0

但是一些比较好的WAF已经对Transfer-Encoding的分块传输做了处理,360 的 luoye、00theway、zonadu 在《利用分块传输吊打所有WAF》 中对该方法做了优化,即在长度标识处(Length)加上分号“;”作为注释就可以继续绕过WAF:

POST / HTTP 1.1Host: x.x.x.xContent-Length: xxxTransfer-Encoding: chunked
2;123fdvewex2;asfaec3;ilaew('w3;dsvswhoa3;34bgdwmi'1;by78sw)0;ascqw12

发包自动化

对于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 :

 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


文章来源: https://mp.weixin.qq.com/s?__biz=MzIxMDYyNTk3Nw==&mid=2247514568&idx=1&sn=bfd2372a0e408c53610ea1ed5195006c&chksm=97634d1ea014c40816d18311a5d98571739cf303427316ca05928fe9f3631e00999af78bb82e&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh