Skip to content

Latest commit

 

History

History
293 lines (217 loc) · 7.86 KB

File metadata and controls

293 lines (217 loc) · 7.86 KB

tchkiller 漏洞知识库 (vulndb) 维护手册

架构概述

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://原始漏洞报告/

Frontmatter 字段说明

字段 必填 类型 说明
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/        ← 大华

操作指南

添加新漏洞

  1. 确定分类和产品目录:
# 示例:添加一个 WebLogic 漏洞
mkdir -p vulndb/middleware/weblogic
  1. 创建 Markdown 文件(从模板复制):
cp VULNDB_TEMPLATE vulndb/middleware/weblogic/CVE-2019-2725.md
# 编辑填入漏洞详情
  1. 重建搜索索引:
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()
"

MCP 工具使用

渗透 agent 在运行过程中会自动通过以下 2 个 MCP 工具访问知识库:

search_vulndb

搜索漏洞知识库,支持关键词、产品名、严重性过滤。

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 等已知产品时,自动搜索知识库获取利用方法。

read_vuln

读取指定漏洞的完整利用详情(payload、步骤、验证方法)。

read_vuln(id="Shiro-550")
read_vuln(id="CVE-2021-44228")
read_vuln(id="CNVD-2019-34895")

索引重建:手动添加漏洞文件后,运行 python3 vulndb_index.py 重建索引。


索引技术细节

SQLite FTS5

  • 使用 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 在万级数据量下仍然高效

扩展计划

优先补充的漏洞类别

  1. 国产 OA/ERP:泛微 OA、蓝凌 OA、金蝶 ERP
  2. Java 中间件:WebLogic、JBoss、Struts2
  3. CMS:WordPress 高危插件漏洞、Drupal
  4. 网络设备:海康威视、大华、Fortinet、Pulse Secure
  5. Windows 服务:EternalBlue、PrintNightmare、ZeroLogon

自动化采集(未来)

  • 从 NVD/CNVD API 批量拉取 CVE 元数据
  • 从 ExploitDB/GitHub PoC 仓库自动提取利用代码
  • 定期更新索引