别再用默认参数跑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安全早报 + 实战攻防案例 + 网安学习路线连载
浙公网安备 33010602011771号