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, 安全侦察, 实时处理, 密码管理, 日志审计, 自动化漏洞扫描, 误报降低, 资产测绘, 逆向工具