内容
# PocMap
[](https://github.com/zebbern/pocmap)
[](https://www.python.org/downloads/)
[](LICENSE)
[](https://docs.pydantic.dev/)
漏洞利用验证工具包,适用于漏洞悬赏猎人和安全专业人员。从单一界面查找验证概念验证(POC)漏洞利用程序、CTF实验室、漏洞悬赏报告和漏洞情报。
## 主要功能
- **多源发现**:同时查询GitHub、Exploit-DB、Metasploit、Nuclei、CTF实验室和漏洞悬赏平台
- **结构化Pydantic模型**:所有数据都经过验证和序列化,具有完整的类型安全性和JSON模式支持
- **MCP服务器集成**:通过模型上下文协议为Claude Desktop、Cursor和其他AI代理提供19种AI原生工具
- **漏洞悬赏工具包**:完整的猎人工具包,包含检查清单、工作流程、报告模板、优先级引擎和范围管理
- **丰富的CLI**:12个命令,带有彩色表格、进度条和批量处理
- **可组合的输出**:`table`、`json`、`csv`、`md`和`sarif`输出格式,适用于读取命令,以及用于脚本编写和CI的稳定[退出代码合约](#输出格式和退出代码)
- **CI安全门控**:`bulk --fail-on kev|critical|high|epss>=N`在策略匹配时失败构建,并为GitHub代码扫描发出SARIF 2.1.0
- **缓存和离线模式**:持久的、带有TTL的HTTP响应缓存和一流的`--offline`模式,适用于空气隔离或重复运行
- **快照差异**:`latest`/`discover --diff`仅显示自上次相同运行以来发生的变化
- **并发处理**:基于线程池的批量CVE处理,带有指数退避重试逻辑
- **报告生成**:自包含的HTML报告(样式化的卡片和表格、内联CSS、无外部资产或JS)以及JSON导出
- **安全强化**:SSRF保护、沙盒化的Jinja2模板、路径遍历预防和输入验证
## 安装
PocMap **尚未发布到PyPI** - 请从源代码以可编辑模式安装。
(计划通过发布自动化将PyPI / `pipx install pocmap`与发布自动化结合;在此之前,请使用下面的`git clone`流程。)
```bash
# 从源代码安装(可编辑)
git clone https://github.com/zebbern/pocmap.git
cd pocmap
pip install -e .
# 带有MCP服务器(FastMCP SDK - 需要运行mcp_server.py)
pip install -e ".[server]"
# 带有异步支持
pip install -e ".[async]"
# 带有开发依赖项(pytest、mypy、ruff)
pip install -e ".[dev]"
# 验证安装
pocmap --version # -> pocmap v2.0.0
```
每个命令也可以作为`python -m pocmap ...`运行,如果`pocmap`脚本不在您的`PATH`中。
**要求:**
- Python 3.10+(在3.12上开发/验证)
- 依赖项:pydantic>=2.0,requests>=2.28,typer>=0.9,rich>=13.0
**可选:**
- `GITHUB_API_TOKEN` - GitHub PAT,用于更高的速率限制(推荐)
- `NVD_API_KEY` - NVD API密钥,用于增加速率限制
- `[server]`额外功能(FastMCP SDK)仅适用于MCP服务器
## 快速入门
```bash
# 查询单个CVE
pocmap lookup CVE-2021-44228
# 显示完整描述和引用
pocmap lookup CVE-2021-44228 --description
# 按编程语言过滤PoC
pocmap lookup CVE-2021-44228 --language Python
# 从文件中处理多个CVE
pocmap bulk cves.txt --output ./reports
# 搜索CTF实验室以进行实践
pocmap labs CVE-2021-44228
# 搜索漏洞悬赏报告
pocmap bugbounty CVE-2021-44228
# 获取CVE的CPE(受影响的产品)
pocmap cpes CVE-2021-44228
# 将CPE转换为CVE
pocmap cpe2cve "cpe:2.3:a:apache:log4j:2.0"
# 为AI代理集成导出JSON模式
pocmap schemas --output ./schemas
# 查找最近发布的CVE,过去24小时
pocmap latest
# 查找最近的严重CVE,过去7天内带有PoC
pocmap latest --since 7d --severity critical --only-with-poc
# 发现影响产品的CVE,按名称
pocmap discover "Apache Struts"
# 发现特定产品版本的CVE
pocmap discover "Log4j" --version 2.x
# 机器可读输出(任何读取命令):table(默认)、json、csv、md、sarif
pocmap lookup CVE-2021-44228 --format json
pocmap latest --since 7d --format sarif --output out/
# 将pocmap用作CI门控(如果任何CVE在CISA KEV中,则退出6)
pocmap bulk cves.txt --format sarif --fail-on kev
# 仅显示自上次相同运行以来发生的变化
pocmap latest --since 24h --diff
# 运行自我诊断并检查/清除响应缓存
pocmap doctor
pocmap cache info
pocmap cache clear
# 从本地缓存提供所有内容(无网络)
pocmap --offline lookup CVE-2021-44228
# 显示所有选项的帮助
pocmap --help
```
### CLI命令(12个)
| 命令 | 目的 |
|---------|---------|
| `lookup` | 查询单个CVE以及发现的PoC、DB利用程序和实验室 |
| `bulk` | 处理多个CVE来自文件或stdin;JSON/HTML报告和CI门控 |
| `labs` | 查找CVE的CTF实验室和漏洞环境 |
| `bugbounty` | 查找CVE的漏洞悬赏报告/文章 |
| `cpes` | 列出CVE的受影响CPE标识符 |
| `cpe2cve` | 列出影响CPE标识符的CVE ID |
| `readme` | 打印GitHub仓库的README |
| `schemas` | 为所有数据模型导出JSON模式 |
| `latest` | 查找最近发布的CVE,包含漏洞情报 |
| `discover` | 发现影响产品名称和版本的CVE |
| `doctor` | 运行自我诊断(Python、额外功能、令牌、缓存、连接) |
| `cache` | 检查(`info`)和清除(`clear`)持久的HTTP缓存 |
全局选项(在`pocmap`本身上,在命令之前):`--format/-f {table,json,csv,md,sarif}`、`--offline`、`--quiet/-q`、`--version/-v`。读取命令还接受`--format`/`--quiet`本地,这会覆盖全局值。
## Python API
### CVE信息查询
```python
from pocmap.services.cve_service import CVEService
cve_svc = CVEService()
info = cve_svc.get_cve_info("CVE-2021-44228")
print(info.id) # "CVE-2021-44228"
print(info.description) # 完整的漏洞描述
print(info.cvss.base_score) # 10.0
print(info.cvss.severity.value) # "CRITICAL"
print(info.cvss.vector_string) # "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"
print(info.epss) # 97.53(利用概率)
print(info.kev_status) # True(在CISA KEV目录中)
print(info.cwes) # ["CWE-77", "CWE-94"]
print(info.vendor) # "Apache"
print(info.product) # "Log4j"
print(info.publication_date) # "2021-12-10"
```
### 漏洞发现
```python
from pocmap.services.exploit_service import ExploitService
exploit_svc = ExploitService()
# 查找所有跨所有来源的漏洞
exploits = exploit_svc.find_exploits("CVE-2021-44228")
for ex in exploits:
print(f"[{ex.source.value}] {ex.title}")
print(f" URL: {ex.url}")
print(f" 语言: {ex.language} | 星级: {ex.stars} | 分叉: {ex.forks}")
# 按编程语言过滤
python_pocs = exploit_svc.filter_by_language(exploits, "Python")
go_pocs = exploit_svc.filter_by_language(exploits, "Go")
# 获取GitHub仓库的README
readme = exploit_svc.get_readme("https://github.com/example/poc")
```
### 实验室环境
```python
from pocmap.services.lab_service import LabService
lab_svc = LabService()
labs = lab_svc.find_labs("CVE-2021-44228")
for lab in labs:
print(f"[{lab.platform.value}] {lab.name}: {lab.url}")
if lab.setup_instructions:
print(f" 设置: {lab.setup_instructions}")
```
### 漏洞悬赏报告
```python
from pocmap.services.bb_service import BugBountyService
bb_svc = BugBountyService()
reports = bb_svc.find_reports("CVE-2021-44228")
for report in reports:
print(f"[{report.source.value}] {report.title}")
print(f" URL: {report.url} | 包含PoC: {report.has_poc}")
```
### 报告生成
```python
from pocmap.services.report_service import ReportService
report_svc = ReportService()
# 单个CVE报告
entry = report_svc.generate_report("CVE-2021-44228")
print(entry.to_json())
# 批量报告,包含JSON和HTML输出
multi = report_svc.generate_bulk_report([
"CVE-2021-44228",
"CVE-2023-38408",
"CVE-2024-21413",
])
report_svc.save_json_report(multi, "./output")
report_svc.save_html_report(multi, "./output")
```
### 为AI代理导出模式
```python
from pocmap.models import export_schemas
paths = export_schemas("./schemas")
# 生成:CVSSScore.json、CVEInfo.json、Exploit.json、
# LabEnvironment.json、BugBountyReport.json、
# CPEInfo.json、ReportEntry.json、MultiReport.json
```
## 漏洞悬赏工具包
`pocmap.bugbounty`模块为漏洞悬赏猎人提供了一个全面的工具包:
### 结构化检查清单
基于阶段的检查清单,具有P0-P4优先级级别、完成跟踪和时间估计:
```python
from pocmap.bugbounty import (
ReconnaissanceChecklist,
CVEResearchChecklist,
ExploitationChecklist,
ReportingChecklist,
)
# 创建并跟踪检查清单
checklist = ReconnaissanceChecklist()
checklist.items[0].complete(notes="子域名枚举完成")
print(checklist.completion_status()) # 进度百分比
```
### 方法工作流程
具有入口/出口标准和难度评级的结构化、可重复的工作流程:
```python
from pocmap.bugbounty import (
CVEToBountyWorkflow, # CVE -> 漏洞悬赏流程
ZeroDayHuntingWorkflow, # 主动漏洞发现
PatchGapAnalysisWorkflow, # 补丁时间差距利用
)
workflow = CVEToBountyWorkflow()
result = workflow.execute_phase("recon", context={"target": "example.com"})
```
### 报告模板
适用于HackerOne、Bugcrowd和内部评估的平台特定报告模板:
```python
from pocmap.bugbounty import HackerOneTemplate, BugcrowdTemplate
template = HackerOneTemplate()
report = template.render(
cve_data=cve_info,
impact="通过构造的JNDI查找实现远程代码执行",
steps_to_reproduce=[
"1. 确定2.x版本的Log4j实例",
"2. 向漏洞端点发送构造的负载",
"3. 观察DNS回调确认RCE",
],
)
```
### 优先级引擎
多策略CVE优先级评估,包含漏洞赏金潜力估计:
```python
from pocmap.bugbounty import prioritize_cves, calculate_bounty_potential
# 按综合得分排序(CVSS + EPSS + KEV + 漏洞可用性)
sorted_cves = prioritize_cves(cve_list, strategy="composite")
# 或按特定因素优先级排序
sorted_cves = prioritize_cves(cve_list, strategy="epss") # 利用概率
sorted_cves = prioritize_cves(cve_list, strategy="kev_first") # 已知利用漏洞优先
sorted_cves = prioritize_cves(cve_list, strategy="bounty_potential")
# 估计漏洞悬赏潜力
for cve in sorted_cves[:10]:
bounty = calculate_bounty_potential(cve)
print(f"{cve['id']}: 潜在收益=${bounty['estimate']}")
```
### 范围管理
解析和管理漏洞悬赏计划范围,匹配CVE与范围内的资产:
```python
from pocmap.bugbounty import ScopeManager, Asset
scope = ScopeManager()
scope.add_program(
platform="hackerone",
program="example",
in_scope=["*.example.com", "api.example.com"],
out_of_scope=["*.internal.example.com"],
)
# 从文件解析范围
scope.parse_scope_file("scope.txt")
# 查找影响范围内的资产的CVE
matches = scope.match_cves_to_scope(cve_list)
```
### 剧本
用于结构化工作流程的JSON剧本:
```python
from pocmap.bugbounty.playbooks import load_playbook, list_playbooks
# 列出可用的剧本
for pb in list_playbooks():
print(f"{pb['name']}: {pb['description']} ({pb['difficulty']})")
# 加载并执行剧本
playbook = load_playbook("cve-assessment")
for phase in playbook["phases"]:
print(f"阶段{phase['phase_id']}: {phase['name']}")
for step in phase["steps"]:
print(f" [{step['priority']}] {step['description']}")
可用剧本:
- **cve-assessment**: 完整的CVE评估工作流程,具有风险评分和补丁
- **rapid-response**: 针对严重/KEV CVE的紧急响应,具有时间范围内的操作
- **bb-submission**: 完整的漏洞悬赏提交管道,从发现到报告
```
## 输出格式和退出代码
通过 `--format/-f` 可以发出机器可读的输出。 `--format` 和 `--quiet/-q` 可以全局设置(在命令之前)或按命令设置(本地值优先)。
```bash
pocmap lookup CVE-2021-44228 --format json # 结构化视图模型输出到标准输出
pocmap latest --since 7d --format csv # 适合电子表格的表格
pocmap discover "Log4j" --format md # Markdown 表格用于票证/维基
pocmap latest --since 24h --format sarif # SARIF 2.1.0 用于代码扫描
pocmap -f json latest --since 7d # 全局格式
```
| 格式 | 值 | 备注 |
|--------|-------|-------|
| 表格 | `table` | 默认。丰富的彩色表格(面向人类)。 |
| JSON | `json` | JSON 可序列化视图模型输出到标准输出,不包含其他内容。 |
| CSV | `csv` | 每行一个记录(`csv.DictReader` 友好)。 |
| Markdown | `md` | Markdown 表格用于票证/维基。 |
| SARIF | `sarif` | SARIF 2.1.0 日志用于 CI 代码扫描。 |
**命令支持的格式:**
- `lookup`, `doctor`, `cache info`, `cache clear`: `table`, `json`
- `labs`, `bugbounty`, `cpes`, `cpe2cve`: `table`, `json`, `csv`, `md`
- `latest`, `discover`: `table`, `json`, `csv`, `md`, `sarif`
- `bulk`: `table`(写入 JSON + HTML 文件),`json`, `csv`, `sarif`
SARIF 结果按 CVE ID 键控,因此仅在 CVE 列表命令(`latest`, `discover`, `bulk`)上可用。请求 `--format sarif` 在其他命令上退出 `4`(无效输入)并显示清晰的消息。严重性映射到 SARIF 级别为 `critical`/`high` -> `error`,`medium` -> `warning`,`low` -> `note`;EPSS、KEV、利用计数和 CVSS 随 `result.properties` 一起骑行,每个 CVE 的 NVD 页面都是规则 `helpUri`。
### 退出代码契约
每个命令都返回一个稳定、文档化的退出代码(参见 `src/pocmap/utils/exit_codes.py`),以便脚本和 CI 可以对命令停止的原因做出反应,而不仅仅是是否成功:
| 代码 | 名称 | 含义 |
|------|------|---------|
| `0` | `OK` | 成功 — 命令运行并产生了输出。 |
| `1` | `ERROR` | 通用/未分类错误。 |
| `2` | `NO_RESULTS` | 运行正常但未找到任何内容(空结果集)。 |
| `3` | `NOT_FOUND` | 请求的资源在上游不存在(例如,未知的 CVE)。 |
| `4` | `INVALID_INPUT` | 调用者输入格式错误(错误的 CVE ID,不安全的路径,错误的 `--fail-on`)。 |
| `5` | `UPSTREAM_ERROR` | 上游数据源失败(网络,速率限制,5xx,离线缓存未命中)。 |
| `6` | `POLICY_FAIL` | `bulk --fail-on` 策略条件匹配(CI 门控触发)。 |
这些值是一个公共契约:现有的代码永远不会重新编号。
## 缓存和离线模式
PocMap 在磁盘上保留了一个**持久的、带 TTL 的 HTTP 响应缓存**(默认 `./.cache`)。这将网络调用转换为亚秒级的缓存调用,避免了 GitHub/NVD 速率限制,并支持真正的离线模式。非 200 和错误响应永远不会被缓存。
```bash
# 使用正常的(在线)运行预热缓存,然后完全离线工作
pocmap lookup CVE-2021-44228
pocmap --offline lookup CVE-2021-44228 # 从缓存中提供,零网络 I/O
# 检查/清除缓存
pocmap cache info # 位置,条目计数,磁盘大小
pocmap cache clear # 删除每个缓存条目
```
在 `--offline` 模式(或使用 `POCMAP_OFFLINE=1`)下,HTTP GET 请求仅从缓存中提供;缓存未命中会显示清晰的离线错误并退出 `5`(`UPSTREAM_ERROR`),而不是伪装成“未找到”或“无结果”。
**缓存/离线配置:**
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `POCMAP_CACHE_ENABLED` | `true` | 启用/禁用持久的 HTTP 缓存。 |
| `POCMAP_CACHE_DIR` | `./.cache` | 缓存响应的目录。 |
| `POCMAP_CACHE_TTL` | `3600` | 缓存条目保持新鲜的秒数。 |
| `POCMAP_CACHE_MAX_MB` | `200` | 磁盘缓存上限(MB)之前进行 LRU 驱逐。 |
| `POCMAP_OFFLINE` | `false` | 仅从缓存中提供;未命中则报错而不是访问网络。 |
## 诊断:`doctor` 和 `cache`
`pocmap doctor` 是从“已安装”到“正常工作”的最快路径。它检查 Python 版本、可选的 `[server]` 额外功能、您的 `GITHUB_API_TOKEN` / `NVD_API_KEY` 格式(从不打印它们的值),缓存目录是否可写,并对 NVD 和 GitHub API 进行实时连接性探测。它打印一个 PASS/WARN/FAIL 表格,**如果任何检查 FAIL,则退出非零**。
```bash
pocmap doctor # 完整运行,带有实时连接性探测
pocmap doctor --offline # 跳过网络探测(标记为 SKIPPED)
pocmap doctor --format json # 机器可读的检查结果
```
`pocmap cache info|clear` 报告和清除响应缓存(参见上文)。
## PocMap 在 CI 中
`bulk` 是一个可组合的 CI 门控。 将其指向 CVE 列表(一个文件,或 `-` 读取标准输入),选择一种机器格式,并使用 `--fail-on` 在策略匹配时使构建失败:
```bash
# 如果任何依赖 CVE 位于 CISA KEV 目录中,则使构建失败(退出 6),
# 并为 GitHub 代码扫描写入 SARIF 日志。
pocmap bulk cves.txt --format sarif --output out/ --fail-on kev
# 直接从另一个工具管道 CVE ID
grep -oE 'CVE-[0-9]{4}-[0-9]+' sbom.txt | pocmap bulk - --format json --fail-on critical
```
`--fail-on` 接受 `critical`,`high`( HIGH 或更糟),`kev` 或 `epss>=N`(例如 `epss>=50` 在 0-100 EPSS 规模上)。 匹配项退出 `6`(`POLICY_FAIL`)- 与通用错误区分开来,因此 CI 可以将触发的门控与操作失败区分开来;没有匹配项退出 `0`。格式错误的 `--fail-on` 退出 `4`。在 `table` 模式下,`bulk` 保留其历史行为(写入 JSON **和** HTML 报告到 `--output`);机器格式(`json`/`csv`/`sarif`)发出干净的标准输出摘要,不写入任何文件,因此流保持可解析性。
参见 [`examples/ci-github-actions.yml`](examples/ci-github-actions.yml) 以获取一个现成的 GitHub Actions 工作流,该工作流运行门控并将 SARIF 上传到代码扫描,并参见 [`examples/`](examples/) 目录以获取更多可运行的脚本。
## AI 代理集成
PocMap 包含一个完整的 MCP(模型上下文协议)服务器,暴露了 19 个 AI 原生工具,用于与 Claude Desktop、Cursor 和其他兼容 MCP 的客户端集成。
### MCP 服务器设置用于 Claude Desktop
将以下内容添加到您的 Claude Desktop 配置文件中:
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows:** `%APPDATA%/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"pocmap": {
"command": "python",
"args": ["/path/to/pocmap/mcp_server.py"],
"env": {
"GITHUB_API_TOKEN": "ghp_xxxxxxxxxxxx",
"NVD_API_KEY": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
}
}
}
```
### 运行 MCP 服务器
MCP 服务器需要 FastMCP SDK,该 SDK 随 `server` 额外功能一起提供。 首先安装它:
```bash
pip install -e ".[server]"
```
```bash
# STDIO 传输(默认,用于 Claude Desktop)
python mcp_server.py
# SSE 传输,端口 8000
python mcp_server.py --transport sse
# HTTP 传输
python mcp_server.py --transport http --host 0.0.0.0 --port 9000
# 调试模式
python mcp_server.py --debug
```
### MCP 工具(共 19 个)
| 工具 | 类别 | 描述 |
|------|----------|-------------|
| `lookup_cve` | CVE 情报 | 来自 NVD、CVE.org、CISA KEV、EPSS 的完整 CVE 详情 |
| `get_epss_score` | CVE 情报 | EPSS 利用概率得分(0.0-1.0)及风险等级 |
| `check_kev_status` | CVE 情报 | 检查 CISA 已知利用漏洞目录状态 |
| `find_github_pocs` | 利用 | GitHub PoC 仓库,含星标、语言和分支 |
| `find_metasploit_module` | 利用 | Metasploit 模块可用性和 msfconsole 命令 |
| `find_exploitdb_entry` | 利用 | ExploitDB 条目,含 searchsploit 命令 |
| `find_nuclei_template` | 利用 | Nuclei 扫描器模板,用于检测/验证 |
| `find_bug_bounty_reports` | 研究 | 来自 HackerOne、PentesterLand 的漏洞赏金报告 |
| `find_practice_labs` | 实验室 | Vulhub、HackTheBox、TryHackMe 上的 CTF 实验室 |
| `find_vulhub_docker` | 实验室 | Vulhub Docker Compose 环境,含设置步骤 |
| `find_recent_exploits` | 发现 | 最近发布的 CVE,含 PoC/KEV/严重性过滤器 |
| `discover_product_cves` | 发现 | 按产品名称查找 CVE,含版本约束 |
| `cve_to_cpe` | 转换 | 将 CVE 转换为受影响的 CPE 标识符 |
| `cpe_to_cve` | 转换 | 查找影响给定产品(CPE)的所有 CVE |
| `generate_json_report` | 报告 | CVE 的综合 JSON 报告 |
| `generate_html_report` | 报告 | 自包含的 HTML 报告,含样式卡片 |
| `get_cve_assessment_playbook` | 剧本 | 完整的 CVE 评估工作流程剧本 |
| `get_rapid_response_playbook` | 剧本 | 关键 CVE 的紧急响应剧本 |
| `get_bug_bounty_playbook` | 剧本 | 漏洞赏金提交工作流程剧本 |
### MCP 资源
| 资源 | URI 模式 | 内容 |
|----------|-------------|---------|
| CVE 信息 | `cve://{cve_id}` | 完整的 CVE 详情为人类可读文本 |
| 利用 | `exploits://{cve_id}` | 所有可用的利用和 PoC |
| 报告 | `report://{cve_id}` | 生成的漏洞报告(JSON) |
### MCP 提示
| 提示 | 描述 |
|--------|-------------|
| `vulnerability_assessment` | 5 阶段结构化 CVE 评估工作流程 |
| `exploit_research` | 深入利用分析,关注检测工程 |
| `bug_bounty_analysis` | 来自漏洞赏金报告的现实影响分析 |
### 代理工作流示例
```
用户:“我应该优先处理 CVE-2021-44228、CVE-2023-38408 还是 CVE-2024-21413?”
代理:
1. lookup_cve("CVE-2021-44228") -> CVSS 10.0 关键,EPSS 0.9753,KEV=true
2. lookup_cve("CVE-2023-38408") -> CVSS 9.8 关键,EPSS 0.3124,KEV=true
3. lookup_cve("CVE-2024-21413") -> CVSS 8.8 高,EPSS 0.8912,KEV=true
4. 为每个获取 EPSS 分数 -> 确认利用概率
5. 为每个查找 GitHub PoC -> 计算可用利用
6. 为每个检查 KEV 状态 -> 确认 KEV 状态
7. 优先级:Log4j(最高 EPSS + 最多利用)> CVE-2024-21413 > CVE-2023-38408
```
## JSON 模式
为所有数据模型导出结构化 JSON 模式,以与 AI 代理、验证管道和外部工具集成:
```python
from pocmap.models import export_schemas
paths = export_schemas("./schemas")
for p in paths:
print(f" {p.name}")
# CVSSScore.json
# CVEInfo.json
# Exploit.json
# LabEnvironment.json
# BugBountyReport.json
# CPEInfo.json
# ReportEntry.json
# MultiReport.json
```
使用这些模式:
- **AI 代理上下文**:为 AI 代理提供模式文件,以便它们了解数据结构
- **验证管道**:根据模式验证输入/输出数据
- **API 文档**:从模式自动生成 API 文档
- **类型生成**:从 JSON 模式生成 TypeScript、Go 或 Rust 类型
## 架构
```
+------------------+ +------------------+ +------------------+
| CLI 层 | | MCP 服务器 | | Python API |
| (Typer/Rich)| | (FastMCP/19 | | (服务) |
+------------------+ | 工具) | +------------------+
| +------------------+ |
| | |
v v v
+------------------+ +------------------+ +------------------+
| 服务层 |<--->| 服务层 |<--->| 服务层 |
| | | | | |
| CVE 服务 | | 利用服务 | | 报告服务 |
| 漏洞赏金服务 | | 实验室服务 | | + 3 更多 |
+------------------+ +------------------+ +------------------+
| | |
v v v
+------------------+ +------------------+ +------------------+
| 客户端层 | | 客户端层 | | 模型层 |
| | | | | |
| NVD 客户端 | | GitHub 客户端 | | CVE 信息 |
| CVE.org 客户端 | | 利用客户端 | | 利用 |
| + 其他 | | + 其他 | | + 6 更多 |
+------------------+ +------------------+ +------------------+
| |
v v
+-------------------------------------------------------------+
| 外部数据源 |
| NVD API CVE.org CISA KEV EPSS GitHub ExploitDB 等 |
+-------------------------------------------------------------+
```
**分层架构:**
1. **表示层**:CLI(`cli.py`)+ MCP 服务器(`mcp_server.py`)
2. **服务层**:业务逻辑(7 个服务:CVE、利用、实验室、报告、漏洞赏金、最近、产品发现)
3. **客户端层**:外部 API 客户端(NVD、GitHub、CVE.org、ExploitDB 等)
4. **模型层**:8 个 Pydantic 模型,具有完整的验证和 JSON 模式支持
5. **实用层**:具有重试、格式化器、验证器、配置的 HTTP 客户端
6. **工具包层**:漏洞赏金猎人工具包(检查清单、方法论、模板、优先级、范围、自动化)
# my_pkg/source.py
从 pocmap.models 导入 Exploit, ExploitSource
class MySource:
source = "my-source"
def search(self, cve_id: str) -> list[Exploit]:
return [Exploit(source=ExploitSource.OTHER, url="https://…", title="…")]
`pip install` 你的软件包,其结果会自动出现在 `pocmap lookup` 和
`ExploitService.find_exploits` 中。插件是**错误隔离**的:失败的插件会降级
到 `FetchStatus.ERROR`(可通过 `find_exploits_with_status` 查看),而不会影响
内置来源。完整的示例位于
[`examples/example-exploit-source/`](examples/example-exploit-source/) 中。注意:入口点
插件执行您选择的第三方代码 — pocmap 只会调用它们的 `search()`
并聚合结果,同时隔离每个来源的状态。
### 开发设置
```bash
git clone https://github.com/zebbern/pocmap.git
cd pocmap
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
# 运行测试
pytest -v
# 运行类型检查器
mypy src/pocmap
# 运行代码检查工具
ruff check src/pocmap
```
## 许可证
MIT 许可证 - 详情请参见 [LICENSE](LICENSE) 文件。
---
*PocMap 不是武器。它是供安全专业人员和漏洞悬赏猎人使用的研究和防御工具。请始终在适用法律和项目范围的界限内操作。*
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器