recognize-attack-surface · diff
git:20260806.4d28a84 to git:20260806.90c82e7
1 added, 0 removed. Audit A to A.
---
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`——研判某一类时再读对应段。