SQLMap中–tamper参数怎么用?
TOPIC SOURCE
SQLMAP详细参数详解
在渗透测试的实战中,SQLMap 已经成为自动化注入的标配,而 --tamper 参数则是突破 WAF、过滤器甚至自定义编码的关键利器。很多新手在看到一串 tamper/*.py 脚本时会疑惑:到底该怎么挑,怎么配合其它选项才能让 payload 顺利穿透?下面从原理、常用脚本到实际命令,层层拆解它的使用方法。
tamper 参数的定位与原理
SQLMap 在生成每一条注入 payload 前,会先把原始的 parameter=value 交给指定的 Python 脚本进行“篡改”。这些脚本可以对字符进行 URL 编码、十六进制转义、大小写混淆,甚至加入自定义的加密算法。WAF 多数基于特征匹配,一旦 payload 被“变形”,规则往往失效,从而让真正的注入语句得以执行。
常用 tamper 脚本速览
space2comment.py– 把空格替换为/* */注释,常规空格过滤失效。between.py– 将AND、OR转为BETWEEN形式,规避关键字过滤。charencode.py– 把字符转为十进制或十六进制xNN,适合字符集限制的场景。randomcase.py– 随机大小写混写,突破大小写敏感的白名单。base64encode.py– 将 payload 整体 Base64 编码后再解码执行,针对深度加密的防护。
在命令行中调用的实际写法
sqlmap -u "http://test.com/search.php?id=1"
--tamper=space2comment.py,randomcase.py
--level=3 --risk=2
-p id --batch
这里使用了两个脚本的组合:先把空格变为注释,随后再对大小写进行随机化。--level 与 --risk 提升检测深度,-p 明确指定要注入的参数,--batch 保证全程非交互。
实际使用时,常见的坑包括:脚本之间的顺序会影响最终 payload;某些脚本只在特定 DBMS 下有效;以及在高并发扫描时,过多的篡改会导致响应时间显著增长。遇到响应异常时,建议逐个剔除脚本定位根因,或者配合 --skip 排除不需要测试的参数。
如果目标站点使用了自研的过滤规则,不妨先用 --tamper=base64encode.py 试探,再结合 --technique=BEUSTQ 调整注入方式,往往能在意想不到的地方打开后门。

参与讨论
这个tamper组合用得挺实用,空格替注释确实能绕过不少WAF,顺序要注意。
randomcase.py 我经常单独用,针对大小写敏感的白名单确实有用,但不是万能。
请问 base64encode.py 在响应体里有解码行为就行吗?目标站点必须能decode才能起效吧?
我之前试过把charencode和space2comment一起用,结果请求变得特别长,超时了。
感觉这类脚本是有戏,但高并发扫描时真的很慢,时间成本高。
between.py 在某些 MSSQL 场景下确实好用,AND/OR 被禁时还能绕过去。
哪个脚本对 MySQL 更友好?有人专门整理过按 DBMS 推荐表吗?🤔
这文章讲得直入要点,尤其提到顺序影响结果那块,很多人忽略了。
我试过在参数里加–skip,有时候直接跳过无用参数比盲测脚本靠谱多了。
随手吐槽一下:新手看到一堆.py就乱勾,结果啥也没跑出来,hhh。