架构层绕过WAF

找源站

多数云waf通过修改dns解析,把流量引入waf,之后再转发到源站。发现源站ip,就能绕过waf直接访问源站。
工具:
https://github.com/vincentcox/bypass-firewalls-by-DNS-history

利用同网段

一些在云服务商的站点,同时使用云服务商提供的WAF服务。当流量不是通过DNS解析引流到WAF,流量必须经过WAF的检测,这是不能通过发行源站进行绕过。可以考虑在云服务商买一台VPS,通过VPS攻击目标站点,因为流量是局域网,可能不经过WAF检测,实现绕过。能不能成功,关键在于云服务商的网络配置。

利用边界漏洞

如果子站存在ssrf,可以利用漏洞来绕过waf

资源限制角度绕过WAF

如果POST请求包body太大,检查整个包会消耗很多waf的资源,所以waf就只检测body靠前的一部分大小的内容,通过填充垃圾数据来绕过waf

协议层面绕过WAF

协议未覆盖绕过

POST请求常用的两种传参方式是:
application/x-www-form-urlencoded;
multipart/form-data;
waf未能将所有方式都覆盖就会导致绕过

pipline绕过

修改Connection字段值为keep-alive,关闭burpsuite repeater的update Content-Length
演示
image-1677044754383

利用分块编码

burpsuite分块编码插件
https://github.com/c0ny1/chunked-coding-converter
能够快捷的将payload进行分块编码

滥用ssl绕过

当使用waf不支持而服务器支持的加密算法时就能绕过waf
工具
https://github.com/LandGrey/abuse-ssl-bypass-waf

规则层面的绕过

利用waf与服务器所使用的服务的特性上的区别来绕过waf

编码绕过

编码工具:
https://github.com/0xInfection/Awesome-WAF/blob/master/others/obfu.py
适用目标:

目标编码笔记
Nginx、uWSGI-Django-Python3IBM037、IBM500、cp875、IBM1026、IBM273查询字符串和正文需要编码。查询字符串和正文中的 URL 解码参数。等号和符号也需要编码(无 url 编码)。
Nginx、uWSGI-Django-Python2IBM037、IBM500、cp875、IBM1026、utf-16、utf-32、utf-32BE、IBM424查询字符串和正文需要编码。之后查询字符串和正文中的 URL 解码参数。不应以任何方式对等号和符号进行编码。
Apache-TOMCAT8-JVM1.8-JSPIBM037, IBM500, IBM870, cp875, IBM1026, IBM01140, IBM01141, IBM01142, IBM01143, IBM01144, IBM01145, IBM01146, IBM01147, IBM01148, IBM01149, utf-16, utf-32, utf-32BE, IBM273, IBM277, IBM278, IBM280, IBM284, IBM285, IBM290, IBM297, IBM420, IBM424, IBM-Thai, IBM871, cp1025原始格式的查询字符串(可以像往常一样进行 url 编码)。可以使用/不使用 url 编码发送正文。不应以任何方式对等号和符号进行编码。
Apache-TOMCAT7-JVM1.6-JSPIBM037, IBM500, IBM870, cp875, IBM1026, IBM01140, IBM01141, IBM01142, IBM01143, IBM01144, IBM01145, IBM01146, IBM01147, IBM01148, IBM01149, utf-16, utf-32, utf-32BE, IBM273, IBM277, IBM278, IBM280, IBM284, IBM285, IBM297, IBM420, IBM424, IBM-Thai, IBM871, cp1025原始格式的查询字符串(可以像往常一样进行 url 编码)。可以使用/不使用 url 编码发送正文。不应以任何方式对等号和符号进行编码。
IIS6、7.5、8、10-ASPX (v4.x)IBM037, IBM500, IBM870, cp875, IBM1026, IBM01047, IBM01140, IBM01141, IBM01142, IBM01143, IBM01144, IBM01145, IBM01146, IBM01147, IBM01148, IBM01149, utf-16, unicodeFFFE, utf-32, IBM7,32, IBM27,32, IBM27 IBM278、IBM280、IBM284、IBM285、IBM290、IBM297、IBM420、IBM423、IBM424、x-EBCDIC-KoreanExtended、IBM-Thai、IBM871、IBM880、IBM905、IBM00924、cp1025原始格式的查询字符串(可以像往常一样进行 url 编码)。可以使用/不使用 url 编码发送正文。不应以任何方式对等号和符号进行编码。

参考资料

https://forum.ezreal.cool/thread-1-1-1.html
https://github.com/0xInfection/Awesome-WAF
https://www.hacking8.com/MiscSecNotes/bypass-waf.html