n4uu/snitch

GitHub: n4uu/snitch

一款以单个静态二进制文件实现的攻击面侦察编排工具,将多种主流安全工具串联为智能化流水线并支持差异监控与 Webhook 告警。

Stars: 3 | Forks: 0

# snitch [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/n4uu/snitch/actions/workflows/ci.yml) [![Go Report Card](https://goreportcard.com/badge/github.com/n4uu/snitch)](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语言, 代码生成, 动态插桩, 安全编排, 实时处理, 密码管理, 日志审计, 渗透测试工具, 程序破解, 自动化侦察