
1. 靶场搭建的必要性与准备网络安全学习离不开实战环境而sqli-labs作为经典的SQL注入练习平台至今仍是渗透测试入门的最佳选择。2026年最新版的sqli-labs在保持原有教学体系的基础上对漏洞场景进行了更贴近现代Web应用的改造新增了JSON注入、GraphQL注入等新型漏洞模块。注意搭建前请确保使用虚拟机或隔离环境避免对真实网络造成影响。推荐使用VirtualBox Ubuntu 22.04 LTS作为基础环境。我最近在帮团队搭建训练环境时发现网上多数教程还停留在2020年前的配置方法对新版sqli-labs的Docker化部署和模块配置提及甚少。本文将基于最新v4.2.1版本从零开始演示三种主流搭建方式传统LAMP环境手动部署适合深度学习者Docker一键部署推荐大多数场景Vagrant自动化环境适合团队批量部署2. 基础环境配置2.1 硬件与系统要求实测在2核CPU/4GB内存的云服务器上即可流畅运行。操作系统方面Linux: Ubuntu 22.04/Debian 11最佳兼容性Windows: WSL2 Ubuntu需额外配置macOS: Monterey及以上需Homebrew辅助关键依赖版本要求PHP ≥ 8.1 (需启用mysqli、pdo_mysql模块) MySQL ≥ 8.0 或 MariaDB ≥ 10.6 Apache ≥ 2.4 或 Nginx ≥ 1.182.2 安全隔离方案为防止误操作影响主机建议采用以下任一方案VirtualBox虚拟机配置桥接网络Docker网络隔离推荐--networkisolated_nw云服务器安全组限制仅允许测试IP访问3. 传统LAMP部署详解3.1 组件安装与配置Ubuntu系统下执行sudo apt update sudo apt install -y apache2 mysql-server php libapache2-mod-php php-mysql关键配置调整修改Apache默认端口避免冲突# /etc/apache2/ports.conf Listen 8080启用PHP错误显示方便调试# /etc/php/8.1/apache2/php.ini display_errors On error_reporting E_ALL3.2 数据库初始化创建专用数据库用户CREATE DATABASE sqli_labs; CREATE USER sl_userlocalhost IDENTIFIED BY ComplexPssw0rd!; GRANT ALL PRIVILEGES ON sqli_labs.* TO sl_userlocalhost; FLUSH PRIVILEGES;重要实际训练时应使用弱密码如test123此处仅为示范安全实践3.3 靶场部署与调试下载最新版sqli-labswget https://github.com/Audi-1/sqli-labs/archive/refs/tags/v4.2.1.tar.gz tar -xzvf v4.2.1.tar.gz -C /var/www/html/配置文件修改# /var/www/html/sqli-labs/sql-connections/db-creds.inc $dbuser sl_user; $dbpass ComplexPssw0rd!; $dbname sqli_labs;初始化数据库结构mysql -u sl_user -p sqli_labs /var/www/html/sqli-labs/sql-lab.sql4. Docker快速部署方案4.1 单容器部署使用官方改进的Docker镜像docker run -d --name sqli-labs \ -p 8080:80 \ -e MYSQL_ROOT_PASSWORDroot \ -e MYSQL_DATABASEsqli_labs \ --restart always \ vulnerables/web-dvwa-sqli-labs:20264.2 多容器编排docker-compose.yml示例version: 3 services: db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: sqli_labs volumes: - mysql_data:/var/lib/mysql web: image: vulnerables/web-dvwa-sqli-labs:2026 ports: - 8080:80 depends_on: - db volumes: mysql_data:启动命令docker-compose up -d5. 高级配置与功能扩展5.1 新增漏洞模块集成2026版新增模块的启用方法下载扩展包到/var/www/html/sqli-labs/extensions/修改首页配置文件# /var/www/html/sqli-labs/index.php $modules array_merge($modules, [ graphql GraphQL Injection, jsonapi JSON API Injection ]);5.2 靶场难度调节通过.htaccess控制漏洞等级# /var/www/html/sqli-labs/.htaccess IfModule mod_rewrite.c RewriteEngine On RewriteRule ^hard/(.*)$ $1?levelhard [QSA] RewriteRule ^expert/(.*)$ $1?levelexpert [QSA] /IfModule5.3 数据自动重置方案创建定时任务# /etc/cron.d/sqli-reset 0 * * * * root mysql -u root -proot sqli_labs /var/www/html/sqli-labs/sql-lab.sql6. 常见问题排查指南6.1 数据库连接失败典型错误现象Warning: mysqli_connect(): (HY000/1045): Access denied for user...排查步骤检查db-creds.inc中的凭据验证MySQL用户权限SHOW GRANTS FOR sl_userlocalhost;确认MySQL绑定地址# /etc/mysql/mysql.conf.d/mysqld.cnf bind-address 127.0.0.16.2 页面显示源代码问题原因PHP未正确解析解决方案sudo a2enmod php8.1 sudo systemctl restart apache26.3 新关卡404错误处理方法chmod -R 755 /var/www/html/sqli-labs/ sudo chown -R www-data:www-data /var/www/html/7. 安全加固建议虽然这是漏洞练习环境但仍需基础防护限制IP访问# /etc/apache2/conf-available/security.conf Directory /var/www/html/sqli-labs Require ip 192.168.1.0/24 /Directory禁用危险函数# /etc/php/8.1/apache2/php.ini disable_functions exec,passthru,shell_exec,system定期备份数据库mysqldump -u root -p sqli_labs sqli_backup_$(date %F).sql我在实际部署中发现新版靶场对PHP 8.1的兼容性有很大提升但需要注意部分关卡需要手动调整magic_quotes_gpc的模拟设置。建议在完成基础搭建后先测试Less-1到Less-5这些基础关卡确认数据库交互正常后再逐步启用高级模块。