深入解析SQLMap tamper模块的工作原理
墨者学院 - SQL注入实战-MySQLWriteup
当渗透测试人员面对复杂的WAF防护时,SQLMap的tamper模块往往能成为突破防线的关键武器。这个看似简单的脚本集合,实际上蕴含着精妙的反检测逻辑。
tamper模块的核心机制
tamper本质上是一个请求预处理引擎,它在SQLMap生成标准payload后、发送请求前介入处理。每个tamper脚本都像是一个特制的"模具",能够对payload进行变形处理。比如base64encode tamper会将原始payload转换为base64编码,而charencode tamper则会进行URL编码转换。
有趣的是,tamper模块采用链式调用机制。渗透测试者可以同时启用多个tamper脚本,形成一个处理流水线。比如先通过space2comment将空格替换为注释,再通过base64encode进行编码,最后用charencode进行URL编码。这种层层包装的策略,能够有效绕过基于正则表达式的WAF检测规则。
payload变形的艺术
以常见的space2plus tamper为例,它并非简单地将所有空格替换为加号。实际上,它会智能识别SQL语句的结构,避免破坏关键语法。当遇到"union select"时,它会确保在union和select之间保留必要的分隔符,而不是盲目替换所有空格。
def tamper(payload, **kwargs):
retVal = payload
if payload:
retVal = re.sub(r"s+", "+", retVal)
return retVal
这种精细化的处理体现了tamper模块的设计哲学:既要实现payload变形,又要保证SQL语句的语法正确性。毕竟,一个无法执行的payload即使成功绕过了WAF,也毫无意义。
实战中的组合策略
在真实的渗透测试场景中,单一tamper往往难以奏效。有经验的测试人员会构建tamper组合,比如:
- 先用apostrophemask将单引号转换为UTF-8全角字符
- 再通过base64encode进行编码
- 最后用charencode确保传输安全
这种层层递进的变形策略,让WAF很难通过单一检测规则识别恶意请求。有些高级tamper甚至能模拟正常用户流量,在payload中插入随机注释或空白字符,进一步增加检测难度。
tamper模块的强大之处在于它的可扩展性。安全研究人员可以基于已知的WAF检测规则,编写针对性的tamper脚本。这种攻防对抗的持续演进,使得SQLMap在渗透测试工具中始终保持着重要地位。

参与讨论
太好用了,直接绕过WAF 😂
别忘了配合–cookie改写一起用
space2plus会不会把SQL关键字也改了?
其实有时候单独的tamper也能命中,要看目标
这个tamper组合真是神奇
我配base64被WAF拦,charencode后成功
看到有人把tamper全开,结果全炸了
有人说不需要tamper,结果被WAF拦住,好笑
我刚搞了半天tamper链,调试到凌晨,结果payload一发就被拦,真是又爱又恨,这工具太坑了
tamper链调起来真的要看运气
@ DarkMage99 有时候还真得靠排列组合试出来