利用Python开发Burp Suite插件(三)
字数 1391 2025-08-18 11:37:53

利用Python开发Burp Suite插件(三) - SQL注入检测插件开发指南

前言

本教程是"利用Python开发Burp Suite插件"系列的第三部分,重点介绍如何开发一个能够自动检测SQL注入漏洞的Burp Suite插件。本插件将在每个参数后面插入大量SQL注入检测参数,并通过分析响应数据来判断漏洞是否存在。

所需接口类

IIntruderPayloadProcessor接口

这是一个Intruder工具的payload处理器,通过IBurpExtenderCallbacks.registerIntruderPayloadProcessor()注册。需要实现以下两个方法:

  1. getProcessorName():

    • 功能:获取payload处理器的名称
    • 返回值:处理器名称字符串
  2. processPayload():

    • 功能:当处理器每次应用payload到Intruder攻击时调用
    • 参数:当前payload值
    • 返回值:处理后的payload值

IHttpListener接口

这是一个HTTP监听器,Burp Suite中任何工具发起的HTTP请求或收到的HTTP响应都会通知此监听器。通过IBurpExtenderCallbacks.registerHttpListener()注册。需要实现以下方法:

  1. processHttpMessage():
    • 功能:处理所有HTTP数据包
    • 参数:包含HTTP请求/响应信息的对象
    • 说明:必须通过此接口获取HTTP数据包进行分析和修改

代码实现步骤

第一步:导入必要的Burp API类

from burp import IBurpExtender
from burp import IIntruderPayloadProcessor
from burp import IHttpListener

第二步:准备SQL注入测试语句

将常用的SQL注入测试语句写入数组:

sql_payloads = [
    "' OR '1'='1",
    "' OR '1'='1' --",
    "' OR '1'='1' /*",
    "' OR '1'='1' #",
    "' OR 1=1 --",
    "' OR 1=1 /*",
    "' OR 1=1 #",
    "' OR 'a'='a",
    "' OR 'a'='a' --",
    "' OR 'a'='a' /*",
    "' OR 'a'='a' #",
    "' OR 1=1; --",
    "' OR 1=1; /*",
    "' OR 1=1; #",
    "' OR '1'='1'",
    "' OR '1'='1' --",
    "' OR '1'='1' /*",
    "' OR '1'='1' #",
    # 更多payload可从以下地址获取
    # https://github.com/trietptm/SQL-Injection-Payloads
]

第三步:注册接口类

在BurpExtender类中注册所需的接口:

class BurpExtender(IBurpExtender, IIntruderPayloadProcessor, IHttpListener):
    def registerExtenderCallbacks(self, callbacks):
        self._callbacks = callbacks
        self._helpers = callbacks.getHelpers()
        
        # 注册接口
        callbacks.registerIntruderPayloadProcessor(self)
        callbacks.registerHttpListener(self)
        
        # 设置扩展名称
        callbacks.setExtensionName("SQL Injection Detector")

第四步:实现IIntruderPayloadProcessor接口

def getProcessorName(self):
    return "SQL Injection Payload Processor"

def processPayload(self, currentPayload, originalPayload, baseValue):
    # 在这里处理payload
    payload = self._helpers.bytesToString(currentPayload)
    modified_payload = payload + sql_payloads[0]  # 示例:添加第一个payload
    return self._helpers.stringToBytes(modified_payload)

第五步:定义Intruder工具的payload生成器

def generatePayload(self, baseValue):
    # 生成所有可能的payload变体
    payloads = []
    for payload in sql_payloads:
        modified_payload = baseValue + payload
        payloads.append(self._helpers.stringToBytes(modified_payload))
    return payloads

第六步:处理从payload生成器返回的payload

def processPayload(self, currentPayload, originalPayload, baseValue):
    # 获取当前payload的字符串形式
    payload_str = self._helpers.bytesToString(currentPayload)
    
    # 在这里可以添加自定义处理逻辑
    # 例如:根据特定条件选择不同的payload
    
    return currentPayload  # 返回处理后的payload

第七步:实现IHttpListener接口处理HTTP请求和响应

def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):
    # 只处理响应
    if not messageIsRequest:
        httpService = messageInfo.getHttpService()
        response = messageInfo.getResponse()
        
        # 分析响应内容
        response_info = self._helpers.analyzeResponse(response)
        headers = response_info.getHeaders()
        body = response[self._helpers.analyzeResponse(response).getBodyOffset():]
        
        # 检查响应中是否包含SQL错误特征
        if self.checkForSqlErrors(body):
            print("Potential SQL Injection vulnerability detected!")
            
def checkForSqlErrors(self, response_body):
    # 常见的SQL错误特征
    sql_errors = [
        "SQL syntax",
        "MySQL server",
        "syntax error",
        "unclosed quotation mark",
        "ORA-00933",
        "SQL command not properly ended",
        "Warning: mysql_",
        "Unclosed quotation mark",
        "You have an error in your SQL syntax"
    ]
    
    response_str = self._helpers.bytesToString(response_body)
    for error in sql_errors:
        if error.lower() in response_str.lower():
            return True
    return False

完整代码示例

from burp import IBurpExtender
from burp import IIntruderPayloadProcessor
from burp import IHttpListener

