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, 域名收集, 密码管理, 文档结构分析, 日志审计, 漏洞情报, 漏洞检索