brunoaugusto1978/h1-bugbounty-monitor
GitHub: brunoaugusto1978/h1-bugbounty-monitor
面向漏洞赏金研究的人机协作侦察工具,通过分层侦察、误报过滤和攻击链构建,将自动化发现转化为可手动验证的行动计划。
Stars: 0 | Forks: 0
# h1-monitor
**h1-monitor** 是一个安全优先、人在回路的漏洞赏金研究助手,适用于 HackerOne、Bugcrowd、VDP 以及私有安全测试项目等授权程序。
它接收一个或多个授权目标,运行受控的侦察,减少误报,构建证据链,对可能具有影响力的候选项进行优先级排序,并生成清晰的手动验证计划。
## 项目存在的原因
许多扫描器会产生孤立的告警:缺失的标头、微弱的信号、过期的 JavaScript 引用、可能的存储桶、可能的重定向、可能的 API。这些告警通常会带来噪音和低质量的报告。
h1-monitor 的设计围绕着一个不同的工作流程:
1. 从研究人员确认已授权的资产中**安全地收集**。
2. 通过确定性验证器和保守的报告门控来**减少误报**。
3. 在确定优先级之前,将微弱的信号**链接**为现实的攻击路径。
4. **交接给人类**并附带确切的后续步骤,而不是假装自动化可以取代负责任的验证。
5. 从结果中**学习**,例如赏金、重复、仅供参考、不适用和分类状态。
目标是帮助安全社区更谨慎地工作,而不是制造嘈杂的自动化。
## h1-monitor 可以提供什么帮助
当前的功能包括:
- 子域名和 HTTP 侦察。
- JavaScript endpoint 提取。
- JavaScript 机密候选检测及误报减少。
- 敏感路径发现。
- DNS 接管检查。
- Cookie 和安全标头检查。
- 来自常见规范和 endpoint 的 API 情报。
- S3 存储桶候选发现和归属检查。
- 开放重定向和 Host 标头候选检测。
- 可选的主动确认,仅使用安全的范围内方法。
- 可选的 Tier 3 检查,在明确授权时用于 API 验证、SSRF/OOB、身份验证绕过和 IDOR 样式候选项。
- 离线和可选的主动 LLM 辅助分析。
- 人类可读的运行摘要、证据包、链报告和下一步行动计划。
- 结果跟踪,以便未来的优先级排序能够反映实际有效的内容。
## 安全模型
h1-monitor 有意设计得非常保守:
- 不自动提交报告。
- 在默认的公共工作流程中,不会自动创建 HackerOne 报告意图。
- 实际网络执行需要范围确认。
- Tier 3 默认禁用。
- OOB/SSRF 行为需要明确的选择加入。
- 主动确认仅限于安全的方法,如 GET、HEAD 和 OPTIONS。
- 经过身份验证的测试需要用户提供的 token 和程序授权。
- 所有生成的发现都需要人工审查。
- `.env_h1` 被 Git 忽略;`.env_h1.example` 仅包含占位符。
仅在您拥有明确许可的系统上使用此项目。
## 仓库地图
| 路径 | 用途 |
|---|---|
| `h1_hunt.py` | 主要 CLI 入口点:run、outcome、deps。 |
| `target_focused_recon.py` | Tier 1/2/3 针对性侦察。 |
| `scope_guard.py` | 主动执行前的本地范围验证。 |
| `review_findings.py` | 人工审查报告生成。 |
| `review_run_priorities.py` | 优先级评分和队列生成。 |
| `hunting_orchestrator.py` | 确定性分类,以及主动确认、链和学习。 |
| `active_confirm.py` | 安全范围内的重新确认层。 |
| `chain_builder.py` | 证据链接。 |
| `outcome_tracker.py` | 结果存储和学习循环。 |
| `llm_analyst.py` | 带有护栏的离线或主动 LLM 分析师。 |
| `path_fuzzer_probe.py` | 敏感路径候选发现。 |
| `js_secret_scanner.py` | JavaScript 机密候选检测。 |
| `ssrf_probe.py` / `interactsh_helper.py` | Tier 3 SSRF/OOB 逻辑,由明确标志门控。 |
| `auth_bypass_probe.py` | Tier 3 身份验证绕过候选检查。 |
| `idor_hunter.py` | IDOR/BOLA 样式候选支持。 |
| `tools/` | 用于受控工作流程的辅助包装器。 |
| `tests/` | 单元测试和安全不变量。 |
有关更深层的内部原理,请阅读 [`ARCHITECTURE.md`](ARCHITECTURE.md)。
## 要求
最低要求:
- Linux、macOS 或 Windows 上的 WSL2。
- Python 3.10 或更新版本。
- `pip` 和 `venv`。
- `git`。
推荐的外部工具:
- Go 1.21 或更新版本。
- ProjectDiscovery `subfinder`。
- ProjectDiscovery `httpx`。
用于扩展工作流程的可选工具:
- `nuclei` 和模板。
- `amass`。
- `jq`、`curl`、`dig`、`swaks`、`flock`、`column`。
在安装所有可选工具之前,项目仍然可以在 `--plan-only` 模式下进行探索、测试和使用。
## 安装
### 1. 克隆仓库
```
git clone https://github.com/brunoaugusto1978/h1-monitor.git
cd h1-monitor
```
### 2. 创建 Python 虚拟环境
```
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
```
### 3. 安装推荐的 Go 工具
```
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest
```
确保 Go 二进制文件可用:
```
export PATH="$PATH:$HOME/go/bin"
```
### 4. 创建本地配置
```
cp .env_h1.example .env_h1
```
对于首次本地运行,您可以将 secret 留空。仅在您有意启用这些集成时才填写 API 密钥。
需要自定义的重要字段:
```
H1_RESEARCH_HEADER=your-hackerone-handle
H1_USER_AGENT=BugBounty-your-hackerone-handle/1.0\ \(HackerOne\)
UA=BugBounty-your-hackerone-handle/1.0\ \(HackerOne\)
H1_HEADER=X-HackerOne-Research: your-hackerone-handle
```
切勿提交 `.env_h1`。
## 验证安装
运行依赖检查器:
```
python3 h1_hunt.py deps
```
运行单元测试套件:
```
python3 -m unittest discover -s tests -v
```
编译所有 Python 文件:
```
python3 -m py_compile *.py
```
一个健康的本地设置应该以 `OK` 完成测试。
## 首次运行(无需接触网络)
当您只想看看会发生什么时,请使用 `--plan-only`:
```
python3 h1_hunt.py run \
--handle example_program \
--target www.example.com \
--tier 2 \
--plan-only
```
这会在 `runs//` 下创建一个 `PLAN_ONLY.json` 文件,并且不会执行网络侦察。
## 针对授权目标运行 Tier 2
在运行此命令之前,请确认目标在程序的范围内。
```
python3 h1_hunt.py run \
--handle example_program \
--target www.example.com \
--tier 2 \
--i-confirm-scope \
--allow-create-roots
```
标志的含义:
| 标志 | 含义 |
|---|---|
| `--handle example_program` | 本地程序标识符。用于 roots 和结果历史记录。 |
| `--target www.example.com` | 单个目标域名。 |
| `--tier 2` | 运行 Tier 1 以及路径模糊测试和 JS 机密扫描等 Tier 2 探测。 |
| `--i-confirm-scope` | 您明确确认目标已授权。实际执行时必需。 |
| `--allow-create-roots` | 允许 h1-monitor 为确认的目标创建或更新 `roots/.roots.txt`。 |
对于多个目标,创建一个每行一个域名的文件:
```
mkdir -p targets
cat > targets/example_program.txt <<'EOF_TARGETS'
www.example.com
api.example.com
EOF_TARGETS
```
然后运行:
```
python3 h1_hunt.py run \
--handle example_program \
--targets targets/example_program.txt \
--tier 2 \
--i-confirm-scope \
--allow-create-roots
```
## 运行 Tier 2 并进行主动确认
主动确认使用安全的范围内方法重新检查选定的候选项。
```
python3 h1_hunt.py run \
--handle example_program \
--target www.example.com \
--tier 2 \
--i-confirm-scope \
--allow-create-roots \
--active-confirm
```
这本身并不能使发现可报告。它只是增强或削弱了手动验证队列。
## 仅在明确授权时运行 Tier 3
Tier 3 启用了更敏感的探测,例如 API 验证、SSRF/OOB 和身份验证绕过检查。仅在程序策略允许此类主动测试时才使用它。
```
python3 h1_hunt.py run \
--handle example_program \
--target api.example.com \
--tier 3 \
--i-confirm-scope
```
仅当您拥有真实的 OOB 设置和权限时才启用 OOB/SSRF:
```
python3 h1_hunt.py run \
--handle example_program \
--target api.example.com \
--tier 3 \
--i-confirm-scope \
--enable-oob
```
使用 `--enable-oob` 时,将实行严格的 OOB 行为。如果没有可用的真实 OOB 服务器,运行将失败,而不是假装静态占位符可以证明 SSRF。
## 使用可选的 LLM 分析师
LLM 分析师默认禁用。对于确定性的离线分析,不要传递 `--llm-active`。
要启用主动 LLM 分析:
1. 将提供商密钥添加到 `.env_h1`。
2. 确认范围。
3. 传递 `--llm-active`。
示例:
```
python3 h1_hunt.py run \
--handle example_program \
--target www.example.com \
--tier 2 \
--i-confirm-scope \
--allow-create-roots \
--llm-active
```
主动 LLM 只能从受限制的操作目录中进行选择。确定性护栏仍然会强制执行范围、方法安全性、凭据限制和预算限制。
## 阅读结果
每次运行都会在 `runs//` 下写入产出物。
从这里开始:
```
cat runs//RUN_SUMMARY.md
```
推荐阅读顺序:
| 文件 | 包含内容 |
|---|---|
| `RUN_SUMMARY.md` | 主要摘要、计数和推荐的下一步操作。 |
| `CHAIN_REPORT.md` | 可能的利用链和手动验证步骤。 |
| `HUMAN_ACTIONS.md` | 人类研究员必须验证的内容。 |
| `NEXT_ACTION_PLAN.md` | 逐个候选项的后续计划。 |
| `ANALYST_DECISION.md` | 每个候选项的确定性决策。 |
| `PRIORITY_REVIEW.md` | 优先的审查队列。 |
| `LLM_ANALYSIS.md` | 离线或主动 LLM 分析师的输出。 |
| `LEARNING_REPORT.md` | 基于历史结果的优先级排序。 |
| `evidence_bundle.jsonl` | 合并的机器可读证据。 |
| `chains.jsonl` | 机器可读的链。 |
| `active_confirmation.jsonl` | 启用时的主动确认结果。 |
## 记录结果
程序响应后,记录结果以便改善未来的优先级排序:
```
python3 h1_hunt.py outcome \
--handle example_program \
--run runs/ \
--finding-id path_fuzzer:1 \
--source path_fuzzer \
--outcome bounty \
--severity HIGH \
--bounty-usd 500
```
接受的结果:
- `bounty`
- `duplicate`
- `informative`
- `na`
- `wontfix`
- `triaging`
结果记录存储在 `outcome_store/.jsonl` 中。
## 常见故障排除
| 症状 | 可能原因 | 解决方法 |
|---|---|---|
| `ScopeGuard blocked execution` | 目标不在 `roots/.roots.txt` 中。 | 确认授权并更新 roots,或者使用 `--i-confirm-scope --allow-create-roots` 重新运行。 |
| 未找到活跃 URL | 目标不正确、流量被阻止或缺少 `httpx`。 | 运行 `python3 h1_hunt.py deps` 并验证目标。 |
| `--llm-active` 失败 | 缺少 API 密钥。 | 将提供商密钥添加到 `.env_h1` 或移除 `--llm-active`。 |
| Tier 3 探测未运行 | 缺少范围确认。 | 确认程序授权后添加 `--i-confirm-scope`。 |
| OOB 运行中止 | 没有可用的真实 OOB 服务器。 | 在不使用 `--enable-oob` 的情况下运行,或配置真实的 OOB 服务。 |
| 已安装 Go 工具但未找到 | `$HOME/go/bin` 不在 `PATH` 中。 | 运行 `export PATH="$PATH:$HOME/go/bin"`。 |
## 贡献
欢迎社区贡献,尤其是那些能够减少误报、加强安全门控、改进文档或添加确定性验证器的改进。
在提交 pull request 之前,请阅读 [`CONTRIBUTING.md`](CONTRIBUTING.md)。
## 负责任的使用
本项目仅用于授权的安全研究。请勿在未经许可的情况下将其用于系统。遵循每个程序的政策,避免破坏性测试,收集所需的最低限度证据,并保留人工审查门控。
## 许可证
在公开发布仓库之前,请选择并添加开源许可证。如果没有许可证文件,其他人将没有明确的法律许可来使用、修改或重新分发代码。
## 作者和维护者
由 **Bruno Lobo** 创建和维护。
有关专业背景和联系信息,请参阅 [`AUTHORS.md`](AUTHORS.md)。
标签:GitHub, 安全侦察, 实时处理, 密码管理, 日志审计, 自动化漏洞扫描, 误报降低, 资产测绘, 逆向工具