Tauqeerkhan187/Mini-nessus-web

GitHub: Tauqeerkhan187/Mini-nessus-web

一个轻量级的基于 Web 的漏洞扫描器,将安全评估流程与后端工程实践相结合。

Stars: 0 | Forks: 0

# Mini-Nessus Web Mini-Nessus Web 是一个轻量级的 **基于 Web 的漏洞扫描器**,采用 **Flask**、**SQLite**、**SQLAlchemy**、**Celery** 和自定义 Python 扫描引擎构建。 它作为一个实践性网络安全作品集项目,用于展示: - 网络侦察 - 服务指纹识别 - 基于规则的漏洞检测 - CVSS 风格风险评分 - 异步扫描执行 - PDF 报告生成 - 简洁的 Web 仪表板设计 该项目灵感来源于 Nessus 等工具的工作流,但有意保持架构简单、可读且易于扩展。 ## 功能 - 用于启动和查看扫描的 Web 仪表板 - 使用 Celery 的异步后台扫描 - 自定义多线程 TCP 端口扫描器 - 使用横幅和默认端口逻辑进行服务识别 - 支持的服务识别: - 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 端口扫描器 - 横幅抓取与服务指纹识别 - 基于规则的漏洞检查 - CVSS 风格评分 - Paramiko 用于认证 SSH 检查 ### 报告 / 前端 - ReportLab - Jinja2 模板 - Chart.js - 自定义样式表 ## 项目结构 ``` 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`** 横幅抓取、服务猜测、版本提取 * **`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. 横幅抓取和服务识别确定可能的服务 7. 基于规则的检查生成发现项 8. CVSS 风格评分增强发现项并计算扫描级风险 9. 结果存储在数据库中 10. 生成 PDF 报告 11. 仪表板显示发现项和趋势 ## 当前检测 / 发现逻辑 ### 基线暴露检查 扫描器当前会对以下易受攻击的服务触发发现项: * Telnet 暴露 * FTP 暴露 * MySQL 暴露 * PostgreSQL 暴露 * Redis 暴露 * SSH 暴露 * HTTP 暴露 ### 版本 / CVE 匹配 本地 CVE 匹配逻辑当前包含对以下服务的选定检查: * OpenSSH * Apache HTTP 服务器 * 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` 存储发现项级数据: * 端口 * 服务 * 横幅 * 版本 * 问题 * 严重性 * 修复建议 * 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 工作进程 在同一个项目目录中打开另一个终端并运行: ``` celery -A app.celery_app.celery worker --loglevel=info ``` ## 用法 1. 在浏览器中打开仪表板 2. 点击 **新建扫描** 3. 输入: * 目标 IP * 可选自定义端口 * 扫描配置文件(`quick` 或 `full`) * 可选 SSH 用户名/密码 4. 启动扫描 5. 等待后台任务 6. 打开扫描详情页面 7. 查看发现项、CVSS 风格分数和修复建议 8. 下载 PDF 报告 ## 扫描配置文件 ### 快速 针对较小的常用端口列表,以更快的速度提供反馈。 ### 完整 扫描端口 `1-1024` 以及多个其他常用服务端口。 ## 安全 / 注意事项 本项目故意限制在 **实验室环境** 中使用。 扫描器会在扫描前验证目标 IP 是否在 `ALLOWED_CIDR` 范围内。 这意味着它会拒绝扫描允许网络范围之外的目标。 本工具适用于: * 教育用途 * 本地实验室 * 仅限授权的内部测试 **不要**用于你未拥有或未经明确授权评估的系统。 ## 开发过程中的改进 开发期间的关键升级包括: * 修复 MySQL 和 Redis 检测 * 改进快速 / 完整端口配置文件行为 * 使用 CVSS 风格评分替代简单加权评分 * 添加每个发现项的影响说明 * 添加扫描级风险聚合 * 在数据库中存储 CVSS 字段 * 改进 PDF 布局和清晰度 * 将前端仪表板重新设计为更简洁的仪表板 * 将重复的模板样式移至共享布局 + 样式表 * 为严重性和扫描历史记录添加仪表板图表 ## 限制 这仍然是一个轻量级扫描器,并非完整商业漏洞管理平台。 当前限制包括: * 基于横幅/版本的检查可能产生误报 * 超出 SSH 检查之外没有深入的认证 Linux 审计 * 没有插件市场或动态插件 * 没有用户认证或多用户支持 * 没有调度或重复扫描系统 * 没有资产分组或标签 * 没有 REST API 认证层 * SQLite 适用于本地使用,但不适合大规模部署 ## 未来的改进 计划或可能的后续步骤: * PDF 中的“前三项风险”部分 * 更丰富的 CVE 覆盖 * 更好的认证检查 * JSON / CSV 导出 * 资产清单支持 * 扫描调度 * 多目标支持 * PostgreSQL 部署版本 * 登录 / 用户角色 * 仪表板中的过滤和排序 * 修复跟踪 ## 截图 该应用程序包含一个基于 Flask 的现代仪表板,用于启动扫描、查看发现项、跟踪严重性趋势以及导出 PDF 报告。 ### 仪表板 显示主要概览,包括严重性分布、扫描时间线和扫描历史记录。 ![仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/389f9ef0cd224612.png) ### 新建扫描 启动快速或完整扫描,可选提供 SSH 凭据用于认证检查。 ![新建扫描](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/d1710a8db4224644.png) ### 扫描详情 显示扫描级风险、优先级排序的发现项、CVSS 风格分数、影响说明和修复建议。 ![扫描详情](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/9aaad56ddf224646.png) ### PDF 报告 导出一个包含执行摘要和详细发现项的干净漏洞评估报告。 ![PDF 报告 - 第 1 页](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/f41b78571e224648.png) ![PDF 报告 - 第 2 页](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/f71ad68440224650.png) 技能展示 本项目展示了在以下方面的实践工作: * Python * Flask * SQLAlchemy * SQLite * Celery * Redis * Paramiko * 异步任务编排 * 端口扫描 * 服务指纹识别 * 漏洞检测逻辑 * 风险评分 * PDF 生成 * Web 仪表板设计 * 项目架构 ## 作者 **TK** 网络安全学生,致力于构建实用的安全工具和适合作品集的项目。
标签:Banner探测, Celery队列, CIDR验证, CVE匹配, CVSS评分, Flask应用, FTP检测, HTTP服务检测, Lab安全限制, MySQL探测, PDF报告, PostgreSQL探测, Redis后端, Redis探测, Scrypt密钥派生, SMTP检测, SQLAlchemy ORM, SQLite数据库, SSH检查, Telnet检测, Web漏洞扫描, 云计算, 内核监控, 加密, 安全仪表盘, 安全工具开发, 安全项目, 开源安全工具, 异步任务, 报告导出, 搜索引擎查询, 数据统计, 服务指纹识别, 漏洞扫描器, 端口扫描, 网络安全, 网络安全学习, 规则引擎, 逆向工具, 逆向工程平台, 隐私保护, 风险聚合