moblank9/vulnscanner
GitHub: moblank9/vulnscanner
一款模块化异步漏洞扫描器,通过八阶段分析流水线自动完成端口扫描、服务指纹、SSL 检查、目录枚举和 CVE 匹配,并生成带风险评分的 HTML 报告。
Stars: 0 | Forks: 0
# VulnScanner — 自动化漏洞扫描器
## 概述
VulnScanner 是一个模块化、异步的漏洞扫描器,其功能远
超简单的端口扫描。它执行八个分析阶段,并生成一份包含发现的问题、严重程度评级和修复建议的
详尽 HTML 报告。
### 功能
| 功能 | 描述 |
|---|---|
| **异步端口扫描器** | 具有可配置并发性的快速 TCP 连接扫描 |
| **Banner 抓取** | 从开放端口获取服务 banner,包括 SSL 包装的服务 |
| **服务指纹识别** | 根据 banner 模式识别确切的服务名称和版本 |
| **SSL/TLS 证书检查** | 验证证书(过期、自签名、SAN),检测弱协议 |
| **HTTP 安全头审计** | 检查缺失的安全头(HSTS、CSP、X-Frame-Options 等) |
| **目录枚举** | 发现隐藏路径、管理面板、配置文件和敏感资源 |
| **CVE 匹配** | 将发现的服务/版本与知名 CVE 的本地数据库进行匹配 |
| **风险评分** | 将所有发现的问题汇总为 0–10 的加权风险评分,并附带严重程度标签 |
| **HTML 报告** | 独立暗色模式报告,支持可折叠的发现项、过滤器和修复建议 |
## 架构
```
vulnscanner/
├── README.md
├── pyproject.toml
├── requirements.txt
└── vulnscanner/
├── __init__.py # Package metadata + version
├── __main__.py # python -m entry point
├── cli.py # CLI argument parsing + orchestration (9 phases)
├── utils.py # DNS resolution, URL normalization, progress bar
├── scanner/
│ ├── port_scanner.py # Async TCP connect scanner
│ ├── banner_grabber.py # Service banner retrieval
│ ├── service_fingerprinter.py # Regex-based service/version identification
│ ├── ssl_checker.py # Certificate & protocol checks
│ ├── http_headers.py # HTTP security header audit
│ └── directory_enum.py # Path discovery via wordlist
├── cve/
│ └── matcher.py # CVE database loader + matcher engine
├── risk/
│ └── scorer.py # Risk aggregation and severity computation
├── report/
│ └── generator.py # HTML report builder (dark theme, collapsible UI)
└── data/
└── cve_db.json # Local CVE database (27 entries)
```
### 扫描流水线
```
1. Port Scan ──► 2. Banner Grab ──► 3. Fingerprint ──► 4. SSL Check
│ │
▼ ▼
5. HTTP Headers ──► 6. Dir Enum ──► 7. CVE Match ──► 8. Risk Score
│
▼
9. HTML Report
```
所有受限于 I/O 的阶段都使用 `asyncio` 进行并行执行,
并发限制可配置。
## 安装
### 前置条件
- Python 3.10+
- pip
### 从源码安装
```
git clone https://github.com/example/vulnscanner.git
cd vulnscanner
pip install -e .
```
### 使用 pip 安装
```
pip install vulnscanner
```
### 依赖项
- `aiohttp` — 用于 header 检查和目录枚举的异步 HTTP 客户端
- `cryptography` — X.509 证书解析
安装命令:
```
pip install -r requirements.txt
```
## 用法
```
# 基本扫描 — 端口范围 1–1024,启用所有检查
vulnscanner scanme.example.com
# 扫描特定端口
vulnscanner 192.168.1.1 -p 22,80,443,8080
# 扫描端口范围并自定义输出
vulnscanner target.example.com --port-range 1-10000 -o report.html
# 快速扫描(跳过耗时的检查)
vulnscanner https://example.com --no-ssl --no-dir-enum --no-cve -q
# 用于 directory enumeration 的自定义 wordlist
vulnscanner https://example.com --dir-wordlist ./my_wordlist.txt
```
### 所有选项
| 参数 | 默认值 | 描述 |
|---|---|---|
| `target` | — | 要扫描的主机名、IP 或 URL |
| `-p`, `--ports` | — | 逗号或范围分隔的端口(例如 `22,80,443` 或 `1-65535`) |
| `--port-range` | `1-1024` | 未指定 `-p` 时的端口范围 |
| `--timeout` | `3.0` | 连接超时时间(以秒为单位) |
| `--concurrency` | `200` | 最大并发端口连接数 |
| `-o`, `--output` | 自动 | 输出 HTML 报告路径 |
| `--no-ssl` | — | 跳过 SSL/TLS 证书检查 |
| `--no-http-headers` | — | 跳过 HTTP 安全头分析 |
| `--no-dir-enum` | — | 跳过目录枚举 |
| `--no-cve` | — | 跳过 CVE 匹配 |
| `--no-banner` | — | 跳过 banner 抓取 |
| `--dir-wordlist` | — | 自定义字典文件(每行一个路径) |
| `-q`, `--quiet` | — | 最小化控制台输出 |
| `--version` | — | 显示版本号并退出 |
## 报告
生成的 HTML 报告是自包含的(无外部资源),包括:
- **摘要卡片** — 风险评分、开放端口数、按严重程度分类的发现计数
- **风险计** — 可视化 0–10 评分条
- **开放端口表** — 端口、服务、banner、版本
- **可过滤的发现项** — 所有发现项分组并支持按严重程度过滤
- **CVE 详情** — 匹配的 CVE 及其 CVSS 分数和修复建议
- **SSL 证书** — 完整的证书详情、过期时间、弱协议
- **HTTP header** — 对每个安全头进行检查/取消检查
- **发现的路径** — 枚举的目录和文件
- **服务指纹** — 识别出的服务及其置信度
- **免责声明** — 内嵌的法律声明
### 报告预览
```
┌────────────────────────────────────────────┐
│ Vulnerability Scan Report │
│ Target: scanme.example.com (1.2.3.4) │
│ Scan Date: 2026-07-07 12:34:56 │
├────────────────────────────────────────────┤
│ Risk Score Open Ports Critical │
│ 6.8 / 10 7 2 │
│ MEDIUM │
├────────────────────────────────────────────┤
│ [████████████████░░░░░░░░░░] 68% │
├────────────────────────────────────────────┤
│ Findings: [All] [Critical] [High] ... │
│ │
│ ⚠ HIGH CVE-2024-6387 (openssh) │
│ ⚠ MED Missing HSTS Header │
│ ⚠ HIGH Port 445 (SMB) open │
│ ℹ INFO Path /robots.txt (200) │
└────────────────────────────────────────────┘
```
## CVE 数据库
内置数据库(`data/cve_db.json`)包含 27 个常见服务的知名 CVE:
SSH、Apache、Nginx、IIS、MySQL、PostgreSQL、Redis、MongoDB、
OpenSSL、Tomcat、JBoss 等。
更新数据库的方法:
1. 直接编辑 `vulnscanner/data/cve_db.json`
2. 或使用 NVD API(计划中的功能)获取最新的 CVE
CVE 匹配同时使用识别出的服务名称和版本字符串。
匹配器使用灵活的正则表达式模式提取版本号。
## 风险评分方法
发现的问题按以下类别及其权重进行评分:
| 严重程度 | 权重 | 示例 |
|---|---|---|
| **严重** | 10.0 | RCE 漏洞、暴露的 .git/config |
| **高** | 7.5 | SSL 过期、缺失 HSTS/CSP、SMB 开放 |
| **中** | 5.0 | 自签名证书、目录列表、信息泄露 |
| **低** | 2.5 | 缺失低风险 header、重定向路径 |
| **信息** | 0.5 | 需认证的 endpoint、信息性项目 |
**总体风险评分**(0–10)是所有发现项权重的平均值,最高为 10。最终的严重程度标签映射如下:
| 分数范围 | 标签 |
|---|---|
| 7.5 – 10.0 | 严重 |
| 5.0 – 7.4 | 高 |
| 2.5 – 4.9 | 中 |
| 0.1 – 2.4 | 低 |
| 0.0 | 无 |
## 局限性
1. **端口扫描**:仅支持 TCP 连接扫描(无 SYN 隐秘扫描)。容易被 IDS/IPS
检测到。
2. **CVE 数据库**:本地、静态,且仅限于约 30 条数据。不会
实时查询 NVD API。
3. **指纹识别**:基于正则表达式的 banner 匹配很脆弱。经过混淆的
或自定义 banner 可能无法被识别。
4. **SSL 检查**:使用 `ssl.CERT_NONE` — 不会针对受信任的 CA 验证
证书链。
5. **目录枚举**:基于字典(无递归爬取)。可能会
遗漏深层嵌套路径。
6. **无身份验证测试**:不尝试登录、会话测试或
授权检查。
7. **误报**:端口过滤可能会产生错误的“filtered”结果。
基于 banner 的版本检测可能不准确。
8. **速度与准确性**:较高的并发性可能会导致在
受限速的目标上遗漏端口。
9. **仅限 IPv4**:不支持 IPv6。
10. **无后渗透**:这仅是一个侦察工具。
## 法律与道德使用规范
本工具专为以下用途设计:
- 获得书面授权的**渗透测试**
- **CTF 竞赛**和漏洞赏金计划
- 在您自己的基础设施上进行**本地安全研究**
**严禁**在以下情况之外将 VulnScanner 用于任何系统:
- 您是系统所有者,或者
- 您拥有系统所有者的明确书面授权
违规者可能面临刑事起诉。如有疑问,**请勿扫描**。
## 开发
```
# 以 development mode 安装
pip install -e .
# 从 source 运行
python -m vulnscanner scanme.example.com
# Linting
pip install ruff
ruff check vulnscanner/
# Type checking
pip install mypy
mypy vulnscanner/
```
## 许可证
MIT 许可证。有关详细信息,请参阅 `LICENSE`。
*VulnScanner 是一个演示项目,仅供教育和授权的安全测试目的使用。*
标签:CVE匹配, Python, Scrypt密钥派生, SSL/TLS审计, 加密, 异步扫描, 插件系统, 数据统计, 无后门, 服务指纹识别, 漏洞扫描器, 端口扫描, 计算机取证, 逆向工具