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审计, 加密, 异步扫描, 插件系统, 数据统计, 无后门, 服务指纹识别, 漏洞扫描器, 端口扫描, 计算机取证, 逆向工具