关于 recon-playbook
用于授权评估的外部 Web 与 API 资产梳理手册,可将资产映射转化为有针对性的安全测试。它强调范围记录、来源追溯、身份边界、证据留存及逐项验证假设。
主要功能
- 01记录测试范围与排除项
- 02发现并规范化资产
- 03梳理路由、API 与身份
- 04按证据选择后续技能
- 05通过对照验证假设
- 06保存可复现的证据
适用场景
- 01启动外部 Web 或漏洞赏金评估
- 02梳理并确定侦察结果优先级
- 03用获批身份测试访问边界
- 04为安全发现准备证据
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ uphiago/ recon-skills --skill recon-playbook安装后在 Claude Code 中输入/recon-playbook确认已加载。
详细介绍
外部 Web 侦察手册
使用本手册,将已授权的根域名或资产列表整理成一份经过优先级排序的 Web 应用、API、身份验证边界和可测试安全假设地图。
scope
-> assets
-> DNS and services
-> routes and client code
-> APIs and identities
-> hypotheses
-> focused validation
-> evidence and reporting
适用场景
- 开始外部 Web、API 或漏洞赏金评估时。
- 已有侦察结果,但缺少规范化处理、来源记录或优先级排序时。
- 目标涉及多个应用、子域名或身份边界时。
- 需要将大范围扫描转化为有针对性的手动验证时。
请勿将本手册作为超出约定范围开展活动的理由,也不要对每项资产运行所有可用工具。
前提条件
- 明确的授权、目标边界、排除项、速率限制和停止条件。
curl、jq、subfinder、dnsx、httpx和katana。- 仅在范围包含 IP 或端口发现时使用
nmap。 - 用于授权和会话测试的已批准测试身份。
- 可写的证据目录。
运行方法
export TARGET="example.test"
export OUTPUT_DIR="${OUTPUT_DIR:-./output/$TARGET}"
mkdir -p \
"$OUTPUT_DIR/assets" \
"$OUTPUT_DIR/http" \
"$OUTPUT_DIR/urls" \
"$OUTPUT_DIR/evidence"
每个阶段都必须在审查上一阶段的输出后再运行。保留原始源文件,确保每个主机名、URL 和假设都有来源记录。
流程
1. 记录范围
在输出文件旁保存一份简短、便于操作者阅读的范围记录:
allowed: *.example.test
excluded: status.example.test
identities: anonymous, test-user-a, test-user-b
request rate: 2 requests/second/host
state changes: synthetic records only
范围记录必须说明允许测试的内容、可使用的身份、可接受的流量,以及是否允许执行会改变状态的测试。
2. 发现并规范化资产
subfinder -d "$TARGET" -silent \
> "$OUTPUT_DIR/assets/subfinder.txt"
curl -sS --max-time 30 \
"https://crt.sh/?q=%25.${TARGET}&output=json" \
| jq -r '.[].name_value' \
| sed 's/^\*\.//' \
> "$OUTPUT_DIR/assets/crtsh.txt"
cat "$OUTPUT_DIR/assets/subfinder.txt" \
"$OUTPUT_DIR/assets/crtsh.txt" \
| tr '[:upper:]' '[:lower:]' \
| grep -E '^[a-z0-9.-]+\.[a-z]{2,}$' \
| sort -u \
> "$OUTPUT_DIR/assets/hostnames.txt"
主动探测前,请检查通配符结果、证书 SAN、第三方 CNAME 和排除的资产。
3. 解析并识别 HTTP 服务
dnsx \
-l "$OUTPUT_DIR/assets/hostnames.txt" \
-silent -a -aaaa -cname -json \
-o "$OUTPUT_DIR/assets/dns.jsonl"
httpx \
-l "$OUTPUT_DIR/assets/hostnames.txt" \
-threads 10 \
-rate-limit 2 \
-status-code -title -tech-detect -server -ip -cname \
-json \
-o "$OUTPUT_DIR/http/services.jsonl"
jq -r '.url // empty' "$OUTPUT_DIR/http/services.jsonl" \
| sort -u \
> "$OUTPUT_DIR/http/live-urls.txt"
将技术标签和横幅信息视为路由信号。在关联漏洞之前,至少通过两个来源确认重要组件。
4. 映射路由、参数和客户端代码
katana \
-list "$OUTPUT_DIR/http/live-urls.txt" \
-silent -jc -kf all \
-c 2 -p 2 -rl 2 \
-o "$OUTPUT_DIR/urls/katana.txt"
grep -Ei '/api/|/graphql|swagger|openapi|/rest/' \
"$OUTPUT_DIR/urls/katana.txt" \
> "$OUTPUT_DIR/urls/api-candidates.txt"
grep -Ei 'login|logout|register|reset|oauth|saml|callback|session|token' \
"$OUTPUT_DIR/urls/katana.txt" \
> "$OUTPUT_DIR/urls/auth-candidates.txt"
grep -Ei '\.js([?#].*)?$' "$OUTPUT_DIR/urls/katana.txt" \
> "$OUTPUT_DIR/urls/javascript.txt"
在添加存档来源前,先映射当前路由。历史 URL 可用于发现,但不能证明端点仍可访问。
5. 映射 API 和身份边界
对于每个应用,请记录:
- API 基础 URL、描述、版本、操作和对象标识符;
- 匿名用户、用户、租户、经理和管理员之间的边界;
- 登录、登出、刷新、密码重置、MFA、OAuth 和 SAML 流程;
- Cookie、令牌、CORS、CSRF 和 WebSocket 行为;
- 会改变状态的方法,以及获准用于测试的合成对象。
如果授权测试的主张涉及跨用户或跨租户访问,至少需要两个已批准的身份。
6. 选择有针对性的技能
使用 attack-patterns-reference 对观察结果分类,然后仅打开有当前证据支持的技能。常见路径包括:
| 观察结果 | 后续技能 |
|---|---|
| JavaScript 包或源映射 | js-secrets-extraction、source-leak-hunt |
| REST 对象和标识符 | hunt-api-misconfig、hunt-idor |
| GraphQL 端点 | hunt-graphql |
| OAuth 或 SAML 流程 | hunt-oauth、hunt-saml |
| WordPress 攻击面 | hunt-wordpress、wordpress-plugin-hunt |
| 公开的服务端口 | port-service-discovery |
| 候选多步攻击路径 | cross-attack-chains |
7. 一次验证一个假设
在探测前写下假设:
Expected: user A cannot read user B's synthetic object.
Test: repeat the same object request with both approved sessions.
Positive evidence: user A receives user B's object and its non-public fields.
Negative control: an unknown object returns the documented not-found response.
Stop condition: any access to non-synthetic or out-of-scope data.
报告前使用 triage-validation。仅凭状态码、扫描器标签、版本字符串或看似宽松的标头不足以得出结论。
8. 保存证据
对于每项重要结果,请保留:
- 目标、身份、UTC 时间戳和范围背景;
- 已清理的请求和响应;
- 预期行为和观察到的行为;
- 负向对照;
- 副作用、清理措施和测试限制;
- 工具及相关版本。
测试时使用 evidence-hygiene,验证后使用 report-writing。
注意事项
- 兜底应用会对不存在的敏感路径返回
200。 - CDN IP 和响应头本身无法识别源站或应用版本。
- 已归档的端点可能已失效、被重定向或重新分配。
- 公开的客户端标识符不一定是机密。
- 大范围爬取可能会触及第三方域名或排除在范围之外的域名。
- 分页可能会把有限范围的验证变成不必要的数据收集。
- 更改状态的验证必须在执行命令前立即获得明确授权,并且必须使用合成记录。
验证
- 每个活跃资产都能追溯到允许范围条目和发现来源。
- 在线服务具有规范化的 URL 和 DNS 上下文。
- 应用映射包含路由、API、身份验证和身份角色。
- 每个升级为正式发现的问题都包含语义证据和负向对照。
- 候选攻击路径应将未经验证的步骤标注为推断或尚未测试。
- 证据经过脱敏、可复现,并存储在
OUTPUT_DIR下。
评论
支持 Markdown