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 报告。
### 仪表盘
显示主要概览,包括严重程度分布、扫描时间线和扫描历史记录。

### 新建扫描
启动快速或完整扫描,带有可选的用于身份验证检查的 SSH 凭据。

### 扫描详情
显示扫描级别的风险、优先排序的发现结果、CVSS 风格的分数、影响解释和修复指导。

### PDF 报告
导出一份整洁的漏洞评估报告,包含执行摘要和详细的发现结果。


展示的技能
该项目演示了以下方面的实际工作:
* 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漏洞扫描, 加密, 安全仪表盘, 安全测试, 实验室靶场, 异步扫描, 插件系统, 搜索引擎查询, 攻击性安全, 数据统计, 服务指纹识别, 漏洞扫描器, 端口扫描, 网络安全, 网络安全项目, 网络拓扑发现, 网络资产扫描, 轻量级扫描器, 逆向工具, 隐私保护