资讯动态

【实战靶场】基于 Docker 快速搭建 MySQL 与 MSSQL 漏洞复现环境及 DataGrip 避坑指南

发布时间:2026/8/16 9:29:48 来源:尧图企业网站定制
--- title: 【实战靶场】基于 Docker 快速搭建 MySQL 与 MSSQL 漏洞复现环境及 DataGrip 避坑指南 tags: - 网络安全 - SQL注入 - Docker - MySQL - MSSQL categories: - Web安全 - 靶场搭建 --- # 【实战靶场】基于 Docker 快速搭建 MySQL 与 MSSQL 漏洞复现环境及 DataGrip 避坑指南 在学习 Web 安全与 SQL 注入SQLi时拥有一个快速部署、随用随删的数据库靶场环境至关重要。本文记录在 Windows 环境下使用 **Docker** 快速搭建 **MySQL 5.7** 与 **MSSQL 2019 (SQL Server)** 测试环境的全流程以及使用 **DataGrip** 连接时的常见避坑记录。 --- ## 目录 1. [一、MySQL 靶场快速搭建与持久化挂载](#1) 2. [二、MSSQL 2019 靶场搭建与验证](#2) 3. [三、DataGrip 图形化连接与配置](#3) 4. [四、高频报错与踩坑总结重点复盘](#4) --- span id1/span ## 一、MySQL 靶场快速搭建与持久化挂载 ### 1. 准备初始化数据 (init.sql) 在本地新建工作目录如 C:\sqli-lab创建 init.sql 文件并写入测试数据 sql CREATE DATABASE IF NOT EXISTS sqli_lab; USE sqli_lab; -- 创建用户表 CREATE TABLE IF NOT EXISTS users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50), password VARCHAR(50), email VARCHAR(100), role VARCHAR(20) DEFAULT user ); -- 插入测试数据 INSERT INTO users (username, password, email, role) VALUES (admin, admin123, adminlab.com, admin), (alice, alice456, alicelab.com, user), (bob, bob789, boblab.com, user), (charlie, charlie0, charlielab.com, user), (root, root321, rootlab.com, admin); -- 创建敏感密钥表模拟 Flag CREATE TABLE IF NOT EXISTS secrets ( id INT PRIMARY KEY, secret_key VARCHAR(100) ); INSERT INTO secrets VALUES (1, FLAG{sqli_is_fun}), (2, FLAG{never_trust_user_input});2. Docker 启动并挂载自动执行利用 MySQL 官方镜像特性将 SQL 文件挂载至/docker-entrypoint-initdb.d/目录容器初次启动时会自动执行建库建表PowerShell# PowerShell 环境 docker run -d --name mysql-lab -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot -v ${PWD}/init.sql:/docker-entrypoint-initdb.d/init.sql mysql:5.73. 数据验证PowerShelldocker exec -it mysql-lab mysql -uroot -proot -e USE sqli_lab; SELECT * FROM secrets;二、MSSQL 2019 靶场搭建与验证1. 启动 MSSQL 容器⚠️密码策略提醒MSSQL 对管理员sa密码有强制复杂度要求至少 8 位包含大小写字母、数字和特殊字符。PowerShelldocker run -d --name mssql-lab -e ACCEPT_EULAY -e SA_PASSWORDYourStrongPassw0rd -p 1433:1433 [mcr.microsoft.com/mssql/server:2019-latest](https://mcr.microsoft.com/mssql/server:2019-latest)2. 命令行快速初始化数据在新版 MSSQL 容器中sqlcmd工具位于/opt/mssql-tools18/bin/sqlcmd需加-C参数信任自签名证书PowerShelldocker exec -it mssql-lab /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P YourStrongPassw0rd -C -Q CREATE DATABASE sqli_lab; GO USE sqli_lab; GO CREATE TABLE users ( id INT PRIMARY KEY IDENTITY(1,1), username NVARCHAR(50), password NVARCHAR(50), role NVARCHAR(20) DEFAULT user ); CREATE TABLE secrets ( id INT PRIMARY KEY, secret_key NVARCHAR(100) ); INSERT INTO secrets VALUES (1, NFLAG{mssql_is_powerful}); 三、DataGrip 图形化连接与配置1. 连接 MySQLHost:localhostPort:3306User:rootPassword:rootDatabase:sqli_lab2. 连接 MSSQL (SQL Server)Host:localhostPort:1433User:saPassword:YourStrongPassw0rdDatabase:sqli_lab⚠️ 核心避坑SSL 证书切换到Advanced (高级)标签页将trustServerCertificate改为true否则测试连接会因自签名证书校验失败而报错。四、高频报错与踩坑总结重点复盘坑点 1bind: Only one usage of each socket address is normally permitted原因本机已运行了本地 MySQL导致3306端口被占用。解决办法方案 A更改宿主机映射端口为3307-p 3307:3306。方案 B使用netstat -ano | findstr :3306查出占用进程的 PID 并终止。坑点 2挂载了init.sql但数据库依然为空原因容器如果不是“初次创建”或数据卷已存在残留不会重新触发/docker-entrypoint-initdb.d/脚本。解决办法先彻底删除旧容器docker rm -f mysql-lab然后再重新运行启动命令。坑点 3MSSQL 执行报错Could not find stored procedure GO原因GO是终端工具如sqlcmd的批处理分隔符并非标准 SQL 语法。在 DataGrip / DBeaver 等图形化工具中直接写 SQL 语句并以分号;结尾即可不需要输入GO。总结通过 Docker 容器化方案我们可以分钟级拉起隔离、干净的漏洞测试环境。结合 DataGrip 的智能补全与语法检查能大幅提升 SQL 注入练习和脚本编写的效率。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价