n4uu/snitch
GitHub: n4uu/snitch
一款以单个静态二进制文件实现的攻击面侦察编排工具,将多种主流安全工具串联为智能化流水线并支持差异监控与 Webhook 告警。
Stars: 3 | Forks: 0
# snitch
[](https://github.com/n4uu/snitch/actions/workflows/ci.yml)
[](https://goreportcard.com/report/github.com/n4uu/snitch)
**用于“告发”你的攻击面的侦察工具。**
`snitch` 将 subfinder → naabu → httpx → Nmap → Nuclei → ffuf → katana 串联为
一个互相关联、去重且可重复运行的侦察 pipeline — 随后*监控*
你的目标:按计划定时运行,一旦出现**新**内容,它就会向 webhook (Discord/Slack/
或任何其他平台) 发送警报。单个静态 Go 二进制文件,无 runtime
依赖,无需基础设施。
大多数侦察工具要么过于笨重 (需要启动 Docker + Postgres + web 技术栈) ,要么
属于“即发即忘”模式 (扫描一次,手动比对差异) 。`snitch` 提供了轻量级的折中
方案:一个你可以用 `cron` 定时运行然后抛诸脑后的单一二进制程序,它会告诉你发生了什么变化。
## 独特之处
| | snitch | 典型的 bash 编排器 | reNgine 风格的平台 |
|---|---|---|---|
| 部署 | 单个静态二进制文件 | 脚本 + 工具依赖 | Docker + Postgres + web |
| 可重复运行 + 去重 | ✅ 内置 | ✗ | ✅ |
| **差异比对 + webhook 警报** | ✅ `monitor` | ✗ | 部分支持 |
| 关联的主机级报告 | ✅ MD + HTML | ✗ | ✗ |
| 可操作的发现 (修复/CVE/curl) | ✅ | ✗ | 视情况而定 |
## 功能
- **完整的发现链**:subfinder 将域名扩展为其子域名,
naabu 快速扫描它们的开放端口,httpx 探测存活的 HTTP(S) (标题、
技术、状态码) ,Nmap 增加服务/版本深度,Nuclei + ffuf 针对已确认的
web 目标运行,katana 对它们进行爬取以发现链接的 endpoint。每个
阶段都是可选的 (`--skip-subfinder`, `--skip-naabu`, `--skip-katana`, …) 。
- **注入测试**:katana 发现的带参数 URL 会自动发送给
dalfox (XSS) 和 crlfuzz (CRLF 注入) 进行测试,并且 — 通过
`--sqli` 开启 — 发送给 sqlmap 进行 SQL 注入测试。确认命中的结果将作为
优先发现项 (附带复现命令) 进入报告。sqlmap 默认关闭并且
有上限 (`--sqli-max`) ,因为它会进行主动利用。
- **链式驱动,而非盲目并行**:发现过程决定了后续测试的内容 — 只有
存活的 web 服务才会进入 Nuclei 和 ffuf,不会向 SSH
端口发送 HTTP 模板。所有工具的发现结果都会关联到每个
host:port 对应的单一资产上 (nmap 的服务 + httpx 的标题/技术合并到一行中) 。
- **带警报的 `monitor` 模式**:按计划定时重新扫描,与之前看到的
所有内容进行 diff 比对,并在出现新
服务或发现时,向 Discord/Slack/通用 webhook POST 一条警报。根据 URL 自动检测 webhook 类型。
- **基于真实去重键的去重**:下周重新运行时,你看到的是
*新*内容,而不是同样那 200 行 — 已在 `go test -race` 下通过 20 个
并发 goroutine 同时写入验证。
- **并发 ffuf**:每个 web 目标都在其独立的 goroutine 中进行模糊测试,受控于
worker pool (`-workers`,默认值为 5) 。
- **实时进度**:每个工具的输出都会逐行流式传输,并附带耗时
横幅和心跳信息 — 不再需要盯着卡住的终端。
- **可操作的报告,而非数据堆砌**:发现结果分为*优先*
(严重/高/中) 和*信息性*两类,每条优先发现项都扩展了
描述、修复建议、CVE/CVSS、参考链接和复现 `curl`
命令 — 外加一个“如何处理本报告”的分类处理 (triage) 部分。
- **交互式 TUI**:`snitch tui --project X` 打开一个 Bubble Tea 终端 UI,
用于分页浏览子域名、服务、发现 (按严重程度进行颜色编码) 和
爬取的路径,并提供一个详细信息面板来展示发现项的修复和复现方法。
- **单命令流程**:`scan --report html --open` 运行链条并
在浏览器中自动弹出完成的报告。
- **导出**为 JSON、CSV (扁平化的发现清单) 或 **SARIF 2.1.0** — 后者
可以直接上传到 GitHub 代码扫描或 DefectDojo,严重程度映射到
`security-severity` 以确保正确归类。
## 安装说明
snitch 是一个单一的 Go 二进制文件,通过调用知名的侦察工具来执行任务。**你
不需要安装所有工具** — 任何缺失的工具都会在发出警告后被跳过,因此
即使只有 `nmap`、`httpx`、`nuclei` 和 `ffuf`,你也能完成一次有效的扫描。
### 在 Kali 上 (推荐 — 预编译,无需编译)
Kali 几乎打包了所有工具,因此只需一行命令且速度很快:
```
sudo apt update
sudo apt install -y golang-go git nmap ffuf sqlmap \
subfinder httpx-toolkit naabu nuclei katana dalfox
sudo ln -sf "$(command -v httpx-toolkit)" /usr/local/bin/httpx # ProjectDiscovery httpx
nuclei -update-templates
```
然后构建 snitch:
```
git clone https://github.com/n4uu/snitch.git
cd snitch
make build # → ./snitch (or: make install to put it on your PATH)
./snitch version
```
大功告成。将它指向你拥有或被授权测试的目标:
```
./snitch scan yourdomain.com --project demo --report html --open
```
### 其他发行版 / 从源码构建工具
如果你的包管理器没有这些工具,`make tools` 会使用 `go install` 安装所有基于 Go 的
工具。注意:这会**从源码编译每一个工具并拉取
大量依赖** (nuclei 和 katana 体积庞大) ,因此速度较慢 — 尽可能
优先使用包管理器提供的预编译版本。
```
sudo apt install -y libpcap-dev # naabu needs libpcap
make tools
echo 'export PATH="$PATH:$(go env GOPATH)/bin"' >> ~/.bashrc && source ~/.bashrc
```
## 快速开始
```
# 完整 chain(flags 顺序不限 —— target 位置会自动归一化)
./snitch scan example.com --project acme --wordlist /usr/share/wordlists/dirb/common.txt
# 单次运行:扫描,然后自动写入并打开 HTML 报告
./snitch scan example.com --project acme --wordlist wl.txt --report html --open
# 添加使用 sqlmap 的主动 SQL-injection 测试(可选,测试抓取到的 param URL)
./snitch scan example.com --project acme --wordlist wl.txt --sqli
# 监控 target,当出现新内容时在 Discord/Slack 上接收 ping 通知
./snitch monitor example.com --project acme --wordlist wl.txt \
--notify https://discord.com/api/webhooks/XXX/YYY --interval 6h
# 或者通过 cron 运行一个周期(不带 --interval);如果没有新内容,snitch 保持安静
./snitch monitor example.com --project acme --skip-ffuf --notify
# 报告(-open 会在你的浏览器中启动)
./snitch report --project acme -format html -o report.html -open
# 在终端中交互式浏览结果
./snitch tui --project acme
# 状态 / 历史记录和机器可读导出(json | csv | sarif)
./snitch status --project acme
./snitch export --project acme -format sarif -o findings.sarif
```
## 为什么使用 Go,以及为什么不用 SQLite
Go 的标准 SQLite 驱动需要 CGO,这破坏了“发布一个静态
二进制文件”的优势,而这正是为这类 CLI 使用 Go 的全部意义所在。
存储由一个受 mutex 保护的 JSON 文件实现 — 对于单个项目的侦察数据来说
绰绰有余 (数千行,而非数百万行) 并且无需搭建数据库。扫描
pipeline、存储和警报仅使用标准库;唯一的
第三方代码是 `tui` 背后的纯 Go 实现的 Bubble Tea 技术栈。一切依然
编译为单一的、无 CGO 的静态二进制文件。
## 测试
```
go vet ./...
gofmt -l . # should print nothing
go test -race ./... # concurrency test + webhook delivery test
```
`integration_test.go` 会对 `samples/` 中的示例文件运行完整的 解析 → 去重 → 报告 pipeline —
无需运行真实的 nmap/nuclei/ffuf。
## 架构
```
cmd/snitch/main.go # CLI: scan / monitor / report / status / export
internal/store/ # JSON-backed workspace, dedup, concurrency-safe
internal/parsers/ # subfinder/naabu/httpx/nmap/nuclei/ffuf/katana/dalfox/sqlmap -> structs
internal/orchestrator/ # Chains the tools, runs ffuf concurrently, live output
internal/report/ # Actionable Markdown + HTML reports
internal/notify/ # Discord / Slack / generic webhook alerts
internal/export/ # JSON / CSV / SARIF exporters
internal/tui/ # Bubble Tea interactive results browser
samples/ # Sample tool output for testing
integration_test.go # End-to-end pipeline test
```
## 路线图
- [x] Webhook 警报 + `monitor` 模式
- [x] 完整的发现链:subfinder → naabu → httpx → nmap → nuclei → ffuf → katana
- [x] 注入测试:dalfox (XSS) 、crlfuzz (CRLF) 、可选开启的 sqlmap (SQLi)
- [x] 用于浏览结果的交互式 TUI (Bubble Tea)
- [x] 导出器:JSON、CSV、SARIF 2.1.0
- [ ] 扫描配置文件 + 范围内/范围外 (in/out-of-scope) 规则
## 法律声明
仅限对你拥有或明确授权测试的系统使用。
标签:CISA项目, EVTX分析, FTP漏洞扫描, Go语言, 代码生成, 动态插桩, 安全编排, 实时处理, 密码管理, 日志审计, 渗透测试工具, 程序破解, 自动化侦察