WAF 绕过统一方法论
WAF 绕过的核心原则:WAF 和后端应用对同一 HTTP 请求的解析存在差异,利用这个差异让 WAF "看到"合法请求而后端"看到"恶意 payload。
深入参考
- 编码绕过 Payload(双重 URL/Unicode/HTML/混合编码) → references/encoding-bypass-payloads.md
- HTTP 协议层绕过(分块传输/Content-Type/方法切换/HTTP2/走私) → references/http-protocol-bypass.md
- 参数层绕过(HPP/数组语法/Multipart) → references/parameter-bypass.md
- Payload 变形(通用编码/拆分/格式切换) → references/payload-mutation.md
Phase 0: WAF 识别
0.1 检测是否有 WAF
# 发送明显恶意请求,观察响应
curl -s "http://TARGET/?id=1' OR '1'='1" -D-
curl -s "http://TARGET/?id=<script>alert(1)</script>" -D-
curl -s "http://TARGET/?cmd=;id" -D-
# 对比正常请求和恶意请求的响应差异
# WAF 拦截特征:403/406 状态码、特定拦截页面、不同的 Server 头
0.2 WAF 指纹识别
| 特征 | WAF 产品 |
|---|---|
Server: cloudflare / cf-ray 头 |
Cloudflare |
X-Sucuri-ID 头 |
Sucuri |
响应含 ModSecurity |
ModSecurity |
响应含 安全狗 / safedog |
安全狗 |
响应含 宝塔 / bt.cn |
宝塔 WAF |
X-Powered-By-Anquanbao |
安百 WAF |
响应含 yunsuo |
云锁 |
| 阿里云 403 页面 | 阿里云盾 |
| 腾讯云特定 403 | 腾讯云 WAF |
通用绕过检查流程
Payload 被拦截 → 403/拦截页
├── 1. 编码绕过
│ ├── 双重 URL 编码
│ ├── Unicode 编码
│ └── 混合大小写 + NULL 字节
├── 2. HTTP 层
│ ├── 分块传输
│ ├── Content-Type 切换
│ ├── HTTP 方法切换
│ └── HTTP/2
├── 3. 参数层
│ ├── 参数污染 (HPP)
│ ├── 数组/JSON 嵌套
│ └── Multipart 包裹
├── 4. Payload 变形
│ ├── 空格替代(注释/Tab/换行)
│ ├── 函数名替代
│ ├── 拼接/编码函数
│ └── 通配符/变量
└── 5. 逻辑层
├── 分多次请求发送(先探测再利用)
└── 利用白名单路径(/api/health + 路径穿越)
每个分支的详细 payload 见对应 references 文件
Phase 5: 国产/商业 WAF 指纹与绕过
| WAF | 指纹特征 | 绕过思路 |
|---|---|---|
| F5 BIG-IP ASM | X-Content-Type-Options、ASM 拦截页 |
编码混淆、分块、方法切换 |
| 网宿(ChinaNetCenter) | X-Cache: NS、网宿拦截页 |
参数污染、大小写、Unicode 编码 |
| UEWAF | 特定拦截页/JS 挑战 | 直接请求后端 IP/域名、绕过 JS 校验 |
| Cloudflare | cf-ray、server: cloudflare |
源站 IP 直连、编码绕过 |
| 安全狗/宝塔 | 页面特征 | 注释符、等价函数、编码 |
Phase 6: 验证码解锁(captcha 绕过)
WAF/风控用验证码拦截高频攻击时:
- 逻辑绕过:复用验证码、置空 code、删除参数、万能验证码
- 识别:OCR/打码平台识别图片验证码,点击式验证码按坐标模拟点击
- 触发点切换:换接口/换参数绕过验证码触发逻辑
- 详细方法见 captcha-bypass-methodology
Phase 7: 代理池/免费代理 IP 轮换
WAF 按 IP 限频/封禁时:
- 使用免费代理/代理池切换出口 IP,规避 IP 封禁
- 注意代理可用性与速度,优先高匿代理
- 结合低速率(慢速)请求降低触发风控概率
- 免费代理来源动态变化,测试时先验证代理可用性
Phase 8: SQL 注入绕过(F5/网宿场景)
- 注释符替换:
--→#→/*!*/→;%00 - 关键字混淆:大小写、内联注释
/*!union*/、等价函数 - 编码:URL 双重编码、Unicode、hex
- 分块传输 + 参数污染组合使用