jclee941/bug
GitHub: jclee941/bug
一个基于 Go 和 Node.js 的个人 Bug Bounty 自动化工具包,通过 Makefile 编排完整的安全研究工作流,涵盖侦察、监控和漏洞搜寻。
Stars: 0 | Forks: 0
# Bug Bounty 自动化工具包 / Bug Bounty 自动化工具包
[](#운영-상태--status)
[](#구성요소--package-contents)
[](#구성요소--package-contents)
[](LICENSE)
[](#운영-상태--status)
## 概览 / 概览
此代码库将一个完整的 Bug Bounty 周期(`setup → recon → monitor → hunt → lab`)封装在一个 `Makefile` 中,用于个人安全研究。Go 脚本仅依赖标准库,并通过 `os/exec` 调用第三方 CLI;Node.js + Playwright 组合(`lab-runner.mjs`、`lab-solver.mjs`)涵盖了隔离的基于浏览器的实验工作流。所有输出产物都保存在带有时间戳且被 gitignored 的目录中,在没有明确的转发步骤下,绝不离开操作者的机器。
## 运营状态 / 状态
| 领域 | 状态 | 备注 |
|------|-------|------|
| 生产就绪情况 | 个人研究工具包 — 非托管服务 | 个人研究用套件,非托管服务 |
| Go 脚本 | 仅标准库,通过 `go run scripts/*.go` 运行 | 无外部 Go 模块,无需 `go.mod` |
| Node 脚本 | `lab-runner.mjs`, `lab-solver.mjs` 由 Playwright `^1.61.0` 驱动 | 专门负责隔离实验工作流 |
| 外部工具 | 封装了 `subfinder`, `httpx`, `nuclei`, `waybackurls`, `nuclei-templates`, `SecLists` | 安装责任由操作者承担 |
| 输出范围 | 仅限本地,已被 gitignored | `recon/`, `targets/`, `reports/`, `wordlists/` |
| 通知 | Discord webhook(通过 `config/targets.json` 选填) | 发生监控差异时 |
| 默认速率限制 | `100 req/s`(针对 nuclei) | 可通过各个脚本的标志调整 |
| 许可证 | ISC(详见 [`LICENSE`](LICENSE)) | |
| 授权关卡 | 操作者必须持有书面的项目授权 | 仅在授权范围内运行 |
## 操作流程摘要 / 操作流程
| 阶段 | 命令 | 入口点 | 输出 |
|-------|---------|-----------|---------|
| 1. 设置 | `make setup` | `scripts/setup.go` | `wordlists/`,工具验证报告 |
| 2. 侦察 | `make recon TARGET=domain.com` | `scripts/recon.go` | `recon//` — 5 阶段侦察产物 |
| 3. 监控 | `make monitor TARGET=domain.com` | `scripts/monitor.go` | `targets//baseline.json`,差异日志 |
| 4. 漏洞搜寻 | `make hunt TARGET=domain.com` | `scripts/hunt.go` | `recon//hunt/` — 潜在发现 |
| 5. 实验 | `node scripts/lab-runner.mjs` / `lab-solver.mjs` | node + Playwright | 浏览器会话,隔离练习 |
| 组合 | `make full-scan TARGET=domain.com` | 侦察 + 搜寻 | 两棵产物树 |
| 清理 | `make clean` | 本地 rm | 清除 `recon/`, `targets/`, `reports/` |
## 组件 / 包内容
### 顶层结构 / 顶层布局
| 路径 | 用途 |
|------|---------|
| `Makefile` | 单一入口点 — 通过 `make ` 暴露所有步骤 |
| `package.json` | 声明 Playwright 依赖 + npm 脚本插槽 |
| `config/targets.json` | 目标列表、通知频道、标志 |
| `scripts/setup.go` | 外部工具验证 + 下载 wordlist |
| `scripts/recon.go` | 5 阶段侦察流水线 |
| `scripts/monitor.go` | 差异监控 + crt.sh + Discord 通知 |
| `scripts/hunt.go` | 4 阶段针对性漏洞搜寻 |
| `scripts/lab-runner.mjs` | 基于 Playwright 的隔离实验运行器 |
| `scripts/lab-solver.mjs` | 基于 Playwright 的隔离实验解决器 |
| `scripts/monitor.go` 及其他 Go 文件 | 全部通过 `go run` 单文件执行,无 `go.mod` |
| `notes/phase2-checklist.md` | 学习检查清单 |
| `notes/report-template.md` | Bug 报告模板 |
| `notes/vulnerability-study.md` | 漏洞学习笔记 |
| `LICENSE` | ISC 许可证全文 |
### 脚本职责 / 脚本职责
| 脚本 | 阶段 | 关键标志(默认) |
|--------|-------|---------------------|
| `setup.go` | 设置 | (无标志) — 验证二进制文件,下载 `SecLists` |
| `recon.go` | 侦察 | `-d ` (必需), `-skip-nuclei` (关闭) |
| `monitor.go` | 监控 | `-d ` (必需) — 对比 `targets//baseline.json` 差异 |
| `hunt.go` | 漏洞搜寻 | `-d ` (必需), `-type idor|ssrf|` |
| `lab-runner.mjs` | 实验 | Node CLI 参数,Playwright `chromium` |
| `lab-solver.mjs` | 实验 | Node CLI 参数,Playwright `chromium` |
### 产物目录 / 产物目录(已被 gitignored)
| 目录 | 生产者 | 内容 |
|-----------|----------|---------|
| `recon/` | `recon.go`, `hunt.go` | 带时间戳的扫描结果 |
| `targets/` | `monitor.go` | 各域名的基线和差异 |
| `reports/` | 操作者编写 | 提交的报告副本 |
| `wordlists/` | `setup.go` | 下载的 SecLists,nuclei-templates |
## 入口点及扩展性 / 入口点及扩展性
| 界面 | 如何调用 | 备注 |
|---------|-------------|-------|
| CLI 编排器 | `make help` | 输出所有命令 + 使用示例 |
| 单目标侦察 | `make recon TARGET=domain.com` | `recon.go -d ` |
| 快速侦察 | `make recon-fast TARGET=domain.com` | 跳过 nuclei 步骤 |
| 变更监控 | `make monitor TARGET=domain.com` | 基线差异 + 可选的 Discord 通知 |
| 广泛搜寻 | `make hunt TARGET=domain.com` | `hunt.go` 全类别 |
| 聚焦搜寻 | `make hunt-idor TARGET=domain.com`, `make hunt-ssrf TARGET=domain.com` | 单一类别 |
| 组合运行 | `make full-scan TARGET=domain.com` | 侦察 + 搜寻 串联 |
| 实验练习 | `node scripts/lab-runner.mjs` / `lab-solver.mjs` | 隔离的浏览器会话 |
| 清理 | `make clean` | 仅删除产物,保留代码 |
扩展点 / 扩展点:
| 目标 | 在此编辑 |
|------|-----------|
| 添加新的搜寻类别 | `scripts/hunt.go` → `huntTypes` slice |
| 修改侦察阶段 | `scripts/recon.go` 主体中的阶段函数 |
| 修改通知频道 | `scripts/monitor.go` + `config/targets.json` |
| nuclei 速率限制 | 各脚本的标志默认值 |
| 注册新目标 | `config/targets.json` |
## 快速开始 / 快速开始
| 步骤 | 命令 | 说明 |
|------|------|------|
| 1 | `git clone ` | 克隆代码库 |
| 2 | 安装前置要求工具:Go 1.20+, Node.js 18+, `subfinder`, `httpx`, `nuclei`, `waybackurls`, `Discord webhook URL` (可选) | 操作者直接在系统中安装 |
| 3 | `npm install` | 下载 Playwright 浏览器 |
| 4 | `make setup` | 下载 wordlist,验证工具 |
| 5 | `make recon TARGET=` | 首次侦察运行 |
| 6 | `make hunt TARGET=` | 针对发现的攻击面进行搜寻 |
| 7 | `node scripts/lab-runner.mjs` | 隔离实验工作流 |
**操作者需自行满足的前置条件 / 操作者需自行满足的前置条件:**
- 项目管理方提供的**书面授权**(所有扫描必须仅在授权范围内进行)
- 本地安装 Go 工具链、Node.js 以及上述指定的安全 CLI
- Discord webhook URL(如果需要监控通知,请在 `config/targets.json` 中配置)
- 足够的本地磁盘空间,确保产物不会发送到外部
## 配置 / 配置
`config/targets.json` 承担两项职责:声明目标域名/范围、配置通知。
| 键 | 用途 | 示例 |
|-----|---------|---------|
| `targets` | 操作者明确注册的目标数组 | `[{ "domain": "example.com", "scope": ["*.example.com"] }]` |
| `discord.webhook` | 用于监控差异通知的 webhook URL(可选) | 环境变量或明文 |
| `discord.rate_limit` | 防止通知泛滥 | 每秒消息数 |
| `defaults.rate_limit` | nuclei 默认速率 | 默认 `100 req/s` |
可通过脚本标志在运行时进行覆盖(除了 Make 目标中的 `TARGET=`,还可通过环境变量/CLI 标志传递)。
## 命令参考 / 命令参考
| Make 目标 | 底层命令 | 使用场景 |
|-------------|------------|----------|
| `help` | print + grep 自带文档 | 查看命令列表 |
| `setup` | `go run scripts/setup.go` | 首次设置环境 |
| `recon TARGET=x` | `go run scripts/recon.go -d x` | 完整侦察 |
| `recon-fast TARGET=x` | `go run scripts/recon.go -d x -skip-nuclei` | 快速侦察 |
| `monitor TARGET=x` | `go run scripts/monitor.go -d x` | 追踪新发现 |
| `hunt TARGET=x` | `go run scripts/hunt.go -d x` | 全类别搜寻 |
| `hunt-idor TARGET=x` | `go run scripts/hunt.go -d x -type idor` | 仅搜寻 IDOR |
| `hunt-ssrf TARGET=x` | `go run scripts/hunt.go -d x -type ssrf` | 仅搜寻 SSRF |
| `full-scan TARGET=x` | recon + hunt 串联 | 一键全部运行 |
| `clean` | 本地 rm | 清理产物 |
## 本地开发 / 本地开发
| 任务 | 方法 |
|------|------|
| 直接运行单个脚本 | `go run scripts/recon.go -d example.com` |
| 直接运行 Node 脚本 | `node scripts/lab-runner.mjs` |
| 更新依赖 | `npm install`(仅限 Playwright) |
| 管理 go.mod | 不需要 — 采用单文件仅标准库策略 |
| 添加新步骤 | 在现有脚本的阶段函数中添加 hook |
| 更新文档 | [`notes/phase2-checklist.md`](notes/phase2-checklist.md), [`notes/report-template.md`](notes/report-template.md) |
| 审查产物 | `recon//`, `targets//` |
编码规范 / 编码规范:
- 所有 Go 脚本均为独立文件,仅使用标准库
- 外部工具通过 `os/exec` 调用
- 产物保存在 `recon//` 树中
- 严禁提交扫描结果 — `recon/`, `targets/`, `reports/`, `wordlists/` 均被 gitignored
- 切勿在代码中硬编码域名 — 统一通过 `config/targets.json` 或 `TARGET=` 标志注入
## 负责任的使用 / 负责任的使用
作为一款安全自动化工具包,我们严格遵守以下规则。
| 规则 | 原因 |
|------|------|
| 仅在书面授权的程序/范围内执行 | 未经授权的扫描违反法律及政策 |
| 不盲目提高默认 `100 req/s` 的 nuclei 速率 | 保护目标服务 |
| 产物不会自动发送到外部 — 需要明确的转发步骤 | 防止数据泄露 |
| 不在代码中硬编码域名 | 避免范围外目标 |
| 发现漏洞时遵循 [`notes/report-template`](notes/report-template.md) 负责任地报告 | 优先选择可协调的披露途径 |
| 通知频道需由操作者有意开启 | 防止监控通知泛滥 |
## 测试 / 测试
此代码库**不包含自动化测试套件** — `package.json` 中的 `test` 脚本有意设为占位符。
| 项目 | 策略 |
|------|------|
| 单元测试 | 无(因外部安全 CLI 编排和侦察工具的特性,需要真实目标/模拟环境) |
| 集成测试 | 由操作者在本地通过 `make full-scan TARGET=` 手动验证 |
| 测试目标 | 本地实验域名或明确授权的自有资产 |
| CI/CD | 无 — 个人研究工具包 |
添加新步骤时,请务必先在模拟目标上进行 dry-run 测试。
## 维护者 / 维护者
| 角色 | 备注 |
|------|------|
| 所有者 | 个人运营者 — `jclee@dev/bug` 标识符 |
| 联系方式 | 此代码库的 Issue 跟踪器 |
| 响应时间 | 尽力而为,视个人时间而定 |
| 升级支持 | 无(非托管服务) |
## 附加文档 / 更多文档
| 主题 | 文档 |
|-------|----------|
| 操作者知识库 | [`AGENTS.md`](AGENTS.md) |
| 贡献指南 | [`CONTRIBUTING.md`](CONTRIBUTING.md) |
| 学习检查清单 | [`notes/phase2-checklist.md`](notes/phase2-checklist.md) |
| 报告模板 | [`notes/report-template.md`](notes/report-template.md) |
| 漏洞学习笔记 | [`notes/vulnerability-study.md`](notes/vulnerability-study.md) |
| 外部工具(由操作者安装) | `subfinder`, `httpx`, `nuclei`, `waybackurls`, `SecLists` 的项目页面 |
## 许可证 / 许可证
ISC — 全文见:[`LICENSE`](LICENSE). 本套件仅用于**授权的安全研究和学习**,操作者需对滥用行为承担责任。
标签:EVTX分析, MITM代理, 实时处理, 密码管理, 数字取证, 日志审计, 浏览器自动化, 特征检测, 自动化脚本, 运行时操纵