架构层绕过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
演示
利用分块编码
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-Python3 | IBM037、IBM500、cp875、IBM1026、IBM273 | 查询字符串和正文需要编码。查询字符串和正文中的 URL 解码参数。等号和符号也需要编码(无 url 编码)。 |
Nginx、uWSGI-Django-Python2 | IBM037、IBM500、cp875、IBM1026、utf-16、utf-32、utf-32BE、IBM424 | 查询字符串和正文需要编码。之后查询字符串和正文中的 URL 解码参数。不应以任何方式对等号和符号进行编码。 |
Apache-TOMCAT8-JVM1.8-JSP | IBM037, 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-JSP | IBM037, 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