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检测, 代码生成, 单元测试, 安全规则引擎, 工厂模式, 渗透测试工具, 漏洞评估, 目录遍历检测, 策略模式, 网络安全, 网络安全审计, 设计模式, 请求拦截, 逆向工具, 隐私保护, 面向对象设计