Kartik0219/vuln-scanner
GitHub: Kartik0219/vuln-scanner
一款命令行漏洞扫描工具,解析 Nmap 服务版本数据并与精选 CVE 目录交叉比对,生成包含修复建议的多格式报告。
Stars: 0 | Forks: 0
# 漏洞扫描与报告工具
一款命令行工具,用于扫描实验室网络(或分析已保存的 Nmap XML 报告),将结果存储在 SQLite 中以便进行历史比对,将发现的服务版本与精选的 CVE 目录进行交叉比对,并生成包含严重性图表和修复建议的控制台、CSV 以及自包含的 HTML 报告。
```
$ python -m vuln_scanner.cli --xml scan.xml
Severity | Host | Port | Service | Product/Version | CVE | Description
---------+-----------+---------+--------------+---------------------+----------------+------------------------------------------------------------------------------------
CRITICAL | 10.0.0.30 | 445/tcp | microsoft-ds | Microsoft-DS 6.1 | CVE-2017-0144 | The SMBv1 server ("EternalBlue") mishandles crafted packets, allowing RCE as SYSTEM.
CRITICAL | 10.0.0.31 | 80/tcp | http | Apache httpd 2.4.49 | CVE-2021-41773 | Path-traversal flaw allows mapping URLs outside the document root; RCE if CGI enabled.
MEDIUM | 10.0.0.31 | 22/tcp | ssh | OpenSSH 7.2p2 | CVE-2016-6515 | Allows remote DoS via a long password string (CPU exhaustion during bcrypt hashing).
3 finding(s) - 2 critical, 0 high, 1 medium, 0 low
```
## 检测内容
该工具附带了一个精心整理的目录,包含众所周知的、教科书级别的漏洞——这类漏洞通常出现在 CTF 实验室镜像和故意设计的脆弱虚拟机(Metasploitable 2、VulnHub)中——因此扫描结果既真实可靠又有完善的文档支持:
| CVE | 服务 | 严重性 | 重要性说明 |
|---|---|---|---|
| CVE-2011-2523 | vsftpd 2.3.4 | 严重 | 植入后门的版本在触发特定用户名时会开启 root shell |
| CVE-2010-4221 | ProFTPD 1.3.3c | 严重 | 植入后门的源码压缩包可授予远程 root 权限 |
| CVE-2017-0144 | SMBv1 / Windows 6.1 | 严重 | EternalBlue — 曾被 WannaCry 和 NotPetya 用于横向移动 |
| CVE-2021-41773 | Apache 2.4.49 | 严重 | 通过 CGI 进行路径遍历 / RCE;CVSS 9.8 |
| CVE-2007-2447 | Samba 3.0.20 | 严重 | 通过 username map script 实现远程代码执行 |
| CVE-2010-2075 | UnrealIRCd 3.2.8.1 | 严重 | 植入后门的分发包 |
| CVE-2014-0160 | Apache 2.4.7 (OpenSSL) | 高危 | Heartbleed — 每次请求可读取最多 64KB 的进程内存 |
| CVE-2016-6515 | OpenSSH 7.2p2 | 中危 | 长密码通过耗尽 bcrypt CPU 导致 DoS |
每项发现都包含一个严重性评级和具体的修复步骤,以便您验证*为什么*某些内容会被标记,并知道需要修复什么。
### CVSS 评分与 MITRE ATT&CK
每项发现还包含其 **CVSS v3.1 基础分数**(含向量)、指向 **NVD** 条目的链接,以及该漏洞引发的 **MITRE ATT&CK** 技术——这些信息会显示在控制台和 CSV 中,并在 HTML 报告中以分数列和可点击的徽章/链接形式展示:
| CVE | CVSS | ATT&CK 技术 |
|---|---|---|
| CVE-2017-0144 (EternalBlue) | 8.1 | [T1210 — 远程服务利用](https://attack.mitre.org/techniques/T1210/) |
| CVE-2021-41773 (Apache RCE) | 9.8 | [T1190 — 利用面向公网的应用程序](https://attack.mitre.org/techniques/T1190/) |
| CVE-2016-6515 (OpenSSH DoS) | 7.5 | [T1499 — 端点拒绝服务](https://attack.mitre.org/techniques/T1499/) |
## 安装
```
git clone
cd vuln-scanner
python -m venv venv
# Windows: venv\Scripts\activate | macOS/Linux: source venv/bin/activate
pip install -r requirements.txt
```
需要 Python 3.10+ 和 [matplotlib](https://matplotlib.org/)
(通过 `requirements.txt` 安装)。其他所有功能——XML 解析、
SQLite 存储、CVE 匹配——仅使用标准库。
Nmap **仅**在进行实时 `--target` 扫描时需要;分析已保存的
`--xml` 报告时无需安装。
## 用法
```
# 分析已保存的 Nmap XML 报告
python -m vuln_scanner.cli --xml scan.xml
# 运行实时扫描(要求 PATH 上存在 nmap 并具有明确授权)
python -m vuln_scanner.cli --target 192.168.1.100 --i-have-authorization
# 将扫描限制在指定 port 范围内
python -m vuln_scanner.cli --target 192.168.1.100 --i-have-authorization --ports 1-1024
# 将扫描历史记录持久化到 SQLite 文件
python -m vuln_scanner.cli --xml scan.xml --db scans.sqlite3
# 导出机器可读/可共享的报告
python -m vuln_scanner.cli --xml scan.xml --csv findings.csv --html report.html
# 隐藏 console table(配合 --csv/--html 使用时很方便)
python -m vuln_scanner.cli --xml scan.xml -q --html report.html
```
运行 `python -m vuln_scanner.cli --help` 获取完整的选项列表。
如果产生了任何扫描发现,进程将以状态码 `1` 退出;如果
没有匹配项,则以 `0` 退出——这非常便于编写脚本/进行 CI 检查。
## 构建方式
```
vuln_scanner/
├── models.py # Service, Host, CVERecord, Vulnerability dataclasses
├── cve_data.py # Static curated catalog of known-vulnerable versions
├── parser.py # Parses Nmap -oX XML into Host/Service records
├── matcher.py # Cross-references services against cve_data -> Vulnerability findings
├── db.py # SQLite schema + scan/host/service storage (tracks history over time)
├── engine.py # Orchestrates: parse -> store -> match
├── report.py # Console table, CSV, and self-contained HTML+chart renderers
└── cli.py # argparse front-end with authorization gate for live scans
```
XML 解析和 CVE 匹配与扫描调用
代码解耦,因此整个分析路径可以通过 XML 固定测试数据进行测试,而
无需实时网络或 root/管理员权限。
## 测试
测试套件使用了小型的、确定性的**合成** Nmap XML 固定测试数据
(`tests/fixtures/generate.py`)——每个数据针对一个场景(干净的
主机、单个已知包含漏洞的服务、混合的多主机网络)。这
反映了为此作品集中其他工具构建合成 PCAP 或日志 CSV 的方法,
使测试保持快速、离线,并且
不依赖特定环境的扫描输出。
```
pip install -r requirements-dev.txt
pytest
```
在更改检测逻辑后重新生成固定测试数据:
```
python tests/fixtures/generate.py
```
`samples/README.md` 列出了故意设计为脆弱的
实验室镜像(Metasploitable 2、VulnHub)的公开来源,用于针对真实
目标进行手动演示,以及用于生成适合
`--xml` 参数的 XML 的确切 Nmap 命令。
## 设计说明与局限性
- **精确版本匹配。** CVE 目录根据 Nmap 的服务指纹识别 (`-sV`)
报告的内容,使用精确的产品/版本
字符串进行匹配。这使得误报率接近于零,但也意味着宣告为
已修补版本(例如自定义构建版本)的服务将不会被标记。
生产级别的工具会添加版本范围比较(例如“< 7.3”)
以对接实时的 NVD/CVE 数据源。
- **精选目录,而非实时数据源。** 内置目录涵盖了
实验室环境中发现的教科书级漏洞;它不包含
项目编写之后发布的 CVE。接入
NVD API 仅需将 `cve_data.CATALOG` 替换为真实的数据
源即可——匹配器、引擎和报告都不需要更改。
- **默认扫描一次并在内存中处理。** 如果没有 `--db`,结果将
存储在内存中的 SQLite 数据库中,并在退出时丢弃。传入
`--db path/to/scans.sqlite3` 可持久化历史记录,并跟踪您的
网络暴露面如何随时间变化。
## 伦理使用
仅扫描您拥有或获得明确书面测试许可的系统。
在没有 `--i-have-authorization` 的情况下使用 `--target` 参数会受到设计上的拦截,并会引发错误,说明相关的法律背景(美国 CFAA,英国
计算机滥用法)。`--xml` 路径接受任何 Nmap 报告——如果
您已经有报告,该工具会直接对其进行分析,而无需重新扫描。
`samples/README.md` 列出了专为
此类练习构建的安全、合法的脆弱实验室镜像来源。
标签:Claude, CTI, CVE检测, Nmap, Python, SQLite, XXE攻击, 插件系统, 无后门, 虚拟驱动器, 逆向工具