#!/usr/bin/env python

"""
Copyright (c) 2006-2024 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

import os  # 导入操作系统模块，用于获取文件路径等信息

from lib.core.common import singleTimeWarnMessage  # 从核心库导入单次警告消息函数
from lib.core.enums import DBMS  # 从核心库导入数据库管理系统枚举
from lib.core.enums import PRIORITY  # 从核心库导入优先级枚举

# 设置优先级为最高
__priority__ = PRIORITY.HIGHEST

def dependencies():
    singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL))

def tamper(payload, **kwargs):
    """
    这个函数用于篡改（tamper）输入的payload，将MySQL中的'CONCAT(A, B)'函数替换为其等效的'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'形式。

    参数：
        payload：要篡改的原始payload。
        **kwargs：其他可选参数（在本函数中未使用）。

    要求：
        * 仅适用于MySQL数据库。

    测试情况：
        * MySQL 5.0

    注意：
        * 这个篡改方法对于绕过那些过滤CONCAT()函数的非常弱的定制Web应用防火墙很有用。

    示例：
        >>> tamper('CONCAT(1,2)')
        'CONCAT_WS(MID(CHAR(0),0,0),1,2)'
    """

    if payload:
        # 将payload中的'CONCAT('替换为'CONCAT_WS(MID(CHAR(0),0,0),'
        payload = payload.replace("CONCAT(", "CONCAT_WS(MID(CHAR(0),0,0),")

    return payload
