clutchitggs/hunter-max-oss
GitHub: clutchitggs/hunter-max-oss
一款面向单页应用的 AI 驱动侦察工具,通过深度解析 Webpack 模块联邦 bundle 全面提取隐藏 API 端点,并借助大模型排序攻击面、过滤误报,生成可操作的侦察报告。
Stars: 0 | Forks: 0
# hunter-max-oss
[](LICENSE)
[](#)
[](https://www.anthropic.com/)
[](#disclaimer)
一款针对单页应用 (SPA) 的漏洞赏金 (Bug-bounty) 侦察工具。它会提取 SPA 在运行时加载的 JavaScript bundles,解析出隐藏在其中的每一个 API endpoint,通过询问 LLM 筛选出看起来可被攻击的目标,并生成可供人工验证的 markdown 报告。
## 它是如何工作的 (Deep Read)
`src/deep_read/` 是本仓库中执行核心工作的部分。其流程如下:
```
target URL → fetch all JS bundles (incl. Module Federation chunks)
→ extract API endpoints from minified code
→ probe for OpenAPI / Swagger / GraphQL specs
→ one LLM call ranks endpoints by attack potential
→ kill-list drops known false-positive shapes
→ markdown report → human verifies → human submits
```
有趣的部分在于 bundle 的展开。大多数 SPA 侦察工具只会获取浏览器首次加载页面时的两三个入口 bundle。现代应用通常使用 webpack 的 Module Federation:入口 bundle 包含一个指向数十或数百个额外 bundle 的 chunk-name 映射,这些 bundle 会随着用户的点击操作被懒加载。Deep Read 会解析该映射并探测联合微前端 (federated micro-frontend) 宿主,从而将可见的攻击面从约 3 个 bundle 扩展到 100 个以上。
扩展后的攻击面将被解析以提取 endpoint(包括 `fetch`、`axios`、`XMLHttpRequest`、辅助包装器模式、OpenAPI / Swagger 规范、GraphQL 操作),去重后发送给一次 Opus 调用。模型会对它们进行排序并撰写攻击假设。一个包含“看似漏洞,实则不然”模式(401→403 差异、S3 403 存在探测、CloudFront 接管等)的排除列表 (kill-list) 会过滤掉那些历史上曾浪费审核人员时间的无效特征。
最终输出是一个包含分级假设、支持性证据以及用于验证的 curl 单行命令的 markdown 文件。这个文件就是供人工采取行动的产出物。
## 快速开始
需要 Python 3.10+ 以及 Anthropic 或 OpenAI 的 API key。
```
git clone https://github.com/clutchitggs/hunter-max-oss.git
cd hunter-max-oss
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
export ANTHROPIC_API_KEY=sk-ant-...
# 1. 在 Chrome 中登录目标 (手动处理 WAF / 2FA / SSO)
# 2. DevTools → Network → 从任意 XHR 中复制 Cookie header
# 3. 运行:
python -m src.deep_read app.example.com \
--cookie "session=...; csrf=..." \
--header "Authorization: Bearer eyJ..."
```
输出结果将存放在 `reports/deep_read/_.md` 中。
## 生产环境部署
完整的管道 (pipeline) 被设计为长期运行的守护进程 (daemon)。已在运行 Ubuntu 24.04 的 2 GB DigitalOcean VPS 上通过测试;在 Hetzner、Linode 或任何小型云实例上也能同样运行。
推荐配置:
- 在 `systemd` 下以 `Restart=always` 运行入口脚本,以便管道能从瞬态错误中自动恢复。使用 `systemctl stop` 进行干净地停止。
- 将 SQLite 数据库持久化挂载到数据卷上;日志输出至 `logs/hunter.log` —— 通过 `logrotate` 进行轮转。
- 在 `config.json` 中设置 `discord_webhook`,以便在发现结果时发送通知。
- 仅在进行一次性的 Deep Read 运行时使用 `tmux` / `screen`;完整的管道应归属于服务管理器管理。
每个目标的内存占用很小(LLM 调用主导了成本,而不是 RAM);按照文档中配置的信号量上限,一个 2 GB 的实例可以轻松处理并发的侦察与分析任务。
## 实战测试
该工具已通过 Bugcrowd 对多个授权目标进行了测试。诚实的总结如下:
- **Aiven** (`regatta.aiven.io` / `admin-api.aiven.io` / 托管 PostgreSQL)。针对配置泄露、admin-API 认证边界、未公开的 endpoint、OpenAPI 暴露、Okta 流程、PostgreSQL 提权、SECURITY DEFINER 源码审计、autovacuum 陷阱以及从数据库容器内部发起的 SSRF,共调查了 11 个攻击向量。**结果:** 每一个声称的绕过在仔细验证下都不攻自破 —— 401→403 的差异被证明是共享 IdP 架构按设计正常工作的结果,未经身份验证的 endpoint 虽对生产数据库进行了验证但并未泄露任何记录,`aiven_extras` 扩展代码很干净,并且 PG17 强制执行了旧 PoC 所依赖的 IMMUTABLE 契约。暴露的 OpenAPI 规范是一个纯粹的 P4/P5 信息泄露发现,但不足以单独提交报告。**未提交,已关闭。**
- **Cloudinary**。已提交给 Bugcrowd。候选发现在单一账户场景下可以复现,但未能通过跨账户测试的考验 —— 平台的租户隔离发挥了作用。**作为理论性发现关闭。**
**净结果:零确认漏洞,诸多教训。** 成熟的 DBaaS / SaaS 平台将其最优秀的工程技术投入到了租户隔离和共享 IdP 边界上 —— 这是堡垒中最坚固的城墙。高 ROI 的攻击面存在于内部管理工具、通过 JS bundle 分析发现的未公开 endpoint(这正是 Deep Read 的构建初衷),以及防御措施尚未完全成熟的新上线 SaaS 中。排除列表 (kill-list) 现在会过滤掉这些测试中所发现的“看似漏洞,实则不然”的模式。
这份诚实的失败记录正是我现在信任该工具输出的原因:当 Deep Read 标记出某些内容时,排除列表早已过滤掉了历史上出现过类似特征的误报。
## 早期架构(保留在仓库中,不再是活跃开发路径)
本项目最初是一个更庞大的系统:一个包含子域名侦察、nuclei 扫描、JS-secret 检测、用于主动测试的 Scout-Sniper ReAct agent、五层 LLM 审查(T1 廉价初步分诊 → T2/T3 Sonnet 调查/质疑 → T4/T5 Opus 裁决/挑战)、一个在 LLM 查看发现之前生成自动裁决的仅限 HTTP 的富化层,以及 Discord 通知的异步多阶段管道。
整个系统确实能运行。它只是产生了大量的线索,但极少有能通过人工验证的。在经过公平审查后,我将其精简为 Deep Read + 人工验证。相比之前的大而全,这个精简的循环更真实地反映了时间和 API 开销的转化率。
早期的模块仍然保留在 `src/` 中 —— 目前作为先前设计的参考保留,因为 Deep Read 的排除列表正是从那些误报特征的经验中总结出来的。它们不是推荐的入口点。有关哪些文件属于哪个时代的说明,请参阅下方的“仓库结构”。
## 仓库结构
```
src/
├── deep_read/ ◄── the active tool
│ ├── cli.py entry: python -m src.deep_read
│ ├── fetcher.py SPA-aware, S3-safe HTTP fetcher
│ ├── webpack_chunks.py Module Federation chunk-map expansion
│ ├── js_parser.py endpoint extraction from minified JS
│ ├── spec_finder.py OpenAPI / Swagger / GraphQL probing
│ ├── analyzer.py single Opus reasoning pass + kill-list
│ └── report.py markdown report writer
│
│ ── earlier-architecture modules (legacy, kept for reference) ──
├── pipeline.py async multi-target orchestrator
├── infinite_hunter.py signal-driven scheduler
├── orchestrator.py per-target phase driver
├── api_mapper.py Katana deep-crawl + spec discovery
├── react_agent.py Scout + Sniper ReAct orchestration
├── scout_agent.py fast lead identification (Sonnet, ReAct)
├── sniper_object.py BOLA + Mass-Assignment specialist
├── sniper_resource.py SSRF + OAST specialist
├── oast_client.py OAST callback client
├── ai_analyzer.py T1–T5 LLM tier review
├── evidence_enricher.py HTTP-only auto-verdict layer
├── nuclei_runner.py nuclei integration
├── js_analyzer.py JS-bundle secret / endpoint scan
├── vuln_scanner.py misc. checks
├── dns_checker.py DNS / HTTP liveness probes
├── wayback.py Wayback Machine URL harvest
├── s3_enum.py S3 bucket enumeration
├── program_scanner.py bug-bounty platform polling
├── scope_checker.py scope-diff detection
├── scope_importer.py scope import
├── cve_monitor.py CVE → affected-target lookup
├── ma_recon.py M&A news → newly-acquired-asset recon
├── target_scorer.py target prioritisation
├── llm_client.py unified Anthropic / OpenAI client + budget
├── report_drafter.py markdown report drafting
├── notifier.py generic notifier
├── notifier_discord.py Discord webhook
├── dashboard.py local Flask status dashboard
└── db.py SQLite (targets, findings, react_leads, …)
data/
└── wordlist.txt small built-in wordlist
templates/ Flask dashboard templates (legacy)
static/ Flask dashboard CSS (legacy)
requirements.txt
config.example.json
```
## 配置
将 `config.example.json` 复制为 `config.json`。大多数用户会接触的字段:
| 字段 | 控制内容 |
|--------------------------------------|--------------------------------------------------|
| `llm.provider` | `"anthropic"` 或 `"openai"` |
| `llm.api_key_env` | 存储 API key 的环境变量 |
| `llm.anthropic_balance_usd` | 您当前的余额 |
| `llm.stop_at_remaining_usd` | AI 调用停止的余额下限 |
每日预算 (Daily-budget) 和信号间隔 (signal-interval) 字段由旧版管道使用,可直接保留默认值。
## 免责声明
本软件**仅**用于授权的安全研究:
- 明确授权允许自动化扫描的漏洞赏金计划。
- 具有书面授权的渗透测试项目。
- 您自己拥有的目标。
- CTF / 实验室环境。
在未获得书面测试许可的情况下对系统运行此工具,在大多数计算机滥用法下都是违法的(以色列:Computer Law 1995 §2/§4;美国:CFAA 18 USC §1030;英国:Computer Misuse Act 1990;欧盟:NIS2 / 各国同等法律)。
在将工具指向任何目标之前,请先配置范围检查。**作者对滥用行为不承担任何责任。**
作者是 Anthropic Cyber Verification Program 的获批参与者,负责审查 LLM 增强的进攻性安全研究。
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:API安全, Bug Bounty, DLL 劫持, GraphQL, JavaScript解析, JSON输出, LLM, Module Federation, OpenAPI, Petitpotam, SPA, Swagger, Unmanaged PE, Webpack, Web安全, 侦察工具, 单页应用, 可自定义解析器, 大语言模型, 安全测试, 实时处理, 攻击性安全, 攻击面挖掘, 白帽黑客, 自动化安全审计, 蓝队分析, 逆向工具