---
name: recognize-attack-surface
description: 渗透测试的攻击面识别与研判总线：拿到一个目标或功能点时，先用它判断"这里可能是哪类漏洞、该用哪个 hunt skill"，并覆盖没有专用 hunt skill 的横切类别——跨组件攻击链、业务逻辑漏洞、安全配置错误、信息泄露。当用户说"从哪下手""这个功能可能有什么问题""帮我看看攻击面""该测哪类漏洞""怎么把几个小问题串成大的"时使用；也在每次渗透开局做侦察分诊时使用。输出：识别出的可疑信号 + 路由到的 hunt skill 清单 + 横切类别的研判结论。
allowed-tools: Read, Grep, Glob
---

# recognize-attack-surface · 攻击面识别与研判

这是渗透 skill 库的**分诊总线**：不直接挖某一类漏洞，而是看清目标后判断"该往哪个 hunt skill 走"，并亲自处理四类**不适合做成单点猎杀**的横切问题——跨组件攻击链、业务逻辑、配置错误、信息泄露。

用法心智：先侦察→按信号路由到具体 hunt skill→对横切类别用本文的研判清单→把散点串成链。深度案例与信号目录见 `references/patterns.md`（渐进披露，判定某类时再读对应段）。

## 何时用哪个 hunt skill（路由表）

看到左边信号，转右边 skill：

| 观察到的信号 | 路由到 |
|---|---|
| 服务端按用户 URL 发出站请求（预览/抓取/webhook/导入） | `hunt-ssrf` |
| 前面有 CDN/反代 + keep-alive，怀疑前后端解析不一致 | `hunt-request-smuggling` |
| 输入进 shell / 传给 git/tar/ffmpeg/ImageMagick 参数 | `hunt-command-injection` |
| 文件名/路径/下载/解压吃用户输入 | `hunt-path-traversal` |
| 依赖 Node.js 权限模型做隔离 | `hunt-nodejs-permission-bypass` |
| cookie/token/viewstate 是序列化对象；导入触发对象还原 | `hunt-deserialization` |
| 递归 merge/JSON 深合并/`__proto__` 可控 | `hunt-prototype-pollution` |
| 登录/SSO/SAML/OAuth/2FA/重置/邮箱验证环节 | `hunt-auth-bypass` |
| 用户输入回显到 HTML/JS/属性，或前端 sink 消费 URL | `hunt-xss` |
| 解析用户 XML（SOAP/SVG/SAML/DOCX/RSS） | `hunt-xxe` |
| 输入拼进 SQL/NoSQL 查询 | `hunt-sqli` |
| 状态变更操作的 CSRF 防护可疑 | `hunt-csrf` |
| 前有缓存层 + unkeyed 输入影响响应 | `hunt-cache-poisoning` |
| 按用户参数跳转（next/return/redirect_uri） | `hunt-open-redirect` |

一个入口常命中多个——按"最高影响 + 最省条件"排序逐个试。找不到匹配就落到下面四类横切研判。

## 横切类别研判（无专用 hunt skill，本文直接处理）

### A. 跨组件攻击链（把散点串成大的）★
单看每个点都是中低危，价值在**组合跨越信任边界**。研判方法：
1. 列出已发现的所有"半成品"：一个信息泄露、一个弱 IDOR、一个自 XSS、一个开放重定向…
2. 找**信任边界的接缝**：前端↔后端、Web↔移动 App↔API、用户态↔管理态、租户 A↔租户 B、服务↔云元数据。
3. 沿"信息→凭据→身份→权限→执行"的方向拼：泄露拿线索 → 绕认证 → 越权 → 提权 → 执行/读密。
4. 每跨一层都留证据；链条整体影响 = 终点影响，即使每一环都不高危。
- 完成标准：能画出"入口→…→影响"的完整链，每环可复现。

### B. 业务逻辑漏洞（没有"payload"，靠流程推理）
判定靠**违反业务规则的状态**，不是特殊字符。研判方法：
1. 明确这条业务"应有的不变量"（钱守恒、每人限一次、只能改自己的、状态机单向）。
2. 逐个尝试打破：数量/价格改负、并发/竞态（见下）、跳过步骤、重放、越权对象、时序错乱。
3. 关注**多步流程**：把中间步骤替换/乱序/省略，看后端是否仍信任前置状态。
- 完成标准：构造出一个违反不变量的稳定结果（如少付/多得/占用他人资源）。

### C. 安全配置错误
判定靠**"本不该开/本不该默认"的设置**。研判清单：
- 云资源：可接管的悬空 DNS/S3、开放的元数据、过宽 IAM/SG、默认凭据。
- 服务：调试端点、管理面暴露、默认账号、目录列举、`.git`/`.env`/备份可访问。
- 传输/协议：不安全默认（明文回退、证书不校验）、危险 CORS、缺失安全头。
- 完成标准：指出具体错误配置 + 可达的越权/泄露后果。

### D. 信息泄露
判定靠**拿到本不该给的信息**。研判清单：
- 直接：报错栈/调试信息/源码/`.git`/密钥/备份/日志、CSP report-uri 侧信道。
- 侧信道：响应时间差、长度差、错误 vs 正常差异、CSP/Referer 外泄。
- 越权读：他人对象、跨租户、缓存里别人的数据、ContentProvider/深链读私有。
- 完成标准：拿到具体敏感数据，并说明它能喂给链条的哪一环（回到 A）。

## 研判纪律（7 问，任一 NO 则降级/搁置）

1. 目标在**授权 scope** 内？
2. 观察到的是**真实信号**（可复现的差异/泄露/越权），非猜测？
3. 能**指到具体 skill 或横切类别**，而非泛泛"感觉有问题"？
4. 若路由到 hunt skill，是否满足它的触发前提？
5. 横切类别是否**违反了明确的不变量/边界**？
6. 有**证据**支撑（响应/时序/泄露内容）？
7. 影响可陈述，且验证**未越权触碰真实用户/数据**？

## 输出格式

```
## 攻击面研判：<目标/功能>
- 命中信号：<清单>
- 路由 hunt skill：<hunt-xxx（原因）...>
- 横切研判：
  - 跨组件链：<能否串起来 + 草图>
  - 业务逻辑：<被打破的不变量>
  - 配置错误：<具体项>
  - 信息泄露：<拿到什么>
- 下一步：<按影响排序的行动>
```

## 参考

各横切类别的信号目录与真实 HackerOne 案例见 `references/patterns.md`——研判某一类时再读对应段。
