记一次分块传输绕WAF学习

admin 2023年11月10日21:17:43评论46 views字数 1433阅读4分46秒阅读模式

点击订阅关注我哦

分块传输

分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网页服务器发送给客户端应用( 通常是网页浏览器)的数据可以分成多个部分。通常,HTTP应答消息中发送的数据是整个发送的,Content-Length消息头字段表示数据的长度。数据的长度很重要,因为客户端需要知道哪里是应答消息的结束,以及后续应答消息的开始。然而,使用分块传输编码,数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。

绕WAF原理

记一次分块传输绕WAF学习

有些WAF无法处理分块传输编码传输机制,所以可以利用该机制将payload切分成多份来绕过WAF。

展开说说

记一次分块传输绕WAF学习

分块传输请求包主要是修改下面三个地方:

记一次分块传输绕WAF学习
1、
请求的header部分,增加一个 “Tranfer-Encoding: chunked” 的 header,表示本次请求使用分块传输
记一次分块传输绕WAF学习
2、
请求的body部分切成多份,每一份都是 “Length(下一行字符串的Length)+换行+Value+换行” 的格式

记一次分块传输绕WAF学习
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


记一次分块传输绕WAF学习

发包自动化

记一次分块传输绕WAF学习
对于burpsuite

burp有对应的自动化插件:https://github.com/c0ny1/chunked-coding-converter 该插件可以添加脏数据和延时分块传输

对于sqlmap

新版 sqlmap 已经集成了 chunk 功能, 可以通过 一chunk 指定:

https://github.com/sqlmapproject/sqlmap/pull/3536

记一次分块传输绕WAF学习
最后说一下分块传输使用缺陷
记一次分块传输绕WAF学习
1.只能使用在post环境。
2.HTTP/1.1才支持分块传输

当然要考虑实际利用环境,我之前实验sql注入靶场利用分块延时都没成功。很生气。还不如手注。也可能是是使用姿势不太对。

记一次分块传输绕WAF学习

END

记一次分块传输绕WAF学习

参考:

利用 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

记一次分块传输绕WAF学习

原文始发于微信公众号(白帽100安全攻防实验室):记一次分块传输绕WAF学习

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年11月10日21:17:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次分块传输绕WAF学习https://cn-sec.com/archives/2195296.html

发表评论

匿名网友 填写信息