sqlmap 中的 10 个 Tamper 脚本实战技巧(上)

        在渗透测试中,Web 应用防护系统(简称 WAF) 已经成为 SQL 注入测试时,必须面对的关键障碍。
        作为网络安全人员,我们深刻理解 sqlmap 中 Tamper 脚本的价值,今天我们将聚焦 10 个关键 Tamper 脚本的用法,揭示其在真实场景中的应用技巧。

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

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

(一)技术原理简析

输入变形:修改 SQL 语句的编码、格式或结构;

规则混淆:破坏 WAF 的固定模式匹配;

协议级干扰:操纵HTTP请求的构造方式;

上下文欺骗:使攻击载荷符合特定应用场景特征。

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

(一) 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 基础规则)。

(二) 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)。

(三) space2comment.py :空白的艺术

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

        高级应用

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

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

        实战经验

MySQL 特例:使用 /*!50727 … */ 版本特定语法;

配合多重编码: %20  –>  %2%2a%2f 

避免过度使用:可能导致 SQL 解析器崩溃。

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

(四) 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 WHEH 构造复杂条件。

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

(五) modsecurityversioned.py :MySQL 注释魔法

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

        典型示例

# 原始注入
1 AND 1=1

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

        技术细节

注释中的数字对应 MySQL 版本号(如 30874 = 3.87.4);

仅当服务器版本 >= 指定版本时执行注释内语句;

可自定义版本号:修改脚本中的 _version_ 变量。

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

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容