kaowkaoww/MSE907-Vulnerability-Scanner
GitHub: kaowkaoww/MSE907-Vulnerability-Scanner
基于设计模式的 Python Web 漏洞扫描器,支持 SQL 注入、XSS 和目录遍历检测,提供 CLI 与 Web UI 两种使用方式。
Stars: 0 | Forks: 0
# Web 应用程序漏洞扫描器
### MSE907 毕业论文项目
**基于设计模式的面向对象 Web 应用程序漏洞扫描器的开发与实现:旨在提升可维护性与可扩展性**
## 项目概述
本项目是一个基于 Python 的 Web 应用程序漏洞扫描器,用于检测三种类型的漏洞:
| 漏洞 | 严重程度 | 方法 |
| --- | --- | --- |
| SQL 注入 (SQLi) | HIGH | 基于错误 + 基于布尔型的 Payload |
| 跨站脚本攻击 (XSS) | MEDIUM | 反射型 Payload 检测 |
| 目录遍历 | HIGH | 路径遍历特征 |
该扫描器使用了两种 OOP 设计模式构建:
- **工厂模式 (Factory Pattern)** — 集中管理扫描器对象的创建
- **策略模式 (Strategy Pattern)** — 允许在运行时切换检测算法
## 项目结构
```
Coding/
│
├── main.py # CLI entry point
├── app.py # Flask Web UI
├── requirements.txt # Python dependencies
├── test_scanner.py # Unit tests (16 tests)
│
├── base_scanner.py # Abstract base class (Strategy Pattern context)
├── scanner_factory.py # Factory Pattern implementation
│
├── sqli_strategy.py # SQL Injection detection algorithm
├── xss_strategy.py # XSS detection algorithm
├── traversal_strategy.py # Directory Traversal detection algorithm
│
├── reporter.py # Output handler (terminal + JSON)
│
├── web/
│ └── templates/
│ └── index.html # Flask HTML template
│
└── reports/ # Saved JSON scan reports (auto-created)
```
## 环境要求
- Python 3.9+
- Docker Desktop
- pip
## 安装与设置
### 步骤 1 — 克隆或下载项目
将所有文件放置在你的工作目录中,例如:
```
/Users/yourname/Desktop/MSE 907 - Thesis/Coding/
```
### 步骤 2 — 创建并激活虚拟环境
```
cd "/Users/yourname/Desktop/MSE 907 - Thesis/Coding"
# 创建虚拟环境
python3 -m venv venv
# 激活 (Mac/Linux)
source venv/bin/activate
# 激活 (Windows)
venv\Scripts\activate
```
### 步骤 3 — 安装依赖
```
pip install -r requirements.txt
```
### 步骤 4 — 安装并启动 Docker Desktop
从此处下载 Docker Desktop:https://www.docker.com/products/docker-desktop/
- Apple Silicon 芯片的 Mac (M1/M2/M3) → 选择 **Apple Silicon**
- Intel 芯片的 Mac → 选择 **Intel**
启动 Docker Desktop 并等待菜单栏中的 🐳 图标停止动画。
## 设置 DVWA (测试目标)
DVWA (Damn Vulnerable Web Application) 是用于测试的目标应用程序。
### 使用 Docker 启动 DVWA
打开一个新的终端并运行:
```
docker run --rm -it -p 80:80 vulnerables/web-dvwa
```
保持此终端开启 — 关闭它将停止 DVWA。
### 首次数据库设置 (每次 Docker 重启后都需要)
1. 打开浏览器 → 访问 `http://localhost/setup.php`
2. 滚动到底部 → 点击 **"Create / Reset Database"**
3. 等待重定向 → 使用以下凭据登录:
- 用户名:`admin`
- 密码:`password`
4. 前往 **DVWA Security** (左侧菜单) → 将安全级别设置为 **"Low"** → 点击 **Submit**
## 运行扫描器
你需要**同时开启两个终端**:
- **终端 1** → 运行 Docker (DVWA)
- **终端 2** → 运行扫描器
### 选项 A:Web UI (Flask)
```
# 终端 2
cd "/Users/yourname/Desktop/MSE 907 - Thesis/Coding"
source venv/bin/activate
python3 app.py
```
打开浏览器 → `http://localhost:5001`
**使用方法:**
1. 在表单中输入目标 URL
2. 选择扫描类型 (ALL / SQLI / XSS / TRAVERSAL)
3. 点击 **▶ Start Scan**
4. 在页面上查看结果
5. 点击 **⬇ Download JSON Report** 保存结果
### 选项 B:命令行 (CLI)
```
cd "/Users/yourname/Desktop/MSE 907 - Thesis/Coding"
source venv/bin/activate
```
**扫描所有漏洞类型:**
```
python3 main.py --type all --save
```
**仅扫描 SQL 注入:**
```
python3 main.py --type sqli --url "http://localhost/vulnerabilities/sqli/" --save
```
**仅扫描 XSS:**
```
python3 main.py --type xss --url "http://localhost/vulnerabilities/xss_r/" --save
```
**仅扫描目录遍历:**
```
python3 main.py --type traversal --url "http://localhost/vulnerabilities/fi/" --save
```
## DVWA 目标 URL
| 漏洞 | URL |
| --- | --- |
| SQL 注入 | `http://localhost/vulnerabilities/sqli/` |
| XSS (反射型) | `http://localhost/vulnerabilities/xss_r/` |
| 目录遍历 | `http://localhost/vulnerabilities/fi/` |
| 全部 (默认) | `http://localhost/vulnerabilities/sqli/` |
## 预期扫描结果
当针对安全级别 = Low 的 DVWA 运行时:
[VULNERABLE] SQL Injection
Severity : HIGH
Found : 4 vulnerability(ies)
Payloads : ' | ' OR '1'='1' -- | 1' ORDER BY 1-- | ' UNION SELECT NULL--
[VULNERABLE] Cross-Site Scripting (XSS)
Severity : MEDIUM
Found : 5 vulnerability(ies)
Payloads : |
| ...
[VULNERABLE] Directory Traversal
Severity : HIGH
Found : 2 vulnerability(ies)
Payloads : ../../../../../etc/passwd | /etc/passwd
## 运行单元测试
```
cd "/Users/yourname/Desktop/MSE 907 - Thesis/Coding"
source venv/bin/activate
python -m pytest test_scanner.py -v
```
**预期结果:**
```
16 passed in 0.11s
```
**测试覆盖范围:**
- `TestScannerFactory` (6 个测试) — 工厂模式创建正确的对象
- `TestStrategyPattern` (2 个测试) — 策略可以在运行时切换
- `TestSQLiStrategy` (3 个测试) — SQL 错误检测逻辑
- `TestXSSStrategy` (2 个测试) — 反射型 Payload 检测
- `TestDirectoryTraversalStrategy` (2 个测试) — 路径遍历检测
- `TestGetName` (1 个测试) — 策略名称方法
## JSON 报告格式
报告保存在 `reports/` 文件夹中,文件名格式为:
```
scan_localhost_vulnerabilities_sqli__YYYYMMDD_HHMMSS.json
```
报告结构示例:
```
{
"scan_timestamp": "2026-03-06T13:29:38",
"target_url": "http://localhost/vulnerabilities/sqli/",
"total_scans": 1,
"vulnerable_count": 1,
"results": [
{
"scan_type": "SQL Injection",
"target": "http://localhost/vulnerabilities/sqli/",
"payloads_tested": 5,
"vulnerable": true,
"severity": "HIGH",
"vulnerabilities": [
{
"payload": "'",
"technique": "error-based",
"evidence": "you have an error in your sql syntax",
"test_url": "http://localhost/vulnerabilities/sqli/?id=%27&Submit=Submit"
}
]
}
]
}
```
## 设计模式实现
### 工厂模式 (`scanner_factory.py`)
```
# 创建特定 scanner
scanner = ScannerFactory.create("sqli", "http://localhost/vulnerabilities/sqli/")
# 一次性创建所有 scanner
scanners = ScannerFactory.create_all("http://localhost/vulnerabilities/sqli/")
```
### 策略模式 (`base_scanner.py`)
```
# 在运行时设置 strategy
scanner = BaseScanner("http://target.com")
scanner.set_strategy(SQLiStrategy()) # swap to SQLi
scanner.set_strategy(XSSStrategy()) # swap to XSS
result = scanner.run_scan(session)
```
## 故障排除
| 问题 | 解决方案 |
| --- | --- |
| `ModuleNotFoundError: No module named 'scanner'` | 确保你位于 `Coding/` 文件夹中 |
| `Connection refused` | Docker 未运行 — 请先启动 DVWA |
| `Port 5001 already in use` | 运行 `kill $(lsof -t -i:5001)` 后重试 |
| `Port 80 already allocated` | DVWA 已在运行 — 无需再次运行 Docker |
| Scanner 返回 CLEAN | 检查 DVWA 安全级别是否设置为 **Low** |
| `TemplateNotFound: index.html` | 确保 `index.html` 位于 `web/templates/` 文件夹中 |
| `command not found: python` | 在 Mac/Linux 上使用 `python3` 代替 `python` |
## 参考文献
- OWASP Foundation. (2021). OWASP Top Ten. https://owasp.org/www-project-top-ten/
- DVWA Project. https://github.com/digininja/DVWA
- Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1994). *Design Patterns: Elements of Reusable Object-Oriented Software.* Addison-Wesley.
标签:AES-256, Capstone项目, CISA项目, Docker容器化, Flask Web界面, MSE907, Python安全工具, SQL注入检测, Web应用漏洞扫描器, XSS检测, 代码生成, 单元测试, 安全规则引擎, 工厂模式, 渗透测试工具, 漏洞评估, 目录遍历检测, 策略模式, 网络安全, 网络安全审计, 设计模式, 请求拦截, 逆向工具, 隐私保护, 面向对象设计