长亭百川云 - 文章详情

记一次分块传输绕WAF学习

白帽100安全攻防实验室

90

2024-07-13

点击订阅关注我哦

分块传输

      分块传输编码(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

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

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 :

 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

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2