长亭百川云 - 文章详情

利用 Transfer-Encoded: Chunked 绕过 WAF 实战

闻道解惑

45

2024-07-13

===

找到一个部署了 WAF 的站点。先发一个报文,删除了 cookie

=========================================

可以看到服务端返回了 403,证明请求已经到达服务端了。

接下来,在报文中增加无意义的 /etc/passwd,触发 WAF 拦截规则。

无法收到响应,请求被 WAF 拦截。

现在我们看看怎么绕过 WAF。bypassword 在 《在HTTP协议层面绕过WAF》 中提出了使用 Transfer-Encoding:chunked 来绕过 WAF 的方案,原理是将请求报文的 body 部分切分成多份来绕过 WAF 规则。我们来试试。

上一个请求需要做三点改动:

  • 请求的 header 部分,增加一个 “Tranfer-Encoding: chunked” 的头域

  • 请求的 body 部分切成多份,每一份都是 “Length+换行+Value+换行” 的格式

  • body 部分的最后,增加 “0+空行+空行” 作为结束符

如下所示。

可以看到服务端返回了 403,证明请求已经到达服务端了,顺利通过了 WAF 的检测。

360luoye``、``00theway``、``zonadu 在《利用分块传输吊打所有WAF》 中提到了一个改进方案,就是在每个 Length换行 之间,插入 “分号;”开头的任意注释,进一步混淆 WAF 的处理。按照这个方法,我们可以将请求改成这样:

手工切分 http body 太麻烦了,c0ny1 写了一个 BurpSuite 插件 来实现报文的自动切分,代码在 https://github.com/c0ny1/chunked-coding-converter,推荐使用。

参考资料

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

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