mcpField
R
recon-playbook

recon-playbook

github.com/uphiago安全1.3k42 次安装8 周前更新
代码仓库

关于 recon-playbook

用于授权评估的外部 Web 与 API 资产梳理手册,可将资产映射转化为有针对性的安全测试。它强调范围记录、来源追溯、身份边界、证据留存及逐项验证假设。

主要功能

  1. 01记录测试范围与排除项
  2. 02发现并规范化资产
  3. 03梳理路由、API 与身份
  4. 04按证据选择后续技能
  5. 05通过对照验证假设
  6. 06保存可复现的证据

适用场景

  1. 01启动外部 Web 或漏洞赏金评估
  2. 02梳理并确定侦察结果优先级
  3. 03用获批身份测试访问边界
  4. 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