- name
- waf-bypass-methodology
- description
- WAF 绕过统一方法论。当漏洞利用 payload 被 WAF 拦截返回 403/406 时使用,覆盖 F5、网宿(ChinaNetCenter)、UEWAF、Cloudflare、ModSecurity、安全狗、宝塔等产品指纹与绕过。包括编码绕过、分块传输、HTTP 方法切换、参数污染、Payload 变形、SQL 注入绕过、验证码解锁(captcha 绕过)、代理池/免费代理切换 IP 绕过封禁等
- metadata
- {"tags":"waf,bypass,绕过,firewall,cloudflare,modsecurity,安全狗,宝塔,WAF绕过,编码,分块传输,参数污染,403,forbidden,blocked,rejected,406,拦截,intercepted,请求被拒绝,payload被拦截,f5,网宿,uewaf,captcha,验证码,解锁,sql,injection,注入绕过,代理池,免费代理,proxy,ip轮换","category":"exploit"}
# WAF 绕过统一方法论
WAF 绕过的核心原则:WAF 和后端应用对同一 HTTP 请求的解析存在差异,利用这个差异让 WAF "看到"合法请求而后端"看到"恶意 payload。
## 深入参考
- 编码绕过 Payload(双重 URL/Unicode/HTML/混合编码) → [references/encoding-bypass-payloads.md](references/encoding-bypass-payloads.md)
- HTTP 协议层绕过(分块传输/Content-Type/方法切换/HTTP2/走私) → [references/http-protocol-bypass.md](references/http-protocol-bypass.md)
- 参数层绕过(HPP/数组语法/Multipart) → [references/parameter-bypass.md](references/parameter-bypass.md)
- Payload 变形(通用编码/拆分/格式切换) → [references/payload-mutation.md](references/payload-mutation.md)
---
## Phase 0: WAF 识别
### 0.1 检测是否有 WAF
```bash
# 发送明显恶意请求,观察响应
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/风控用验证码拦截高频攻击时:
1. **逻辑绕过**:复用验证码、置空 code、删除参数、万能验证码
2. **识别**:OCR/打码平台识别图片验证码,点击式验证码按坐标模拟点击
3. **触发点切换**:换接口/换参数绕过验证码触发逻辑
4. 详细方法见 captcha-bypass-methodology
## Phase 7: 代理池/免费代理 IP 轮换
WAF 按 IP 限频/封禁时:
1. 使用免费代理/代理池切换出口 IP,规避 IP 封禁
2. 注意代理可用性与速度,优先高匿代理
3. 结合低速率(慢速)请求降低触发风控概率
4. 免费代理来源动态变化,测试时先验证代理可用性
## Phase 8: SQL 注入绕过(F5/网宿场景)
- 注释符替换:`-- ` → `#` → `/*!*/` → `;%00`
- 关键字混淆:大小写、内联注释 `/*!union*/`、等价函数
- 编码:URL 双重编码、Unicode、hex
- 分块传输 + 参数污染组合使用