marwannzakii/sql-injection-security-lab

GitHub: marwannzakii/sql-injection-security-lab

一个Docker化的SQL注入安全实验室,集成了易受攻击的Web应用、自动化扫描器和WAF,专为渗透测试教育和安全培训设计。

Stars: 0 | Forks: 0

# 🛡️ SQL 注入安全实验室 **一个 Docker 化的、交互式的渗透测试环境,用于演示、利用和防御 SQL 注入漏洞。** [![Docker](https://img.shields.io/badge/Docker-Compose-2496ED?logo=docker&logoColor=white)](https://www.docker.com/) [![PHP](https://img.shields.io/badge/PHP-8.0-777BB4?logo=php&logoColor=white)](https://www.php.net/) [![Python](https://img.shields.io/badge/Python-3.x-3776AB?logo=python&logoColor=white)](https://www.python.org/) [![MariaDB](https://img.shields.io/badge/MariaDB-10.5-003545?logo=mariadb&logoColor=white)](https://mariadb.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) *由 **Team MASM** 构建的计算机安全课程项目。*
## 📋 目录 - [概述](#overview) - [架构](#architecture) - [功能特性](#features) - [项目结构](#project-structure) - [入门指南](#getting-started) - [使用指南](#usage-guide) - [自动化扫描器](#automated-scanner) - [演示的安全概念](#security-concepts-demonstrated) - [使用的技术](#technologies-used) - [免责声明](#disclaimer) ## 概述 本项目是一个端到端的 **SQL 注入 (SQLi) 安全实验室**,它将一个专门构建的易受攻击 Web 应用程序与一个自动化利用扫描器相结合。其设计旨在: 1. **演示** 在安全、容器化的环境中的现实世界 SQL 注入攻击向量。 2. **自动化** 利用自定义 Python 扫描器进行漏洞发现和数据提取。 3. **教育** 防御技术 —— 包括 Prepared Statements 和可切换的 Web 应用防火墙 (WAF)。 整个环境通过 **Docker Compose** 进行编排,使其完全可移植,并可通过单条命令复现。 ## 架构 ``` ┌─────────────────────────────────────────────────────────┐ │ Docker Compose │ │ │ │ ┌─────────────────────┐ ┌────────────────────────┐ │ │ │ Web Container │ │ Database Container │ │ │ │ (PHP 8 + Apache) │ │ (MariaDB 10.5) │ │ │ │ │ │ │ │ │ │ • index.php (Hub) │◄──►│ • lab_db database │ │ │ │ • vuln.php │ │ • users table │ │ │ │ • blind.php │ │ • Seeded test data │ │ │ │ • secure.php │ │ │ │ │ │ • waf.php │ └────────────────────────┘ │ │ └─────────────────────┘ │ │ ▲ │ └────────────│────────────────────────────────────────────┘ │ ┌─────────┴──────────┐ │ Automated Scanner │ │ (Python 3) │ │ │ │ • Crawl & Discover │ │ • Union-Based SQLi │ │ • Blind SQLi │ │ • PDF Reporting │ └─────────────────────┘ ``` ## 功能特性 ### 🔓 易受攻击的 Web 应用程序 | 端点 | 漏洞类型 | 描述 | |---|---|---| | `vuln.php` | **联合查询注入 (Union-Based SQLi)** | 直接将用户输入拼接到 SQL 查询中,允许 `UNION SELECT` 攻击提取任意数据。 | | `blind.php` | **时间盲注 (Time-Based Blind SQLi)** | 拼接输入但仅返回布尔响应(Active / Not Found),迫使攻击者通过基于 `SLEEP()` 的时间侧信道推断数据。 | | `secure.php` | **无(已修复)** | 使用带有参数化查询的 **Prepared Statements** —— 展示了针对 SQLi 的正确防御措施。 | ### 🛡️ Web 应用防火墙 (WAF) - 可从 Web 界面**开启/关闭** —— 无需重启。 - **基于签名**的检测,阻止常见的 SQLi 关键字(`UNION`、`SELECT`、`SLEEP`、`OR`、`AND` 等)。 - 检测到恶意 payload 时返回带有样式化阻止页面的 `403 Forbidden`。 - 展示了仅依赖 WAF 防御的价值及其**局限性**。 ### 🤖 自动化 Python 扫描器 - **Web 爬虫** —— 从给定的中心页面自动发现可注入的端点。 - **联合查询利用** —— 检测并利用联合查询可注入参数,转储用户名和密码。 - **时间盲注利用** —— 回退到使用 `SLEEP()` 计时的 ASCII 暴力破解进行逐字符提取。 - **PDF 报告生成** —— 生成包含执行摘要、每个目标的发现结果及提取证据的专业安全审计报告。 ## 项目结构 ``` sql-injection-security-lab/ │ ├── docker-compose.yml # Multi-container orchestration ├── Dockerfile # PHP 8 + Apache web server image ├── init.sql # Database schema & seed data │ ├── src/ # Vulnerable web application │ ├── index.php # Hub page with WAF controls │ ├── vuln.php # Union-Based SQLi endpoint │ ├── blind.php # Time-Based Blind SQLi endpoint │ ├── secure.php # Patched endpoint (Prepared Statements) │ ├── waf.php # Web Application Firewall logic │ ├── toggle.php # WAF on/off toggle handler │ ├── about.php # Team information page │ └── style.css # Application stylesheet │ ├── final_project_tool.py # Automated SQLi scanner ├── reporter.py # PDF report generation module │ ├── .gitignore ├── LICENSE └── README.md ``` ## 入门指南 ### 前置条件 | 工具 | 版本 | 用途 | |---|---|---| | [Docker](https://docs.docker.com/get-docker/) | 20.10+ | 容器运行时 | | [Docker Compose](https://docs.docker.com/compose/install/) | 2.0+ | 多容器编排 | | [Python 3](https://www.python.org/downloads/) | 3.8+ | 运行自动化扫描器 | ### 1. 克隆仓库 ``` git clone https://github.com//sql-injection-security-lab.git cd sql-injection-security-lab ``` ### 2. 启动实验室环境 ``` docker-compose up --build -d ``` 这将启动: - **Web 服务器**,位于 `http://localhost:8080` - **MariaDB** 数据库,包含预置的用户数据 ### 3. 安装扫描器依赖 ``` pip install requests beautifulsoup4 fpdf ``` ### 4. 验证实验室是否正在运行 打开浏览器并访问: ``` http://localhost:8080 ``` 您应该看到安全实验室中心页面,其中包含 WAF 控件和指向每个实验模块的链接。 ## 使用指南 ### 探索 Web 应用程序 1. 在 `http://localhost:8080` **导航至中心页面** —— 开启/关闭 WAF 并选择一个实验。 2. **易受攻击的实验** (`vuln.php?id=1`) —— 尝试注入如下 payload: -1 UNION SELECT username, password FROM users 3. **盲注实验** (`blind.php?id=1`) —— 观察布尔响应并尝试基于时间的 payload: 1 AND SLEEP(3) 4. **安全实验** (`secure.php?id=1`) —— 确认相同的 payload 在此处无害。 5. **开启 WAF** 并重试攻击,以查看基于签名的阻止效果。 ### 运行自动化扫描器 ``` python final_project_tool.py http://localhost:8080/index.php ``` 扫描器将: 1. **爬取** 中心页面并发现所有可注入链接。 2. **测试** 每个目标的联合查询注入 (Union-Based SQLi),然后回退到盲注 (Blind SQLi)。 3. **提取** 易受攻击端点的数据(用户名、密码)。 4. **生成** 包含完整发现结果的 PDF 报告 (`Team_MASM_Report.pdf`)。 ## 自动化扫描器 ### 工作原理 ``` Hub URL ──► Crawler ──► Target Discovery ──► For each target: │ ┌───────────┴───────────┐ ▼ ▼ Union-Based Time-Based Detection Blind Detection │ │ ▼ ▼ Data Extraction ASCII Brute-Force (Full Dump) (Char-by-Char) │ │ └───────────┬───────────┘ ▼ PDF Report Generation ``` ### 扫描器模块 | 模块 | 文件 | 职责 | |---|---|---| | **主扫描器** | `final_project_tool.py` | 爬取、检测、利用逻辑 | | **报告生成器** | `reporter.py` | 包含执行摘要和证据的 PDF 生成 | ## 演示的安全概念 | 概念 | 实现 | |---|---| | **联合查询注入** | `vuln.php` 中的直接查询拼接允许 `UNION SELECT` 连接攻击者控制的查询。 | | **时间盲注** | `blind.php` 不直接泄露数据 —— 攻击者使用 `SLEEP()` + 条件逻辑一次推断一个字符的数据。 | | **Prepared Statements** | `secure.php` 使用带有参数化绑定的 `mysqli::prepare()`,完全中和注入。 | | **Web 应用防火墙** | `waf.php` 应用基于正则的签名检测,展示了深度防御和 WAF 绕过的局限性。 | | **自动化利用** | Python 扫描器演示了攻击者如何大规模自动化侦察、利用和报告。 | ## 使用的技术 | 层级 | 技术 | |---|---| | **容器化** | Docker, Docker Compose | | **Web 服务器** | Apache (通过 `php:8.0-apache` 镜像) | | **后端** | PHP 8.0 | | **数据库** | MariaDB 10.5 | | **扫描器** | Python 3, Requests, BeautifulSoup4 | | **报告** | FPDF (Python PDF 生成) | ## 免责声明
**Team MASM** · 计算机安全项目
标签:AppImage, CISA项目, Docker, Docker Compose, Docker部署, MariaDB, OPA, OpenVAS, PDF报告, PHP, Python, SQLi, WAF, Web安全, Web应用防火墙, XML 请求, 安全实验室, 安全开发, 安全教育, 安全防御评估, 无后门, 版权保护, 网络安全教育, 自动化攻击, 蓝队分析, 计算机安全课程, 请求拦截, 逆向工具, 防御演示, 靶场, 预编译语句