Fakechippies/POC-Hunter

GitHub: Fakechippies/POC-Hunter

一款用 Go 编写的 CLI 工具,通过并发查询多个漏洞数据库发现 CVE 并映射到公开的漏洞验证代码(POC)。

Stars: 2 | Forks: 0

# POC-Hunter CLI 工具,用于发现针对特定产品/版本查询的 CVE,然后为每个 CVE 搜寻公开的 POC。 ## 功能 - 从 **NVD**、**CIRCL**、**OSV**、**Vulners** 和 **GitHub Advisories** 发现 CVE - 并发查询所有 CVE 源,对结果进行去重 - 通过可配置的工作池(最大 8 个)从 **poc-in-github** 和 **search-vulns** 发现 POC - 通过 `--poc` / `-poc` 实现直接 POC 模式 - 版本变体匹配(例如:`2.2.0` 可以匹配 `v2.2.x`) - 通过 `--sources` 标志选择 CVE 源 - 正确的表格格式,DETAIL 列支持自动换行 - Vulners 源使用 `/api/v4/audit/software`(基于 CPE、部分匹配、扩展目录) ## 安装 ``` go install github.com/Fakechippies/pochunter/cmd/pochunter@latest ``` 然后运行: ``` pochunter --search ``` ## 模式 ### 1) 关键字模式(默认) 使用以下方式之一: - `--search <产品关键字...> <版本>` - `--app <产品> --version <版本>` - 添加可选的来源提示: - `--vendor <供应商>` - `--ecosystem <生态系统>` - `--sources <列表>` — 限制 CVE 来源(逗号分隔:`nvd,circl,osv,vulners,github`) ``` go run ./cmd/pochunter --search go run ./cmd/pochunter --app "" --version go run ./cmd/pochunter --search Krayin CRM 2.20 --vendor Webkul --ecosystem php go run ./cmd/pochunter --app django --version 3.2 --ecosystem PyPI --timeout 20s go run ./cmd/pochunter --search django 4.2 --sources nvd,vulners ``` 基于 API 的可选 CVE 源: ``` export VULNERS_API_KEY="" export GITHUB_TOKEN="" ``` 当设置了相应的环境变量时,这些源会自动包含在内,并可通过 `--sources` 进行筛选。 基于 API 的可选 POC 源: ``` export SEARCHVULNS_API_KEY="" ``` 设置了环境变量时会自动包含。 ### 2) 直接 POC 模式 跳过 CVE 发现,通过 CVE ID 直接搜索 POC。 ``` go run ./cmd/pochunter -poc CVE-2026-38526 go run ./cmd/pochunter -poc CVE 2026 38526 ``` ## 可用的 CVE 源 | 标志 | 来源 | 认证 | 备注 | |----------|-------------------|-------------------|-------| | `nvd` | NVD API 2.0 | 无 | 带有版本变体回退过滤的关键字搜索。`resultsPerPage=200`。 | | `circl` | CIRCL CVE search | 无 | 查询 `cve.circl.lu/api/search/{vendor}/{product}`。如果 vendor 为空,则回退为 `vendor=product`。 | | `osv` | OSV.dev | 无 | 基于 Package-ecosystem。**需要 `--ecosystem`**。将 version+package POST 到 `api.osv.dev/v1/query`。将别名解析为 CVE。 | | `vulners`| Vulners v4 audit | `VULNERS_API_KEY` | 使用带有结构化 CPE 对象的 `POST /api/v4/audit/software`(`"match": "partial"`,`"catalog": "extended"`)。 | | `github` | GitHub Advisories | `GITHUB_TOKEN` | **需要 `--ecosystem`**。通过 ecosystem+package 过滤器查询 `api.github.com/advisories`。 | ## 标志 | 标志 | 描述 | |------------------|--------------------------------------------------| | `--search` | 关键字搜索模式 | | `--poc` / `-poc` | 直接 POC 模式(输入 CVE ID) | | `--app` | 应用/产品名称 | | `--version` | 应用版本 | | `--vendor` | 供应商名称(搜索提示) | | `--ecosystem` | Package ecosystem(`npm`、`pypi`、`go`、`maven`、`rubygems` 等) | | `--sources` | 要查询的逗号分隔的 CVE 源 | | `--timeout` | 请求超时(默认 30 秒) | ## CVE 发现 1. 通过 goroutine **并发**查询所有选定的 CVE 源。 2. 通过 CVE + 来源 + 详情对结果进行**去重**。 3. 收集并排序唯一的 CVE ID。 4. 对于每个唯一的 CVE,查询所有 POC 源(工作池,**最大 8** 个并发)。 5. 将 POC 发现扁平化,并按 CVE → owner → URL 排序。 ## POC 源 | 来源 | 认证 | 描述 | |-----------------|----------------------|--------------------------------------------------| | `poc-in-github` | 无 | 查询 `poc-in-github.motikan2010.net/api/v1/?cve_id=` | | `search-vulns` | `SEARCHVULNS_API_KEY`| 查询 `search-vulns.com/api/search-vulns?query=` | ## 库使用 这也是一个 Go 库。导入你需要的包: ``` import ( "context" "time" "github.com/Fakechippies/pochunter/cve" "github.com/Fakechippies/pochunter/poc" ) func findCVEs(ctx context.Context, product, version string) ([]cve.Finding, error) { src := cve.NVDSource{} return src.Query(ctx, "", product, version, "") } func findPOCs(ctx context.Context, cveID string) ([]poc.Finding, error) { src := poc.POCInGithub{} return src.Query(ctx, cveID) } func multiSource(ctx context.Context, product, version string) ([]cve.Finding, error) { sources := []cve.Source{ cve.NVDSource{}, cve.CIRCLSource{}, cve.OSVSource{}, } ctx, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() var all []cve.Finding for _, s := range sources { findings, err := s.Query(ctx, "", product, version, "npm") if err != nil { continue } all = append(all, findings...) } return all, nil } ``` ### 包 | 包 | 导入路径 | 描述 | |----------------|------------------------------------------------|-------------| | `cve` | `github.com/Fakechippies/pochunter/cve` | Source interface + NVD, CIRCL, OSV, Vulners, GitHub Advisories | | `poc` | `github.com/Fakechippies/pochunter/poc` | Source interface + poc-in-github, search-vulns | | `versioncanon` | `github.com/Fakechippies/pochunter/versioncanon`| 用于模糊匹配的版本变体生成 | ## TODO: - [ ] 添加输出格式(JSON/CSV)。 - [ ] 添加缓存、重试/退避机制。 - [ ] 为版本规范化和源适配器添加单元测试。
标签:CISA项目, EVTX分析, Go, PoC收集, Ruby工具, XSS, 域名收集, 密码管理, 文档结构分析, 日志审计, 漏洞情报, 漏洞检索