SQLMap中–tamper参数怎么用?

10 人参与

渗透测试的实战中,SQLMap 已经成为自动化注入的标配,而 --tamper 参数则是突破 WAF、过滤器甚至自定义编码的关键利器。很多新手在看到一串 tamper/*.py 脚本时会疑惑:到底该怎么挑,怎么配合其它选项才能让 payload 顺利穿透?下面从原理、常用脚本到实际命令,层层拆解它的使用方法。

tamper 参数的定位与原理

SQLMap 在生成每一条注入 payload 前,会先把原始的 parameter=value 交给指定的 Python 脚本进行“篡改”。这些脚本可以对字符进行 URL 编码、十六进制转义、大小写混淆,甚至加入自定义的加密算法。WAF 多数基于特征匹配,一旦 payload 被“变形”,规则往往失效,从而让真正的注入语句得以执行。

常用 tamper 脚本速览

  • space2comment.py – 把空格替换为 /* */ 注释,常规空格过滤失效。
  • between.py – 将 ANDOR 转为 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 调整注入方式,往往能在意想不到的地方打开后门。

参与讨论

10 条评论
  • 药师何

    这个tamper组合用得挺实用,空格替注释确实能绕过不少WAF,顺序要注意。

    回复
  • 厄洛斯

    randomcase.py 我经常单独用,针对大小写敏感的白名单确实有用,但不是万能。

    回复
  • 狂飙突进

    请问 base64encode.py 在响应体里有解码行为就行吗?目标站点必须能decode才能起效吧?

    回复
  • 临水

    我之前试过把charencode和space2comment一起用,结果请求变得特别长,超时了。

    回复
  • 软软星

    感觉这类脚本是有戏,但高并发扫描时真的很慢,时间成本高。

    回复
  • 序曲

    between.py 在某些 MSSQL 场景下确实好用,AND/OR 被禁时还能绕过去。

    回复
  • BristleBack

    哪个脚本对 MySQL 更友好?有人专门整理过按 DBMS 推荐表吗?🤔

    回复
  • NimbleNose

    这文章讲得直入要点,尤其提到顺序影响结果那块,很多人忽略了。

    回复
  • 社牛小彩虹

    我试过在参数里加–skip,有时候直接跳过无用参数比盲测脚本靠谱多了。

    回复
  • 数据预言家

    随手吐槽一下:新手看到一堆.py就乱勾,结果啥也没跑出来,hhh。

    回复