MohHammad345/Mini-Nessus-Web

GitHub: MohHammad345/Mini-Nessus-Web

一个轻量级的 Web 漏洞扫描器,提供端口扫描、服务识别、CVSS 评分、异步任务执行和 PDF 报告导出功能。

Stars: 0 | Forks: 0

# Mini-Nessus Web Mini-Nessus Web 是一个轻量级的**基于 Web 的漏洞扫描器**,使用 **Flask**、**SQLite**、**SQLAlchemy**、**Celery** 以及自定义的 Python 扫描引擎构建。 它作为一个实用的网络安全作品集项目而构建,旨在演示: - 网络侦察 - 服务指纹识别 - 基于规则的漏洞检测 - CVSS 风格的风险评分 - 异步扫描执行 - PDF 报告生成 - 简洁的 Web 仪表盘设计 该项目受到了 Nessus 等工具工作流的启发,但刻意保持了架构的简单性、可读性和易于扩展性。 ## 功能特性 - 用于启动和审查扫描的 Web 仪表盘 - 使用 Celery 进行异步后台扫描 - 自定义的多线程 TCP 端口扫描器 - 使用 Banner 和默认端口逻辑进行服务检测 - 支持的服务检测: - SSH - HTTP - FTP - MySQL - PostgreSQL - Redis - Telnet - SMTP - 基于规则的漏洞检查 - 针对选定服务的本地 CVE/版本匹配 - 针对每个发现结果的 CVSS 风格评分 - 扫描级别的风险聚合 - 使用 Paramiko 进行经过身份验证的 SSH 检查 - 快速和完整扫描配置文件 - 使用 ReportLab 生成 PDF 报告 - 严重程度分布和扫描时间线图表 - 通过 SQLAlchemy 实现 SQLite 持久化 - 使用允许的 CIDR 验证的仅限实验室的安全限制 ## 为什么构建此项目 许多学生的安全项目仅仅停留在“扫描端口”这一步。 我希望这个项目能更进一步,表现得像一个真正的产品: 1. 从 Web 应用程序启动扫描 2. 检测暴露的服务 3. 根据实际规则生成发现结果 4. 使用真实的评分对其进行优先级排序 5. 将所有内容存储在数据库中 6. 在可用的仪表盘中展示结果 7. 导出专业的 PDF 报告 这个项目帮助我将**攻防安全概念**与**后端工程**、**风险优先级排序**以及**报告生成**结合在一起。 ## 技术栈 ### 后端 - Flask - Flask-SQLAlchemy - SQLite - Celery - Redis ### 扫描 / 安全逻辑 - 自定义的 Python 端口扫描器 - Banner 抓取和服务指纹识别 - 基于规则的漏洞检查 - CVSS 风格评分 - Paramiko,用于经过身份验证的 SSH 检查 ### 报告生成 / 前端 - ReportLab - Jinja2 模板 - Chart.js - 自定义 CSS ## 项目结构 ``` Mini-nessus-web-main/ ├── .gitignore ├── README.md ├── requirements.txt ├── main.py │ ├── app/ │ ├── .gitignore │ ├── __init__.py │ ├── celery_app.py │ ├── models.py │ ├── routes.py │ └── tasks.py │ ├── scanner/ │ ├── banners.py │ ├── checks.py │ ├── engine.py │ ├── portscan.py │ ├── scoring.py │ └── ssh_checks.py │ ├── reporting/ │ └── pdf.py │ ├── static/ │ └── style.css │ └── templates/ ├── base.html ├── index.html ├── new_scan.html └── scan.html ``` ## 架构 该项目遵循清晰的流程: * **`scanner/portscan.py`** 多线程 TCP 端口发现 * **`scanner/banners.py`** Banner 抓取、服务猜测、版本提取 * **`scanner/checks.py`** 基线暴露规则和本地 CVE/版本匹配 * **`scanner/scoring.py`** CVSS 风格的丰富数据和扫描风险聚合 * **`scanner/ssh_checks.py`** 使用提供的凭据进行经过身份验证的 SSH 检查 * **`scanner/engine.py`** 编排完整的扫描流水线 * **`app/tasks.py`** 使用 Celery 异步运行扫描,存储发现结果,生成 PDF * **`app/routes.py`** 仪表盘,创建扫描,扫描视图,PDF 下载,仪表盘 API * **`reporting/pdf.py`** 构建最终的 PDF 评估报告 这使得扫描逻辑、评分、存储和 UI 职责保持分离,而不是让应用程序变成一团巨大的乱麻。 ## 工作原理 1. 用户从仪表盘启动扫描 2. Flask 在 SQLite 中创建一条 `Scan` 记录 3. Celery 接管后台作业 4. 扫描引擎根据允许的 CIDR 验证目标 5. 端口扫描器识别开放端口 6. Banner 抓取和服务检测识别可能的服务 7. 基于规则的检查生成发现结果 8. CVSS 风格的评分丰富发现结果并计算扫描级别的风险 9. 结果存储在数据库中 10. 生成 PDF 报告 11. 仪表盘显示发现结果和趋势 ## 当前的检测 / 发现逻辑 ### 基线暴露检查 扫描器当前会对危险的暴露服务发出发现警报,例如: * Telnet 暴露 * FTP 暴露 * MySQL 暴露 * PostgreSQL 暴露 * Redis 暴露 * SSH 暴露 * HTTP 暴露 ### 版本 / CVE 匹配 本地 CVE 匹配逻辑目前包括对以下项的选定检查: * OpenSSH * Apache HTTP Server * nginx * vsFTPd * ProFTPD * Redis * MySQL ### 经过身份验证的 SSH 检查 当提供有效的 SSH 凭据时,扫描器可以执行额外的检查,例如: * 密码身份验证已启用 * 允许 root 登录 * X11 转发已启用 * 允许空密码 * 启用了协议 1 * 缺失或薄弱的防火墙配置 * 待处理的安全更新 * 危险的文件系统权限 * root 之外具有 UID 0 的用户 ## 风险评分 该项目最初使用简单的加权严重性方法,后来升级为 **CVSS 风格的评分模型**。 每个发现结果可以存储: * 严重程度 * CVSS 风格的分数 * CVSS 向量 * 影响解释 * 修复建议 * 可选的 CVE * 规则键值 每次扫描可以存储: * `risk_score`(风险分数) * `risk_level`(风险等级) 这使得输出比仅仅使用原始严重性标签有用得多。 ## 前端 Web 界面包括: * 现代化的仪表盘布局 * 扫描历史记录表 * 严重程度分布图 * 扫描时间线图 * 新建扫描表单 * 扫描详情页 * PDF 下载按钮 前端是使用 Flask 模板、共享的基础布局、Chart.js 和自定义样式表构建的。 ## PDF 报告 每次完成扫描都会生成一份 PDF 报告,其中包含: * 目标信息 * 扫描元数据 * 风险分数和风险等级 * 执行摘要 * 已扫描的端口 / 开放端口 * 按严重程度划分的发现计数 * 详细的发现结果 * 修复建议 * 免责声明部分 ## 数据模型 ### `Scan` 存储高级扫描元数据: * 目标 * 端口选择 * 配置文件 * 状态 * 时间戳 * 错误信息 * 风险分数 / 风险等级 * Celery 任务 ID * SSH 身份验证元数据 ### `Finding` 存储发现级别的数据: * 端口 * 服务 * Banner * 版本 * 问题 * 严重程度 * 修复建议 * CVE * CVSS 分数 * CVSS 向量 * 影响 * 规则键值 ## 环境要求 来自 `requirements.txt`: * Flask * Flask-SQLAlchemy * Celery * redis * reportlab * python-dotenv * packaging * paramiko ## 安装与设置 ## 1) 克隆仓库 ``` git clone https://github.com/TauqeerKhan187/mini-nessus-web.git cd mini-nessus-web ``` ## 2) 创建并激活虚拟环境 ### Linux / macOS ``` python3 -m venv venv source venv/bin/activate ``` ### Windows ``` python -m venv venv venv\Scripts\activate ``` ## 3) 安装依赖项 ``` pip install -r requirements.txt ``` ## 4) 启动 Redis Celery 使用 Redis 作为消息代理和结果后端。 ### Linux ``` redis-server ``` 确保 Redis 正在运行: ``` redis://localhost:6379/0 ``` ## 5) 配置环境变量 在项目根目录下创建一个 `.env` 文件: ``` FLASK_SECRET=dev REDIS_URL=redis://localhost:6379/0 ALLOWED_CIDR=192.168.56.0/24 HOST=0.0.0.0 PORT=5000 ``` ### 重要提示 `ALLOWED_CIDR` 被用作**实验室安全限制**。 超出此网络的目标将被拒绝。 ## 6) 启动 Flask 应用 ``` python main.py ``` ## 7) 启动 Celery worker 在同一项目目录中打开另一个终端并运行: ``` celery -A app.celery_app.celery worker --loglevel=info ``` ## 使用方法 1. 在浏览器中打开仪表盘 2. 点击 **New Scan** 3. 输入: * 目标 IP * 可选的自定义端口 * 扫描配置文件(`quick` 或 `full`) * 可选的 SSH 用户名/密码 4. 启动扫描 5. 等待后台任务完成 6. 打开扫描详情页面 7. 查看发现结果、CVSS 风格的评分和修复建议 8. 下载 PDF 报告 ## 扫描配置文件 ### 快速 针对较小的常见端口列表,以获取更快的反馈。 ### 完整 扫描端口 `1-1024` 以及其他几个常用的暴露服务端口。 ## 安全 / 安全提示 本项目被刻意限制为仅在**实验室环境**中使用。 扫描器在扫描之前会根据 `ALLOWED_CIDR` 验证目标 IP。 这意味着它将拒绝扫描允许的网络范围之外的任何内容。 此工具适用于: * 教育用途 * 本地实验室 * 仅限经过授权的内部测试 **不要**将其用于您不拥有或未获得明确评估许可的系统。 ## 开发期间的改进 在开发期间进行的主要升级包括: * 修复了 MySQL 和 Redis 检测 * 改进了快速 / 完整端口配置文件的行为 * 用 CVSS 风格的评分替换了简单的加权评分 * 添加了针对每个发现结果的影响解释 * 增加了扫描级别的风险聚合 * 在数据库中存储 CVSS 字段 * 改进了 PDF 的布局和清晰度 * 将前端重新设计为更简洁的仪表盘 * 将重复的模板样式移至共享的布局和样式表中 * 添加了用于显示严重程度和扫描历史的仪表盘图表 ## 局限性 这仍然是一个轻量级的扫描器,而不是一个完整的商业漏洞管理平台。 目前的局限性包括: * 基于 Banner/版本 的检查可能会产生误报 * 除了 SSH 检查外,没有深入的经过身份验证的 Linux 审计 * 没有插件市场或动态插件 * 没有用户身份验证或多用户支持 * 没有计划或定期扫描系统 * 没有资产分组或标记 * 没有 REST API 身份验证层 * SQLite 适合本地使用,但不适合大规模部署 ## 未来的改进 计划中或可能的下一步: * PDF 中的“前 3 大风险”部分 * 更丰富的 CVE 覆盖范围 * 更好的经过身份验证的检查 * JSON / CSV 导出 * 资产清单支持 * 扫描调度(定时任务) * 多目标支持 - PostgreSQL 部署版本 * 登录 / 用户角色 * UI 中的过滤和排序 * 修复跟踪 ## 截图 该应用程序包含一个基于 Flask 的现代仪表盘,用于启动扫描、审查发现结果、跟踪严重性趋势以及导出 PDF 报告。 ### 仪表盘 显示主要概览,包括严重程度分布、扫描时间线和扫描历史记录。 ![仪表盘](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/d749fd8439022759.png) ### 新建扫描 启动快速或完整扫描,带有可选的用于身份验证检查的 SSH 凭据。 ![新建扫描](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/1270e5128c022801.png) ### 扫描详情 显示扫描级别的风险、优先排序的发现结果、CVSS 风格的分数、影响解释和修复指导。 ![扫描详情](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/4652bede3d022802.png) ### PDF 报告 导出一份整洁的漏洞评估报告,包含执行摘要和详细的发现结果。 ![PDF 报告 - 第 1 页](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/383f57905d022804.png) ![PDF 报告 - 第 2 页](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/7c22270ed9022805.png) 展示的技能 该项目演示了以下方面的实际工作: * Python * Flask * SQLAlchemy * SQLite * Celery * Redis * Paramiko * 异步任务编排 * 端口扫描 * 服务指纹识别 * 漏洞检测逻辑 * 风险评分 * PDF 生成 * Web 仪表盘设计 * 项目架构 ## 作者 **Mohammad Hammad Asif** 构建实用安全工具和作品集级别项目的网络安全学生。
标签:Banner抓取, Celery, CVE匹配, CVSS风险评分, Flask, Paramiko, PDF报告生成, PE 加载器, Python安全工具, Redis, ReportLab, Scrypt密钥派生, SQLAlchemy, SQLite, SSH认证检查, TCP扫描, Web漏洞扫描, 加密, 安全仪表盘, 安全测试, 实验室靶场, 异步扫描, 插件系统, 搜索引擎查询, 攻击性安全, 数据统计, 服务指纹识别, 漏洞扫描器, 端口扫描, 网络安全, 网络安全项目, 网络拓扑发现, 网络资产扫描, 轻量级扫描器, 逆向工具, 隐私保护