class BurpExtender(IBurpExtender, IIntruderPayloadProcessor, IHttpListener):
    def registerExtenderCallbacks(self, callbacks):
        self._callbacks = callbacks
        self._helpers = callbacks.getHelpers()
        callbacks.registerIntruderPayloadProcessor(self)
        callbacks.registerHttpListener(self)
        callbacks.setExtensionName("SQL Injection Detector")
        
        # 初始化SQL注入payload列表
        self.sql_payloads = [
            "' OR '1'='1",
            "' OR '1'='1' --",
            "' OR '1'='1' /*",
            # 更多payload...
        ]
        
    # IIntruderPayloadProcessor方法
    def getProcessorName(self):
        return "SQL Injection Payload Processor"
        
    def processPayload(self, currentPayload, originalPayload, baseValue):
        payload_str = self._helpers.bytesToString(currentPayload)
        modified_payload = payload_str + self.sql_payloads[0]
        return self._helpers.stringToBytes(modified_payload)
    
    # IHttpListener方法
    def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):
        if not messageIsRequest:
            response = messageInfo.getResponse()
            body = response[self._helpers.analyzeResponse(response).getBodyOffset():]
            
            if self.checkForSqlErrors(body):
                print("Potential SQL Injection vulnerability detected!")
                
    def checkForSqlErrors(self, response_body):
        sql_errors = [
            "SQL syntax",
            "MySQL server",
            # 更多错误特征...
        ]
        
        response_str = self._helpers.bytesToString(response_body)
        for error in sql_errors:
            if error.lower() in response_str.lower():
                return True
        return False

使用说明

  1. 将上述代码保存为.py文件

  2. 在Burp Suite中配置插件:

    • 打开Burp Suite
    • 转到"Extender"标签页
    • 点击"Add"按钮
    • 选择"Python"作为扩展类型
    • 选择保存的.py文件
    • 点击"Next"完成加载
  3. 使用Intruder工具时,选择插件生成的payload进行测试

注意事项

  1. Python版本兼容性

    • Burp Suite使用Jython,目前仅支持Python 2.7语法
    • 确保使用Python 2兼容的语法(如print语句而非函数)
  2. 性能考虑

    • 大量payload可能会产生大量请求,影响性能
    • 考虑分批测试或添加延迟
  3. 误报处理

    • 本示例使用简单的错误字符串匹配,可能会有误报
    • 可以添加更复杂的检测逻辑(如响应时间分析、布尔盲注检测等)
  4. 扩展性

    • 可以从GitHub等资源获取更多payload:
    • https://github.com/trietptm/SQL-Injection-Payloads

通过本教程,您已经学会了如何开发一个基本的SQL注入检测Burp Suite插件。您可以根据需要扩展其功能,如添加更多payload类型、改进检测算法或集成其他Burp工具。

利用Python开发Burp Suite插件(三) - SQL注入检测插件开发指南 前言 本教程是"利用Python开发Burp Suite插件"系列的第三部分,重点介绍如何开发一个能够自动检测SQL注入漏洞的Burp Suite插件。本插件将在每个参数后面插入大量SQL注入检测参数,并通过分析响应数据来判断漏洞是否存在。 所需接口类 IIntruderPayloadProcessor接口 这是一个Intruder工具的payload处理器,通过 IBurpExtenderCallbacks.registerIntruderPayloadProcessor() 注册。需要实现以下两个方法: getProcessorName() : 功能:获取payload处理器的名称 返回值:处理器名称字符串 processPayload() : 功能:当处理器每次应用payload到Intruder攻击时调用 参数:当前payload值 返回值:处理后的payload值 IHttpListener接口 这是一个HTTP监听器,Burp Suite中任何工具发起的HTTP请求或收到的HTTP响应都会通知此监听器。通过 IBurpExtenderCallbacks.registerHttpListener() 注册。需要实现以下方法: processHttpMessage() : 功能:处理所有HTTP数据包 参数:包含HTTP请求/响应信息的对象 说明:必须通过此接口获取HTTP数据包进行分析和修改 代码实现步骤 第一步:导入必要的Burp API类 第二步:准备SQL注入测试语句 将常用的SQL注入测试语句写入数组: 第三步:注册接口类 在BurpExtender类中注册所需的接口: 第四步:实现IIntruderPayloadProcessor接口 第五步:定义Intruder工具的payload生成器 第六步:处理从payload生成器返回的payload 第七步:实现IHttpListener接口处理HTTP请求和响应 完整代码示例 使用说明 将上述代码保存为 .py 文件 在Burp Suite中配置插件: 打开Burp Suite 转到"Extender"标签页 点击"Add"按钮 选择"Python"作为扩展类型 选择保存的.py文件 点击"Next"完成加载 使用Intruder工具时,选择插件生成的payload进行测试 注意事项 Python版本兼容性 : Burp Suite使用Jython,目前仅支持Python 2.7语法 确保使用Python 2兼容的语法(如print语句而非函数) 性能考虑 : 大量payload可能会产生大量请求,影响性能 考虑分批测试或添加延迟 误报处理 : 本示例使用简单的错误字符串匹配,可能会有误报 可以添加更复杂的检测逻辑(如响应时间分析、布尔盲注检测等) 扩展性 : 可以从GitHub等资源获取更多payload: https://github.com/trietptm/SQL-Injection-Payloads 通过本教程,您已经学会了如何开发一个基本的SQL注入检测Burp Suite插件。您可以根据需要扩展其功能,如添加更多payload类型、改进检测算法或集成其他Burp工具。