krutarthshukla/bounty-recon

GitHub: krutarthshukla/bounty-recon

一款基于 Claude Code 的自动化漏洞赏金侦察与扫描工具,将攻击面枚举、机密检测和多类别漏洞扫描串联为一条 pipeline 并自动生成报告。

Stars: 0 | Forks: 0

# bounty-recon 将其指向一个目标,它会从“这是一个组织和一些域名”走向“这是一份值得关注的列表”——枚举攻击面、收集 URL、通过 GitHub 进行枢轴分析,以在官方组织和员工个人仓库中查找泄露的机密、运行一批自动化漏洞检查,并将其发现编写为 HackerOne 风格的报告(Markdown 和 PDF)。该方法遵循常见的 Jason Haddix / NahamSec 剧本,并在枚举阶段依赖于 `subdomain-recon`。 大多数傻瓜式扫描仪止步于 Nuclei 模板,而本项目将整个工作流串联在一次运行中,并涵盖了那些工具通常遗漏的类别——JWT 攻击、GraphQL 深度测试、SSTI、批量分配、host-header injection、shadow/legacy API、CRLF injection、403/401 访问控制绕过、source-map 泄露以及多云公共资产枚举。机密使用 TruffleHog v3 进行扫描,仅限 **已验证**(每个候选项都会针对其提供商的 API 进行实际触发测试),因此你不必在 HackerOne 将其关闭并标记为 N/A 的未经验证的正则表达式噪音中艰难筛选。JSLuice 通过 AST 解析从压缩的 JS 中提取 endpoint + 内联机密候选。Kiterunner 使用 Assetnote 超过 80 万条的 Swagger 抓取词表来暴力破解 REST 路由。然后,pipeline 会标记出可能的攻击*链*(例如 SSRF → 云元数据 → IAM 密钥)。 ## 如何使用它 这是一个 Claude Code 技能,因此运行它最简单的方法就是直接用通俗的英语提问: - `bounty recon Acme` - `bug bounty scan acme.com` - `find vulns in acme.com, acme.io` 给它一个**组织名称**,它会发现并验证所拥有的根域,然后再扫描所有内容;给它一个或多个**域名**,它将准确扫描这些域名。模式会根据你的输入进行检测——你无需手动选择。为了捕获 blind XSS 和 SSRF,请将一个 collaborator/interaction host 作为第二个参数添加进去。首次运行会自动安装工具链(仅限一次),结果将存放在 `~/Desktop/` 下的一个独立文件夹中。 更喜欢使用终端?同样的操作只需运行一条命令——请参阅下方的[快速开始](#quick-start)。 ## 它的功能 - **枚举子域名**:将整个侦察阶段交给 `subdomain-recon` 的引擎处理——org(组织)→ 发现 + 验证所拥有的根域 + 全面枚举(被动、高级、暴力破解 / 排列组合 / TLS-SAN);domain(域名)→ 直接处理。与 `subdomain-recon` 独立运行的流程完全一致。 - **探测存活状态并截图。** 使用 `httpx` 进行技术检测,使用 `gowitness` 进行截图,让管理面板和登录页面一目了然。 - **收集 URL**:来自 Wayback Machine、GAU(Wayback + CommonCrawl + AlienVault + URLScan)以及主动的 `katana` 爬取。 - **通过 GitHub 进行枢轴分析。** 解析官方 GitHub 组织(CONFIRMED 级别),并通过两种方式发现员工的个人仓库:公开的组织成员身份,以及**代码搜索 `"@acme.com"`**——找出那些在提交的 config / `.env` 中硬编码公司邮箱的仓库(真正的泄露途径)。每个仓库都会被划分为 `CONFIRMED` / `LIKELY` / `POSSIBLE` 级别。 - **扫描经过验证的泄露机密**:在收集到的 JS bundle 和每个已发现的 GitHub 仓库中使用 **TruffleHog v3**。`--only-verified` 意味着每个匹配项在被标记之前都会针对其提供商的 API 进行实际触发测试——没有正则表达式误报。 - **运行 22 项自动化漏洞检查**——Nuclei CVE、XSS、SSRF、CORS、开放重定向、暴露的敏感文件、已验证的机密扫描、SQLi 筛查、端口扫描、JWT 攻击、host-header injection、GraphQL 深度测试、SSTI、批量分配、vhost 发现、shadow API、NoSQL injection、基于 AST 的 JSLuice JS 分析、Kiterunner API shadow-route 发现、CRLF injection、403/401 绕过、source-map 泄露以及 Azure/GCP 云资产枚举。 - **为你指明需要手动测试的部分。** 它会标记出可能的 IDOR、身份验证和业务逻辑候选项——这些是自动化工具可以发现但无法确认的漏洞。 - **生成报告**:包含严重程度统计的 Markdown 报告,以及你可以直接交付的 PDF。 ## 要求 - Python 3.9 或更高版本 - 在此技能旁边安装了 `subdomain-recon`(用于枚举阶段) - 安装程序设置的工具(完整列表见下文) - 可选:如果需要检测 blind XSS 和 SSRF,可提供一个 collaborator/interaction host `install_tools.sh` 是幂等的且跨平台(macOS + Linux),如果缺少任何内容,`run_all.sh` 会自动调用它——包括它所依赖的 `subdomain-recon` 工具链。系统会检测已安装的工具,并且绝不会重复安装。 ### 它安装/使用的工具 此技能复用了 `subdomain-recon` 为枚举安装的所有工具,以及其自身的扫描工具集: | 组别 | 工具 | |-------|-------| | 漏洞扫描 | `nuclei`(+ 模板)、`dalfox`、`naabu`、`sqlmap`(仅用于筛查) | | Fuzzing / 内容发现 | `ffuf`、`feroxbuster`、`arjun`、`x8`、`kr` (kiterunner) | | URL 收集 / 爬取 | `gau`、`waybackurls`、`katana`、`hakrawler` | | 过滤 / 重写 | `gf`(+ patterns)、`qsreplace`、`kxss`、`unfurl`、`anew`、`httprobe` | | 截图 | `gowitness` | | 接管 / CORS | `subjack`、`baddns`、`corsy` | | 机密(已验证) | `trufflehog` v3 | | JS 分析 | `jsluice` (AST)、`sourcemapper` | | 云 / 资产枚举 | `s3scanner`、`cloud_enum`、`cdncheck`、`tlsx` | | 绕过 + 注入 | `crlfuzz`、`bypass-403` | | GraphQL | `graphw00f`、`clairvoyance`、`graphql-cop` | | 报告 | `reportlab` / `pdfkit` (Markdown → PDF) | 如果某个工具无法在特定主机上安装,则会跳过该检查,并继续执行其余的运行。 ## 安装 你无需手动运行此操作——`run_all.sh` 会自动安装(两个工具集中的)任何缺失内容。但如果要手动设置(或刷新): ``` bash scripts/install_tools.sh source ~/.recon-tools/activate.sh ``` ## 快速开始 一条命令即可完成整个运行过程。给它一个组织名称或者一个/多个 域名(模式自动检测);可选的 collaborator host 可开启 blind XSS/SSRF 检测: ``` # Org name → 发现 + 验证 roots,枚举,然后扫描所有内容 bash scripts/run_all.sh "Acme Corp" # Domains → recon + 准确扫描这些 bash scripts/run_all.sh "acme.com,product.io" # 添加 collaborator host 以捕获 blind XSS 和 SSRF bash scripts/run_all.sh "Acme Corp" your.collab.host ``` 运行的所有内容都将存放在 `~/Desktop/_/` 下: - `_bounty_report.md` / `.pdf` — HackerOne 风格的报告 - `run.log`、`recon/`(嵌套的 subdomain-recon 运行),以及如果中途中断会生成 `findings_partial.json` ## 参数标志 ``` bash scripts/run_all.sh "" [collab_host] ``` | 参数 | 是否必需 | 作用 | |----------|----------|--------------| | target | 是 | 一个**组织名称**(→ 发现 + 验证 + 枚举每个拥有的根域,然后扫描)**或**一个/多个逗号分隔的**域名**(→ 侦察 + 准确扫描这些域名)。自动检测。 | | `collab_host` | 否 | 一个 Burp Collaborator / interactsh 主机。提供此项将开启 blind XSS 和 SSRF 检测;如果省略,将跳过这两项检查。 | 这是唯一的可选配置项——其他所有操作均自动运行。 ## 工作原理 你给它一个组织和一些域名;它会运行侦察,然后是扫描,最后是报告。每一个步骤都为下一步提供数据。 ``` org name + seed domains [+ collaborator host] │ ┌──────────────▼───────────────┐ │ Phase 0 Install │ one-time toolchain setup │ │ └──────────────┬───────────────┘ │ ┌──────────────▼───────────────┐ │ Phase 1 Subdomain Recon │ delegates to subdomain-recon's full │ │ engine (discover+validate+enumerate) └──────────────┬───────────────┘ │ subdomains ┌──────────────▼───────────────┐ │ Phase 2 Live Probe + Shots │ HTTP tech-detect + screenshots │ │ (spot panels/logins) └──────────────┬───────────────┘ │ live hosts ┌──────────────▼───────────────┐ │ Phase 3 URL Collection │ Wayback + GAU + active crawl │ │ └──────────────┬───────────────┘ │ collected URLs ┌──────────────▼───────────────┐ │ Phase 4 Vulnerability Scan │ 22 automated phases (A–W) │ │ → JSON findings └──────────────┬───────────────┘ │ findings ┌──────────────▼───────────────┐ │ Phase 5 Manual-Assist Hunt │ surfaces IDOR/auth/logic candidates │ (operator-driven) │ for human validation └──────────────┬───────────────┘ │ ┌──────────────▼───────────────┐ │ Phase 6 Report │ Markdown + PDF report (~/Desktop) │ │ └───────────────────────────────┘ ``` | 阶段 | 覆盖内容 | 工具 | 输入 → 输出 | |-------|----------------|---------|----------| | **0** | 安装 | 内置安装程序 | — → 工具链位于 `~/.recon-tools` | | **1** | 子域名侦察 | `subdomain-recon` 完整引擎(发现 + 验证 + 枚举) | 组织/域名 → 子域名 | | **2** | 存活探测 + 截图 | `httpx`、`gowitness` | 子域名 → 存活主机 + 截图 | | **3** | URL 收集 | Wayback、GAU、katana | 存活主机 → 收集到的 URL | | **4** | 漏洞扫描 | Nuclei、dalfox、naabu、……(下文 22 项检查 A–W) | 存活主机 + URL → JSON 发现 | | **5** | 手动辅助挖掘 | IDOR / 身份验证 / 参数发现 | URL → 待审查候选项列表 | | **6** | 报告 | Markdown + PDF 生成器 | 发现结果 → `~/Desktop/_bounty_report.{md,pdf}` | 当你使用一键命令时,除了阶段 5 之外的所有操作都会自动运行。阶段 5 需要你自己完成——工具只是为你提供一份候选名单;确认和编写报告仍属于手动工作。 ### 22 项漏洞检查(阶段 4) | 检查项 | 方式 | 捕获目标 | |-------|-----|-----------------| | A | Nuclei 严重/高危模板 | CVE、暴露的面板、默认凭据、接管 | | B | XSS (`gf` + `dalfox`) | 反射型、存储型、DOM 型 XSS | | C | SSRF (`gf` + `qsreplace` + collaborator) | 服务器端请求伪造 | | D | CORS (origin reflection test) | 带凭据的跨域访问 | | E | 开放重定向 (`gf` + `qsreplace`) | 钓鱼帮凶 | | F | 敏感文件 (ffuf 风格) | `.git`、`.env`、`/admin`、`/actuator`、swagger | | G | 机密 (`trufflehog` v3 仅限已验证,JS + GitHub 仓库) | 实时 API 密钥 / token / 数据库凭据,且具有提供商确认的有效性 | | H | SQLi 筛查 (`gf` + 错误检测) | SQL 注入候选项 | | I | 端口扫描 (`naabu`) | 暴露的数据库、Redis、SSH、VNC | | J | JWT 攻击 | `alg:none`、RS256↔HS256 混淆、kid 注入、弱密钥 | | K | Host header injection | 密码重置中毒、缓存中毒 | | L | GraphQL | 内省、mutation 绕过身份验证、批量请求 | | M | SSTI | Polyglot → 针对各引擎的 RCE 确认 | | N | 批量分配 | `is_admin:true` 在 API PUT/PATCH 中被接受 | | O | VHost 发现 | Host-header fuzzing 可发现不在 DNS 中的应用 | | P | 内容发现 (`feroxbuster`) | 使用 Assetnote 字典发现隐藏路径 | | Q | Shadow API | 在 `/v2/` 发布后依然存活的旧 `/v1/` endpoint | | R | JSLuice (AST JS 分析) | 压缩 bundle 内部的 endpoint + 机密候选项 | | S | Kiterunner (API shadow-route 发现) | 通过 80 万+ Swagger 抓取路由发现未公开的 REST endpoint | | T | CRLF injection (`crlfuzz`) | Header 注入 → 缓存中毒 / 响应拆分 | | U | 403/401 绕过 | 在受限 endpoint 上的路径技巧 + header 绕过 | | V | Source-map 泄露 | 泄露的 `.js.map` 文件 = 完整原始源代码暴露 | | W | 云公共资产枚举 (`cloud_enum`) | 公开的 Azure 存储/blobs/vaults + GCP buckets/Firebase RTDB | ## 运行单个步骤 ``` # 阶段 3 — 收集 URL bash scripts/url_collect.sh /tmp/br_live.txt /tmp/br_urls.txt # 阶段 4 — 漏洞扫描 python3 scripts/vuln_scan.py \ --live /tmp/br_live.txt \ --urls /tmp/br_urls.txt \ --domain acme.com \ --org "Acme Corp" \ --out /tmp/br_findings.json \ --collab your.collab.host # 阶段 6 — 报告 python3 scripts/report.py \ --findings /tmp/br_findings.json \ --org "Acme Corp" \ --output ~/Desktop/Acme_bounty_report.md python3 scripts/pdf_report.py \ --markdown ~/Desktop/Acme_bounty_report.md \ --output ~/Desktop/Acme_bounty_report.pdf ``` 所有漏洞检查始终运行——没有跳过开关。添加 collaborator host 可开启 blind XSS / SSRF 检测: ``` python3 scripts/vuln_scan.py ... --collab your.collab.host ``` ## 选项参考
vuln_scan.py | 标志 | 是否必需 | 描述 | |------|----------|-------------| | `--live` | 是 来自 `httpx` 的存活主机文件 | | `--urls` | 是 | 收集到的 URL 文件 | | `--domain` | 是 | 主要目标域名 | | `--org` | 否 | 组织名称 | | `--out` | 是 | 输出 JSON 发现文件 | | `--collab` | 否 | 用于 SSRF / blind XSS 的 collaborator 主机 |
report.py / pdf_report.py / url_collect.py `report.py`: `--findings` `--org` (默认为 `Target`) `--output` `pdf_report.py`: `--markdown` `--output` `url_collect.py`: `--live` `--output`
## 手动部分 扫描器负责找出候选项;你来确认它们。这些通常赏金最高的类别,都需要人工介入: - **IDOR / BOLA** — 交换用户 ID,看看是否能访问另一个账户的数据。 - **身份验证绕过** — JWT `alg=none`、密码重置流程、SSO 配置错误。 - **业务逻辑** — 速率限制绕过、负数值、跳过支付步骤。 - **批量分配** — 后端不应允许你写入的额外 JSON 字段。 - **GraphQL** — 先进行内省,然后是隐藏的 mutation,最后是权限提升。 ## 值得记住的事项 - 收购通常是最丰富的目标——两个系统拼接在一起的缝隙处往往存在权限缺口。 - `nuclei -as` 会根据检测到的技术挑选模板,因此你不必拿所有模板去测试所有内容。 - 大多数真正能拿到赏金的漏洞(IDOR、BOLA、SSRF)只有在身份验证通过后才会出现,因此请在登录状态下进行测试。 - 将 `gf` 管道输入 `qsreplace` 可让你一次性对数千个 URL 中的参数进行 fuzz。 - 如果无法手动复现,就不要报告。 - 以影响开头。“攻击者可以读取所有用户的 PII” 每次都比 “发现了一个 XSS” 更有说服力。 ## 关于范围的一点说明 - 严格遵守拥有活跃漏洞赏金范围或书面授权的项目。 - 仔细阅读范围说明,不要涉及任何被标记为范围之外的内容。 - 不进行破坏性测试——不使用真实的 `sqlmap --dump`,不使用 DoS payload。 - SQLi 检查仅筛查错误签名——它绝不会导出数据。 - 保持合理的扫描速率。 ## 作者 Krutarth Shukla
标签:Bug Bounty, CISA项目, StruQ, 可自定义解析器, 实时处理, 密码管理, 应用安全, 运行时操纵, 逆向工具