Sqlmap:选取sqli-labs中less-8进行sqlmap注入测试

如果还没下载的可以看:sqlmap下载和安装保姆级教程(附安装包)-CSDN博客

操作步骤

打开sqli-labs

首先打开docker或者按照你自己情况来,输入命令打开sqli-labs

使用dockers的命令,打开cmd或者powershell

复制代码
docker run -dt --name sqli-labs -p 8081:80 --rm acgpiano/sqli-labs

再访问http://127.0.0.1:8081

如果没弄好,显示以下样子,这是没连接到数据库

点击初始化

跳转到

再返回,重新进less-8,如图所示是这样就是成功了,如果还没成功,可以稍微等一下再看,可能是数据库连接有点慢

配置sqlmap到环境变量步骤(Windows 10/11)

请按照以下步骤操作,只需要做一次:

  1. 打开环境变量设置

    • 按下键盘上的 Win 键(或者点击开始菜单),直接输入"环境变量"。
    • 在搜索结果中点击"编辑系统环境变量 "或者"编辑账户的环境变量"。
    • 在弹出的窗口中,点击底部的"环境变量"按钮。
  2. 找到 Path 变量

    • 在"用户变量"或"系统变量"区域(建议选用户变量 ,比较安全),找到名为 Path 的变量。
    • 选中它,点击"编辑"。
  3. 添加 Sqlmap 路径

    • 在弹出的编辑窗口中,点击"新建"。
    • 把你存放 sqlmap 的那个文件夹路径粘贴进去。
    • 点击"确定"保存所有窗口。

验证是否成功

配置完成后,你需要重新打开一个新的 CMD 窗口(原来的窗口不会立即生效)。

  1. 随便打开一个 CMD 窗口(不需要进入 sqlmap 文件夹,直接在桌面或者 C 盘根目录都行)。

  2. 输入以下命令:

    复制代码
    python sqlmap.py --version

    (注意:即使配置了环境变量,因为 sqlmap 是个 .py 文件而不是 .exe,通常还是建议保留 python 前缀。如果你想彻底省略 python.py,那是更高级的配置(看后面),对于初学者,只要能做到"不用 cd 找路径"就已经很方便了。)

  3. 如果直接给你运行了, 说明你的 Python 环境没问题, 比如:

  4. 要返回命令行使用,先关掉,运行窗口,在命令行cd到存放sqlmap的位置,然后按回车

  5. 如果回车后没有报错,且前面的路径变成了 存放路径

  6. 现在运行下面的命令,显示下图所示,sqlmap就启动了

复制代码
   python sqlmap.py
可能出现的问题:

遇到的第二个报错 'sqlmap' 不是内部或外部命令...,是因为你虽然进入了 sqlmap 的文件夹,但运行的方式还是不对。

你确实配置了环境变量,但只配对了一半。

这个配置只告诉 Windows 两件事:

  1. Python :在这个文件夹里,我找到了 python.exe,所以你在任何地方敲 python 都能运行。✅(成功)
  2. Sqlmap :在这个文件夹里,Windows 并没有找到 一个叫 sqlmap.exe 的文件,它只找到了 sqlmap.py

Windows 的 CMD 默认只能直接识别 .exe.bat.com 等可执行程序。 它虽然知道 .py 是 Python 脚本,但当你直接输入 sqlmap 时,它不会自动去猜"你是不是想让我运行 sqlmap.py"。


最简单的解决办法(给它造个"假"命令)

既然你想直接在命令行输入 sqlmap 就能运行,我们只需要做一个小小的"欺骗"操作,创建一个批处理文件。

操作步骤(只需 1 分钟):

  1. 打开你的文件夹:
    C:\Users\zouhuixin\AppData\Local\Programs\Python\Python314\sqlmap

  2. 在空白处右键 -> 新建 -> 文本文档

  3. 把这个文件命名为 sqlmap.bat(注意后缀名要改成 .bat,如果看不到后缀名,需要在文件夹上方查看里勾选"文件扩展名")。

  4. 右键 点击这个 sqlmap.bat,选择编辑(或用记事本打开)。

  5. 在里面输入这一行代码:

    复制代码
    @python "%~dp0sqlmap.py" %*
  6. 解释:这行代码的意思是"当有人调用 sqlmap.bat 时,自动帮我调用 python 去运行同目录下的 sqlmap.py,并把所有参数传过去"。

  7. 保存,关闭记事本。

  • 关闭你现在所有的 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

这样开始就是成功了,它正在尝试各种方法(报错注入、时间盲注等)来进一步确认漏洞并获取更多信息。

等它跑完(屏幕停止滚动),它通常会告诉你:

  1. 数据库是什么版本。
  2. 当前连接的用户是谁。
  3. 甚至可能直接列出所有的数据库名。

更方便的"偷懒"技巧(推荐)

如果你不想配置环境变量,还有一个非常简单的办法:

直接在文件夹里按住 Shift 键 + 鼠标右键,选择"在此处打开 Powershell 窗口"或"在此处打开命令窗口",这样就不用手动 cd 找路径了。

如果你想学彻底省略 python 和 .py

这背后的原理是 Windows 有一个叫 PATHEXT 的机制。默认情况下,Windows 只知道 .EXE 是程序,但我们可以通过修改系统变量,告诉 Windows:"以后看到 .PY 结尾的文件,也把它当成程序直接运行"。

只要两步,就能实现彻底省略:

