recognize-attack-surface · git:20260806.4d28a84 · 2026-08-06 · sha256 dccdf749e81062ef
recognize-attack-surface git:20260806.4d28a84A
Immutable. This exact content is served forever at /api/v1/blob/dccdf749e81062ef.
--- name: recognize-attack-surface description: 渗透测试的攻击面识别与研判总线:拿到一个目标或功能点时,先用它判断"这里可能是哪类漏洞、该用哪个 hunt skill",并覆盖没有专用 hunt skill 的横切类别——跨组件攻击链、业务逻辑漏洞、安全配置错误、信息泄露。当用户说"从哪下手""这个功能可能有什么问题""帮我看看攻击面""该测哪类漏洞""怎么把几个小问题串成大的"时使用;也在每次渗透开局做侦察分诊时使用。输出:识别出的可疑信号 + 路由到的 hunt skill 清单 + 横切类别的研判结论。 --- # 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`——研判某一类时再读对应段。