# cnvd-skill
**CNVD 通用型未授权漏洞广扫 · 便携工具包**
冷门产品线 × 预置端点字典 × 批量只读验证 —— 命中 ≥10 即一个洞
[](LICENSE)
[](https://www.python.org/)
[](#环境要求)
[](#环境要求)
[English](README_EN.md) · [使用教程](docs/使用教程.md) · [规则编写指南](docs/规则编写指南.md) · [FAQ](docs/FAQ.md) · [更新日志](CHANGELOG.md)
---
## 这是什么
一套面向 **CNVD 通用型未授权漏洞** 的批量挖掘工作流工具包:
- **Skill 本体**(`skills/cnvd/SKILL.md`)——完整流程 / 原则 / 判据 / 合规红线,不用 Claude Code 也能当操作手册人肉照着走
- **9 个 Python 脚本**——纯标准库、零 pip 依赖,覆盖 **测绘 → 定级检测 → 查重抽验** 全链路
- **8 文件 28 条端点字典**——来自实战验证的未授权端点,跨厂商可迁移(本包核心资产)
- **脱敏示例 + 一键自检**——`示例产出/` 展示全部中间产物格式,`校验.bat` 双击完成环境自检与冒烟
核心思路:**不做固件级深挖,做端点级的横向覆盖**。挑一个冷门产品线,用预置字典批量验证同类设备,命中 ≥10 台即够一个 CNVD 通用型漏洞的案例量。
**运行语义(2.3)**:**无产出不停** —— 唯一合法停机条件 = 已挖到 ≥1 个可提交级洞并落盘(命中 ≥10 + 查重无重复 + 复验通过 + 厂商资质达标 + 报告完成)。在此之前,换线 ≠ 收工:没出货就换下一条产品线,多条线重复就继续换,直到出货或用户喊停。合规红线在连续作业下执行强度不变。
**厂商资质门槛(2.3)**:CNVD 发证硬门槛 = 通用型 + 厂商**注册资本实缴 > 5000 万人民币** + 优先国内。甜点区 = **注册资本过线但知名度低的中型/小厂**——大厂是重复重灾区(白干),小厂不够发证资格。准备阶段须核验厂商工商信息(§1.1a),报告须含「厂商信息」段。
**复现规范(2.3 · 反虚构铁律)**:复现步骤以最简单形式呈现——**优先 curl / 浏览器直接访问**;curl 无法表达时(特殊头部/POST/WebSocket)贴**真实数据包**。**禁止任何虚构**:所有请求/响应必须是实操原文,所有复现方式必须亲自跑过且能复现,没跑过的步骤不写进报告(详见 SKILL.md §1.4a)。
## 工作流
```
准备(10min) → 测绘(recon) → 批量验证(check) → 查重+抽验(agent) → 报告 → 下一条线
```
| 阶段 | 工具 | 产出 |
|------|------|------|
| 0 测绘 | `cnvd_recon.py` | 目标存量 CSV(FOFA 多通道拉取) |
| 1 验证 | `cnvd_check.py` | `findings.csv`(三重防误报) |
| 1.5 查重+抽验 | `verify_*.py` + 派发模板 | `verify_report.json` |
| 2 报告 | SKILL.md §1.4 流程 | 提交版 + 复现版报告 + 全量案例 IP |
## 特性
- **三类协议只读探针**:HTTP(GET/POST 双差分)、RTSP(严格 SDP 判据)、FTP(匿名 230 探测)
- **双差分防误报**:HTTP 命中后自动二次无 cookie 请求,结果不可复现即丢弃
- **蜜罐排除**:内置 ip-api 归属查询,云厂商段自动标 `cloud_suspect` 供人工复核
- **严格 RTSP 判据**:必须 `DESCRIBE 200` 且 SDP 含 `v=0` + `m=video/audio`;OPTIONS-only 一律丢弃(实战返工教训固化)
- **FOFA 多通道**:支持任意数量通道(官方格式 / 中转格式均可),失败自动切下一个
- **断点续跑**:`--resume` 跳过已完成目标,中断不丢进度
- **合规内置**:单 IP 严格串行 + 间隔 ≥1s(代码级固化),全链路只读
- **零依赖**:只需 Python 3.8+,不装任何第三方包
## 目录结构
```
cnvd-skill/
├── README.md ← 本文件(仓库首页)
├── README-移植说明.md ← 便携包移植说明(换机部署看这篇)
├── README_EN.md ← English overview
├── CHANGELOG.md ← 版本记录
├── LICENSE ← MIT
├── 校验.bat ← 双击运行:环境自检 + 冒烟测试
├── api_keys.json ← FOFA 通道 key 模板(占位符,用前必须填自己的 key)
├── skills/
│ └── cnvd/SKILL.md ← Skill 本体(流程 / 原则 / 判据 / 合规红线)
├── tools/
│ ├── scripts/ ← 9 个 Python 脚本(纯标准库,零 pip 依赖)
│ │ ├── cnvd_recon.py ← 阶段0 测绘:FOFA 多通道拉存量
│ │ ├── cnvd_check.py ← 阶段1 验证:HTTP/RTSP/FTP 三类探针 + 双差分判据
│ │ ├── verify_newfe_A.py ← 新前端线A(密码找回链)抽验
│ │ ├── verify_newfe_B.py ← 新前端线B(泄露面)抽验
│ │ ├── probe_newfe_A_bodies.py ← 结构探查:重取原始 body 头部
│ │ ├── verify_rtsp2.py ← RTSP 批量补验(OPTIONS+DESCRIBE)
│ │ ├── rtsp_probe.py ← RTSP 单点探测(命令行直用)
│ │ ├── rtsp_live_verify.py ← RTSP 真拉流四步确认(DESCRIBE→SETUP→PLAY→RTP)
│ │ └── bing_search.py ← Bing 检索(厂商查重辅助)
│ └── rules/ ← 端点字典库(8 文件 28 条规则,核心资产)
│ ├── rules_boa.json ← NVR(Boa 固件线)
│ ├── rules_newfe.json ← 新前端 NVR/IPC
│ ├── rules_access_menjin.json ← 门禁(门禁专家)
│ ├── rules_access_drid.json ← 门禁(Dr.ID)
│ ├── rules_access_secom.json ← 门禁(SECOM)
│ ├── rules_ews_printer.json ← EWS 打印机
│ ├── rules_superpw_only.json ← 超级密码单点(拆出复跑用)
│ └── rules_generic.json ← 通用起步模板(新线用)
├── docs/
│ ├── 使用教程.md ← 从零跑通一条产品线
│ ├── 规则编写指南.md ← 自定义端点字典的方法
│ └── FAQ.md ← 常见问题
└── 示例产出/ ← 格式样例(已脱敏,RFC 5737 保留段)
├── progress.md ← 状态机写法样例
├── intel.md ← 情报台账写法样例
├── verify_prompt_template.md ← 抽验 agent 派发模板
├── targets_样例-脱敏.csv ← check 的输入格式(ip,port 两列)
├── findings_样例-脱敏.csv ← check 的输出格式
└── 全部案例IP-格式说明.txt ← 报告附件格式说明
```
## 快速开始
### 环境要求
- **Python 3.8+**(推荐 3.12)——唯一硬性依赖,脚本零第三方包
- Windows / Linux / macOS 均可(`校验.bat` 仅 Windows)
### 三步跑起来
**第 1 步:装 Python**(已有可跳过)
到 https://python.org 下载安装,装时勾选 "Add python.exe to PATH"。验证:命令行敲 `python --version` 有输出即成功。
**第 2 步:填自己的 FOFA key(必做)**
包内 `api_keys.json` 是**占位模板**(所有 key 都是 `REPLACE_ME`)。编辑 `channels` 数组配置你的查询通道:
```json
{
"channels": [
{
"name": "primary",
"enabled": true,
"base_url": "https://你的中转站地址",
"search_path": "/api/v1/search/all",
"key_param": "key",
"query_param": "qbase64",
"key": "你的key"
}
]
}
```
- `query_param`:官方格式用 `qbase64`(查询语句 base64 编码),中转明文格式用 `query`
- `key_param`:一般是 `key`,个别站是 `api_key`
- 不同中转站格式不一样,对照你的站文档配置;配错会 404 或返回空
- 支持任意数量通道:自动按顺序尝试,失败切下一个。加备用站复制一项改 `name` / `base_url` 即可
> 不想先配 key?`--help`、字典(rules)、check 扫描都不需要 key,只有 recon 拉资产需要。
**第 3 步:自检**
双击 `校验.bat`。全 ✅ 即可开工。会检查:① Python 可用 ② 各脚本能跑 ③ key 读得到 ④ FOFA 通道实测发一条小查询。
### 最短命令
```bat
cd tools\scripts
:: 1) 测绘:拉某类产品线存量(preset 可选 nvr/printer/industrial/network/access/nas/conference)
python cnvd_recon.py --preset nvr --out stage0_nvr.csv
:: 2) 整理 targets.csv(表头 ip,port 两列)后批量验证
python cnvd_check.py --targets targets.csv --rules ..\rules\rules_boa.json --geo --out findings.csv
:: 3) 命中 ≥10 → 按 SKILL.md §1.3 派 agent 查重 + 抽验
```
> ⚠️ **输入格式别搞反**:`cnvd_check.py --targets` 要的是 targets 格式(**只有 `ip,port` 两列**);`findings_样例-脱敏.csv` 是 check 的**输出**格式,四列版(`ip,port,rule_id,url`)才是给抽验脚本的输入。
## 脚本速查
| 脚本 | 用途 | 常用参数 |
|------|------|----------|
| `cnvd_recon.py` | 测绘:FOFA 多通道拉存量 | `--preset nvr` / `--query '...'` / `--out` / `--list-presets` / `--list-channels` |
| `cnvd_check.py` | 批量验证:HTTP/RTSP/FTP | `--targets` `--rules` `--geo` `--resume` `--out` |
| `verify_newfe_A.py` | 新前端线A(密码找回链)独立抽验 | `--csv` `--out` |
| `verify_newfe_B.py` | 新前端线B(泄露面)独立抽验 | `--csv` `--out` |
| `verify_rtsp2.py` | RTSP 批量补验(OPTIONS+DESCRIBE) | `--csv` `--out` |
| `probe_newfe_A_bodies.py` | 结构探查:重取原始 body 头部 | `--csv` `--out` |
| `rtsp_probe.py` | RTSP 单点探测 | `python rtsp_probe.py : ...` |
| `rtsp_live_verify.py` | RTSP 真拉流四步确认 | `python rtsp_live_verify.py : ...` |
| `bing_search.py` | Bing 检索(厂商查重辅助) | 直接运行,内置预设查询集 |
各脚本完整参数:`python cnvd_xxx.py --help`。
> 速度参考:**单 IP 串行 ≥1s 是合规红线**(代码已固化);100 台未响应资产约需 10-15 分钟,属正常。
## 端点字典(核心资产)
| 文件 | 产品线 | 端点 | 来源 |
|------|--------|------|------|
| `rules_boa.json` | NVR/HVR(Boa 固件) | Config.json(UID) / ONVIF / RTSP / FTP 匿名 | 中维 ZWP2P 实战 |
| `rules_newfe.json` | 新前端 NVR/IPC | Config.json(UID) / 超级密码兑换码 / 找回接口 / RTSP / ONVIF | 新前端线(p6scloud 系) |
| `rules_access_menjin.json` | 门禁(门禁专家) | 固件指纹 / 登录页预填默认账密 | 门禁线实战 |
| `rules_access_drid.json` | 门禁(Dr.ID) | IIS 栈指纹 / o_*.aspx 未授权候选 | 门禁线实战 |
| `rules_access_secom.json` | 门禁(SECOM) | Tomcat 栈指纹 / Tomcat 管理器暴露 | 门禁线实战 |
| `rules_ews_printer.json` | EWS 打印机 | VNC 面板 / 账户管理 / 备份密码 / 固件升级 / 配置导出 | Lexmark EWS 实战(可迁移同类架构) |
| `rules_superpw_only.json` | 超级密码单点 | 兑换码未授权泄露 | 新前端线拆出 |
| `rules_generic.json` | 通用模板 | 配置导出 / backup / 路径穿越 / API 敏感字段 / RTSP | 新线起步模板 |
编写自定义规则 → [规则编写指南](docs/规则编写指南.md)。
## 合规红线(务必遵守)
```
只做:只读 GET/OPTIONS/DESCRIBE/LIST | 单 IP 间隔 ≥1s | 完整操作日志 | 仅用于 CNVD 提交
禁止:改配置/删数据 | 下载敏感文件 | 暴力破解/横向 | 提交前公开细节 | 无授权扫政府/军事/关基
```
- 本工具**只做未授权访问验证**(证明"能读到什么"),不提供任何写入 / 利用 / 持久化能力
- 使用前确认你对目标资产**有测试授权**,或目标为公开致谢范围
- 漏洞细节在平台披露前不得公开
## 免责声明
本工具仅供**授权范围内的安全测试**与 **CNVD 等平台的正规漏洞提交**使用。使用者应确保其行为符合《网络安全法》等相关法律法规,并自行承担因不当使用产生的一切责任。作者不对任何滥用行为负责。
## 文档索引
| 文档 | 内容 |
|------|------|
| [README-移植说明.md](README-移植说明.md) | 便携包移植三步曲(换机部署必读) |
| [docs/使用教程.md](docs/使用教程.md) | 从零跑通一条产品线:测绘→验证→抽验→报告全流程实录 |
| [docs/规则编写指南.md](docs/规则编写指南.md) | 端点字典 JSON 结构与判据设计方法 |
| [docs/FAQ.md](docs/FAQ.md) | 常见问题与排坑 |
| [CHANGELOG.md](CHANGELOG.md) | 版本记录 |
---
*本包示例数据已脱敏(RFC 5737 保留段),不含任何真实目标资产与个人信息;FOFA key 为占位模板,需使用者在本地自行填写。*