从一脸懵到轻松绕过:Awesome-WAF 帮你 3 步吃透 Web 应用防火墙攻防测试
【免费下载链接】Awesome-WAFEverything about Web Application Firewalls (WAFs) from Security Standpoint! 🔥项目地址: https://gitcode.com/gh_mirrors/aw/Awesome-WAF
Awesome-WAF 是一个把 Web 应用防火墙(WAF)相关知识一网打尽的开放资源库,从安全视角整理了工作原理、识别指纹、测试方法与绕过技巧,还附带了现成脚本、工具清单和论文演讲。这篇笔记不打算照搬目录,而是跟着一次真实测试的节奏走:先搞清楚对手是谁,再摸清它拦什么,最后找到钻过去的路。读完你会发现,WAF 攻防测试没想象中那么玄乎。🛡️
深夜,我的所有 payload 都被一道看不见的墙拦下了
故事要从上个月说起。我接了一个授权的渗透测试项目,客户是家电商公司,目标是一个登录接口。测试进行到一半,画风突然不对了:所有带参数的请求,回来的都是同一个冷冰冰的拦截页,连一个单引号都送不进去。
最难受的不是被拦,而是我连对面站的是谁都搞不清楚——是云厂商的防护?是机房里的硬件盒子?还是开源的 ModSecurity?不知道对手,就不知道往哪个方向使劲。
那晚我翻开了 Awesome-WAF,整个过程像突然拿到了攻略。它解决的第一件事,就是让你"看得见"对面那道墙。
先把对手看清楚:WAF 到底在拦截什么
说句大白话,WAF 就像站在网站门口的电子门卫。用户请求先经过它,可疑的流量被当场拦下,正常的放行进站。它看的不是人的脸,而是请求里的特征:参数里有没有 SQL 注入的痕迹、有没有<script>这类脚本标签、路径里有没有穿越的迹象。
这个项目把 WAF 的工作模式总结成了三种,理解它们比背十条规则更重要:
- 黑名单模式(负向模型):手里攥着一堆"坏人特征",命中就拦,比如看到
<script>就屏蔽。简单直接,但只防已知攻击。 - 白名单模式(正向模型):只放行符合规则的流量,比如只允许特定 IP 发 GET 请求。拦得严,误伤也多,适合内部系统。
- 混合模式:对外用黑名单挡大范围攻击,对内网管理后台用白名单,两边都照顾到。现实中大部分部署都是这种。
一句话总结:WAF 站在流量必经之路上当门卫。而攻防测试的起点,恰恰是搞清楚这个门卫到底是谁、靠什么规则拦人。
第一步:只凭几次请求,认出对面是哪家 WAF
很多新手一上来就闷头打 payload,被拦了才回头看——这就本末倒置了。正确的姿势是先让 WAF 暴露身份。
项目里那张超长的"指纹表"就是干这个用的。所谓指纹,就是各家 WAF 在拦截时留下的记号。常见的观察窗口有四个:
| 观察窗口 | 典型特征 | 例子 |
|---|---|---|
| 响应头 | 自定义 Header 或 Server 字段 | X-Powered-By-Anquanbao、WZWS-Ray |
| Cookie | 请求里多出专属 Cookie | AL-SESS、Yunsuo 相关标识 |
| 响应码 | 拦截时返回特殊状态码 | 360 返回 493、阿里云盾返回 405 |
| 拦截页面 | 页面文字或引用资源带品牌特征 | "Sorry! Your access has been intercepted" |
光守株待兔还不够,有时候你得主动挑衅几下,让门卫忍不住出手。项目里教了几个很实用的触发动作:往搜索框丢一个<script>alert()</script>;在 URL 末尾随便挂个' OR SLEEP(5) OR ';用 cURL 不带 UA 地发请求看响应差异;甚至试试 HTTP/0.9 这种老掉牙的协议。门卫一出手,指纹就露出来了。
嫌手工慢的话,仓库里还推荐了 wafw00f 和 IdentYwaf 这类指纹识别工具,几秒钟扫完一批特征库,直接报出疑似品牌。这一步的目的不是炫技,而是给后面的测试定方向——知道对面是黑名单还是白名单,思路完全不同。
第二步:像拆盲盒一样,一层层剥开它的过滤规则
认出品牌只是开始。真正决定能不能绕过的,是它具体过滤了哪些关键词。
这个项目里有一段非常经典的演示:黑名单探测。思路很朴素——一步步发 payload,观察哪个词被拦,从而反推它背后的正则规则。拿 SQL 注入举例,整个过程就像拆盲盒:
| 轮次 | 被过滤的关键词 | 被拦的尝试 | 换个姿势 |
|---|---|---|---|
| 第 1 轮 | and、or、union | union select ... | 1 \|\| (select ... ) = 'admin' |
| 第 2 轮 | 又加了where | 上一步被拦 | 改用limit取第一行 |
| 第 3 轮 | 又加了limit | 上一步被拦 | 改用group by ... having |
| 第 4 轮 | 连group by也拦 | 上一步被拦 | 用substr(...)逐字比对 |
几轮下来你会发现,WAF 的规则不是铁板一块,而是一张能逐块敲掉的墙。它拦掉了这个关键词,你就绕开它换个等价的写法;它连空格都过滤了,你还能用%0b这类字符替代。这种"挤牙膏式"的探测虽然费时间,却是效率最高、最不容易翻车的路子。
这里还藏着一个特别容易被忽略的坑:同一份参数,不同服务器解析出来的结果不一样。项目里那张表格把各环境的差异列得明明白白:
比如 ASP.NET/IIS 遇到同名参数会按逗号拼接,PHP/Zeus 只认最后一个,而 JSP/Tomcat 只认第一个。WAF 按自己那套解析去拦截,后端按另一套去执行——两边一不一致,就是传说中的 HTTP 参数污染(HPP)绕过空间。同一串字符,在门卫眼里和在后端眼里根本不是一回事,这个认知差,就是突破口。
第三步:绕开它,靠的是这些"变装"技巧
摸清了规则,下一步就是给 payload 换装。项目里的绕过技巧部分像一个工具箱,随手能拎出好几样:
- 大小写混排:
<script>写成<ScRipT>,有些偷懒的正则一搜就放行了。 - URL 编码:把整段 payload 或其中一部分转成
%编码,绕开对明文特征的匹配。 - Unicode 变形:把
prompt()写成\u0070r\u06f\u006dpt(),同样的意思,不同的长相。
手工编码太累?仓库的others/obfu.py就是干这个的,一条命令把 payload 编码成各种格式,还能顺手 URL 编码输出:
python3 obfu.py -s 'param=<svg/onload=prompt()//' -e ibm037 -ueo跑完你会得到一串类似%97%81%99%81%94~L%A2%A5%87a...的字符,比手工敲省事多了。类似的招数还有利用浏览器解析怪癖、滥用 SSL/TLS 加密、塞"白名单字符串"骗过放行逻辑……每一样在仓库里都有出处和例子,照着试就行。
需要提醒的是,绕过不是为了教人干坏事,而是检验防护的真实强度——这正是攻防测试存在的意义。
打开仓库,你还会挖到这些宝贝
如果你觉得上面这些已经够用,那还远远低估了这个项目。它真正的价值,是把零散在社区各处的知识做成了索引:
- WAF 指纹大全:从 360、阿里云盾到 Cloudflare、ModSecurity,几十上百家 WAF 的识别特征集中在一张表里,做指纹识别时是现成的对照手册。
- 已知绕过案例:针对 Cloudflare、Barracuda、F5 等具体产品的绕过记录,踩坑经验直接复用。
- 现成工具清单:指纹识别、规则测试、payload 混淆、性能压测,按用途分好了类,省去全网找工具的功夫。
- 论文与演讲:
papers/和presentations/目录下躺着 Qualys、SANS、OWASP 等机构的经典资料,从协议层绕过到检测逻辑分析都有,想深入研究的可以从这里起步。
说白了,这是一个把"别人踩过的坑"整理成册的项目。你不需要从零开始试错,照着目录走就行。
动手之前,三条必须记住的底线
技术归技术,红线不能丢。开始之前,请先把这三条刻在脑子里:
- 只测自己有权测的系统。未经授权的扫描和绕过,性质完全不一样,别拿前程开玩笑。
- 先在隔离环境里练手。搭个本地靶场或者测试站,把 WAF 和 Web 服务都配好,随便折腾不心疼。
- 识别优先,绕过最后。顺序永远是从"认出对手"到"摸清规则"再到"尝试绕过",跳步最容易翻车。
现在就差你动手了
光看攻略不会变强,亲手跑一遍才算入门。给你一份 30 分钟的起步清单:
- 把仓库克隆到本地:
git clone https://gitcode.com/gh_mirrors/aw/Awesome-WAF - 翻一遍
others/obfu.py,对着示例把第一段 payload 编码成功。 - 找个你有权限的测试站,按文章里说的四个观察窗口,试着说出"对面站的是谁"。
等你能在 5 分钟内完成一次指纹识别,再回头读papers/里的论文,很多之前看不懂的术语就突然通了。WAF 攻防测试这条路,入门不难,难的是坚持把每一步做扎实。从今晚的第一步开始吧。🚀
【免费下载链接】Awesome-WAFEverything about Web Application Firewalls (WAFs) from Security Standpoint! 🔥项目地址: https://gitcode.com/gh_mirrors/aw/Awesome-WAF
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考