第一步:让 Windows 识别 .PY 为可执行程序
  1. 按下 Win 键,搜索"环境变量 ",选择"编辑系统环境变量"。
  2. 点击右下角的"环境变量"按钮。
  3. 上半部分(用户变量) 里,找找看有没有叫 PATHEXT 的变量。
    • 如果有:选中它,点击"编辑"。
    • 如果没有 :点击"新建",变量名填 PATHEXT,变量值先填 .PY
  4. 在变量值的最后面,加上 ;.PY (注意前面有个分号)。
    • 最终效果应该是类似这样:.COM;.EXE;.BAT;.CMD;...;.PY
  5. 点击确定保存。
第二步:把 Sqlmap 放入"全局搜索路径"

刚才我们只是让系统认识了 .py 文件,现在要告诉系统去哪里找 sqlmap.py

  1. 还在"环境变量"窗口,在下半部分(系统变量) 里,找到叫 Path 的变量(注意不是用户变量里的那个,虽然改上面的也能生效,但改系统变量更稳妥)。
  2. 选中 Path,点击"编辑"。
  3. 点击"新建",然后不要填你现在的 sqlmap 路径。
  4. 关键操作
    • 打开你的文件资源管理器,进入这个文件夹:C:\Users\zouhuixin\AppData\Local\Programs\Python\Python314\
    • 在这个文件夹里,新建一个文件夹 ,命名为 sqlmap_scripts(名字随便取,好记就行)。
    • 把你原来的 sqlmap 文件夹里的 所有内容 (包括 sqlmap.py, sqlmapapi.py 等所有文件),全部 剪切粘贴 到这个新建的 sqlmap_scripts 文件夹里。
  5. 回到刚才的"编辑环境变量"窗口,点击"新建",输入这个新文件夹的路径:
    C:\Users\zouhuixin\AppData\Local\Programs\Python\Python314\sqlmap_scripts
  6. 一路点击"确定"保存退出。

开始注入测试

针对 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 blindtime-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 默认会检测所有技术,但明确指定 BT 可以在某些情况下减少不必要的探测时间。
  • --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] 部分:

  1. information_schema:这是 MySQL 自带的系统数据库,存了所有数据库的结构信息。
  2. challenges:这看起来像是另一个练习用的数据库。
  3. mysql:这是存放用户权限等核心信息的系统数据库。
  4. performance_schema:这是用于监控数据库性能的数据库。
  5. 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 将逐字符跑出具体的用户名和密码。

表格分为三列:idpasswordusername

其中最显眼的几个账号是:

  • 超级管理员 :用户名 admin,密码也是 admin。这是最常见的弱口令。
  • 测试账号 :用户名 Dumb,密码 Dumb;用户名 Angelina,密码 I-kill-you
  • 其他账号 :还有 admin1admin4 等一系列账号,密码与用户名相同。

💡 针对 Less-8 的特别提示

  1. 关于速度

    盲注(尤其是布尔盲注)非常耗时,因为它需要通过发送大量请求来逐位猜测数据。如果速度太慢,可以适当增加 --threads(如设为 5 或 10),但要注意观察靶场是否稳定。

  2. 为什么不用 Union?

    Less-8 的代码逻辑中,当 SQL 执行出错时,PHP 代码没有回显任何错误信息(else 分支是空的或仅显示空白),且页面没有回显位(即无法使用 UNION SELECT 将数据显示在页面上),所以必须使用盲注。

  3. 遇到卡住怎么办?

    如果 SQLMap 在探测过程中卡住,可以尝试加上 --skip-urlencode 或者检查你的本地靶场环境(XAMPP/WAMP)是否运行正常。

通过以上步骤,你应该能顺利完成 sqli-labs Less-8 的自动化注入测试。

攻击流程复盘

回顾一下我们刚才走过的路,这就是一个完整的 SQL 注入攻击链条:

  1. 探测 :发现 URL 的 id 参数存在注入漏洞。
  2. 指纹识别:确认后台数据库是 MySQL。
  3. 枚举数据库 :列出所有数据库,锁定目标 security
  4. 枚举表 :列出 security 库里的所有表,锁定目标 users
  5. 拖库 :使用 --dump 命令,把 users 表里的账号密码全部下载下来。

这一课的启示

这次成功的攻击揭示了几个严重的安全问题:

  • 代码层面的漏洞 :网站没有对用户输入的 id 参数进行过滤或预处理,导致 SQL 语句被篡改。
  • 弱口令 :即使没有漏洞,admin/admin 这种密码也极易被猜解。
  • 明文存储密码 :数据库里的密码是直接可见的(如 Dumbadmin),没有进行哈希加密。一旦数据库泄露,用户密码就完全暴露了。

恭喜你完成了 一次SQL 注入实战!

相关推荐
伯远医学1 小时前
Nat. Methods | 邻近标记技术:活细胞中捕捉分子互作的新利器
java·开发语言·前端·javascript·人工智能·算法·eclipse
莪_幻尘1 小时前
一份 AGENTS.md,让 AI 代码规范率从 60% 飙升到 95%
前端·ai编程·cursor
秋秋20231 小时前
🐴 给 AI 套缰绳:一个前端项目的 AI Harness 实战记录
前端
智慧光迅AINOPOL1 小时前
全光网行业选型指南:如何选择适合你的全光网解决方案
网络·全光网解决方案·全光网·校园全光网·校园全光网解决方案
卷帘依旧2 小时前
React Fiber介绍
前端
wangjialelele2 小时前
Linux SystemV 消息队列 + 责任链模式:实现客户端消息处理流水线
linux·服务器·c语言·网络·c++·责任链模式
_codemonster2 小时前
系统分析师系列目录
java·网络·数据库
研☆香2 小时前
es6的新特性介绍
前端·ecmascript·es6
cui_ruicheng2 小时前
Linux网络编程(一):网络基础与协议概念
linux·网络·操作系统