vulndb/ ← Markdown 漏洞条目(人类可读、可编辑)
├── middleware/ ← 中间件类漏洞
│ ├── shiro/
│ │ ├── Shiro-550.md
│ │ └── CVE-2020-1957.md
│ ├── fastjson/
│ ├── log4j/
│ └── tomcat/
├── web/ ← Web 应用类漏洞
│ ├── tongda-oa/
│ ├── zhiyuan-oa/
│ ├── thinkphp/
│ └── spring/
└── network/ ← 网络协议类漏洞
vulndb_index.py ← 索引构建器(Markdown → SQLite FTS5)
mcp_server.py ← MCP 工具服务器(含 search_vulndb / read_vuln)
vulndb.sqlite ← 自动生成的搜索索引(不要手动编辑)
- Markdown 为主:所有漏洞内容以 Markdown 文件存储,YAML frontmatter 记录元数据
- SQLite FTS5 索引:自动从 Markdown 构建全文搜索索引,支持中文搜索
- MCP 工具对接:渗透 agent 通过
search_vulndb/read_vuln工具查询知识库 - 零依赖降级:即使没有 SQLite,也能通过文件遍历搜索(性能较低但功能完整)
每个漏洞是一个 .md 文件,存放在 vulndb/{分类}/{产品}/ 目录下。
| 类型 | 命名格式 | 示例 |
|---|---|---|
| 有 CVE 编号 | CVE-YYYY-NNNNN.md |
CVE-2021-44228.md |
| 有 CNVD 编号 | CNVD-YYYY-NNNNN.md |
CNVD-2019-34895.md |
| 有通用名 | {名称}.md |
Shiro-550.md |
| 多个漏洞同产品 | 每个漏洞一个文件 | shiro/Shiro-550.md, shiro/CVE-2020-1957.md |
---
id: CVE-YYYY-NNNNN
title: 产品名 漏洞简要描述
product: product-name
vendor: VendorName
version_affected: "受影响版本范围"
severity: CRITICAL
tags: [rce, deserialization, 无需认证]
fingerprint: ["指纹1", "指纹2"]
---
## 漏洞描述
简要说明漏洞原理、成因、影响。2-3 句话即可。
## 影响版本
- 具体受影响的版本号列表
## 前置条件
- 利用此漏洞需要满足的前提条件
## 利用步骤
1. 步骤一:侦察/确认
2. 步骤二:构造 payload
3. 步骤三:发送请求
4. 步骤四:验证
## Payload
\```http
# 具体的 HTTP 请求示例
POST /vulnerable-endpoint HTTP/1.1
Host: TARGET
Content-Type: application/json
{"payload": "here"}
\```
\```bash
# 命令行利用示例
curl -X POST http://TARGET/vuln -d '...'
\```
## 验证方法
如何确认漏洞利用成功(响应特征、回显内容、DNS 回连等)。
## 修复建议
- 升级到安全版本
- 临时缓解措施
## 参考链接
- https://cve.mitre.org/...
- https://原始漏洞报告/| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
id |
✅ | string | 漏洞唯一标识(CVE/CNVD/自定义) |
title |
✅ | string | 中文标题,格式:产品名 漏洞描述 |
product |
✅ | string | 产品名(小写,连字符分隔),如 tongda-oa |
vendor |
❌ | string | 厂商名 |
version_affected |
✅ | string | 受影响版本范围 |
severity |
✅ | string | CRITICAL / HIGH / MEDIUM / LOW |
tags |
✅ | list | 标签列表,用于搜索分类 |
fingerprint |
❌ | list | 指纹关键词,agent 可据此自动触发搜索 |
vulndb/
├── middleware/ ← 中间件、框架、库
│ ├── shiro/ ← Apache Shiro
│ ├── fastjson/ ← Alibaba Fastjson
│ ├── log4j/ ← Apache Log4j
│ ├── tomcat/ ← Apache Tomcat
│ ├── weblogic/ ← Oracle WebLogic
│ ├── jboss/ ← JBoss/WildFly
│ └── struts2/ ← Apache Struts2
├── web/ ← Web 应用(OA、CMS、ERP 等)
│ ├── tongda-oa/ ← 通达 OA
│ ├── zhiyuan-oa/ ← 致远 OA
│ ├── yongyou/ ← 用友 NC/U8
│ ├── thinkphp/ ← ThinkPHP
│ ├── spring/ ← Spring 系列
│ ├── wordpress/ ← WordPress
│ └── drupal/ ← Drupal
├── network/ ← 网络协议、设备
│ ├── smb/ ← SMB/Windows
│ ├── ssh/ ← SSH
│ ├── rdp/ ← RDP
│ ├── hikvision/ ← 海康威视
│ └── dahua/ ← 大华
- 确定分类和产品目录:
# 示例:添加一个 WebLogic 漏洞
mkdir -p vulndb/middleware/weblogic- 创建 Markdown 文件(从模板复制):
cp VULNDB_TEMPLATE vulndb/middleware/weblogic/CVE-2019-2725.md
# 编辑填入漏洞详情- 重建搜索索引:
cd /path/to/tchkiller
python3 vulndb_index.py
# 输出: ✅ 索引构建完成: N 条漏洞已索引如果有大量漏洞需要导入,可以编写脚本按模板格式生成 Markdown 文件,然后运行一次索引构建:
# 1. 批量生成 Markdown 文件(自行编写脚本)
python3 batch_import.py --source vulns.csv --output vulndb/
# 2. 一次性重建索引
python3 vulndb_index.py# 检查索引中有多少条漏洞
python3 -c "
import sqlite3
conn = sqlite3.connect('vulndb.sqlite')
c = conn.execute('SELECT COUNT(*) FROM vulns')
print(f'索引中共 {c.fetchone()[0]} 条漏洞')
conn.close()
"# 测试搜索功能
python3 -c "
import sqlite3
conn = sqlite3.connect('vulndb.sqlite')
c = conn.execute('''
SELECT v.id, v.title, v.severity FROM vulns_fts fts
JOIN vulns v ON v.rowid = fts.rowid
WHERE vulns_fts MATCH 'shiro'
''')
for row in c.fetchall():
print(f' {row[2]:8s} | {row[0]:20s} | {row[1]}')
conn.close()
"渗透 agent 在运行过程中会自动通过以下 2 个 MCP 工具访问知识库:
搜索漏洞知识库,支持关键词、产品名、严重性过滤。
search_vulndb(query="shiro 反序列化")
search_vulndb(query="CVE-2021-44228")
search_vulndb(query="OA 文件上传")
search_vulndb(product="tongda-oa")
search_vulndb(query="rce", severity="CRITICAL")
典型触发场景:agent 在侦察阶段发现目标使用 Shiro/Fastjson/通达OA 等已知产品时,自动搜索知识库获取利用方法。
读取指定漏洞的完整利用详情(payload、步骤、验证方法)。
read_vuln(id="Shiro-550")
read_vuln(id="CVE-2021-44228")
read_vuln(id="CNVD-2019-34895")
索引重建:手动添加漏洞文件后,运行
python3 vulndb_index.py重建索引。
- 使用
tokenize='unicode61'分词器,支持中文字符搜索 - 索引字段:
title,product,tags,fingerprint,content(正文) - 搜索优先级:FTS5 全文搜索 → LIKE 降级搜索 → 文件遍历(无 SQLite 时)
- agent 首次调用
search_vulndb时,如果vulndb.sqlite不存在,会自动构建索引 - 也可以手动运行
python3 vulndb_index.py预构建
- 当前 10 条漏洞:索引构建 < 0.1s,搜索 < 1ms
- 预计 1000 条漏洞:索引构建 < 2s,搜索 < 10ms
- FTS5 在万级数据量下仍然高效
- 国产 OA/ERP:泛微 OA、蓝凌 OA、金蝶 ERP
- Java 中间件:WebLogic、JBoss、Struts2
- CMS:WordPress 高危插件漏洞、Drupal
- 网络设备:海康威视、大华、Fortinet、Pulse Secure
- Windows 服务:EternalBlue、PrintNightmare、ZeroLogon
- 从 NVD/CNVD API 批量拉取 CVE 元数据
- 从 ExploitDB/GitHub PoC 仓库自动提取利用代码
- 定期更新索引