# Waf Bypass Methodology

> WAF 绕过统一方法论。当漏洞利用 payload 被 WAF 拦截返回 403/406 时使用，覆盖 F5、网宿（ChinaNetCenter）、UEWAF、Cloudflare、ModSecurity、安全狗、宝塔等产品指纹与绕过。包括编码绕过、分块传输、HTTP 方法切换、参数污染、Payload 变形、SQL 注入绕过、验证码解锁（captcha 绕过）、代理池/免费代理切换 IP 绕过封禁等

- Skill: `wgpsec/waf-bypass-methodology` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add wgpsec/waf-bypass-methodology`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wgpsec/waf-bypass-methodology/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: wgpsec (https://skillmd.com/u/wgpsec)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/wgpsec/waf-bypass-methodology

---


# 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
- 分块传输 + 参数污染组合使用


