Burpsuit结合SQLMapAPI产生的批量注入插件(X10)
字数 1576 2025-08-18 11:37:19

Burpsuite结合SQLMapAPI批量注入插件(X10)使用教程

一、插件概述

本插件是Burpsuite与SQLMapAPI结合的批量SQL注入检测工具,主要功能特点:

  1. 实现了Burpsuite流量捕获与SQLMap自动化检测的无缝衔接
  2. 支持多任务并发检测(可配置线程数)
  3. 提供灵活的过滤配置选项
  4. 支持正则匹配目标域名
  5. 集成SQLMap全部参数配置能力
  6. 具备任务状态监控和结果展示功能

二、环境准备

1. 所需组件

  • Burpsuite Professional版
  • SQLMapAPI服务(需单独部署)
  • 本插件jar文件

2. SQLMapAPI服务部署

需在服务器上启动SQLMapAPI服务:

python sqlmapapi.py -s -H <IP> -p <PORT>

三、插件安装

  1. 下载插件jar文件(下载地址见文末)
  2. 在Burpsuite中安装:
    • 打开Burpsuite → Extender → Add → 选择下载的jar文件

四、插件界面详解

插件分为三个主要面板:

1. 任务面板(Server Panel)

  • Server:SQLMapAPI服务的IP和端口(格式:IP:PORT)
  • THREAD:并发检测的任务数量(建议根据服务器性能设置)
  • Domain:目标域名(支持正则匹配)
  • CLEAN:清除任务缓存列表
  • TEST:测试SQLMapAPI连接
  • START:开始检测

2. SQLMapAPI参数配置面板

  • Tamper:SQLMap自带的tamper脚本,可输入多个(逗号分隔)
  • LogFile:扫描日志文件路径(位于SQLMapAPI服务器上)

3. 过滤条件面板

  • ExcludeSuffix:排除指定后缀的请求(正则表达式)
    • 示例:.jpg|.png|.ico|.css|.js
  • IngoreCase:ExcludeSuffix是否区分大小写(默认不区分)
  • IngoreParams:去重时忽略的参数(逗号分隔)
    • 示例:timeStamp,randomId
  • ExcludeParams:包含这些参数的请求将被过滤
    • 示例:checkCode,verifyCode

五、核心功能实现原理

1. 请求监听处理

public void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo) {
    boolean addFlag = false;
    // 判断是否为request请求且开关打开
    if (messageIsRequest && sqlmapApiPanel.isStart()) {
        String host = helpers.analyzeRequest(messageInfo).getUrl().getHost();
        // 域名正则匹配
        if (host.matches(targetDomian)) {
            IRequestInfo iRequestInfo = helpers.analyzeRequest(messageInfo);
            // 处理URL
            String url = String.valueOf(iRequestInfo.getUrl());
            url = url.indexOf("?") > 0 ? url.substring(0, url.indexOf("?")) : url;
            // 排除指定后缀
            if (!excludeSuffix.matcher(url).matches()) {
                // 构造任务实体
                TaskEntity entity = new TaskEntity(iRequestInfo.getUrl(), 
                    iRequestInfo.getMethod(), 
                    callbacks.saveBuffersToTempFiles(messageInfo), 
                    iRequestInfo);
                // 数据去重检测
                String hash = bCrypt.hashpw(entity.getSignString(-1, ingoreParams), SALT);
                Integer repeatCheckValue = 1;
                if (String.valueOf(iRequestInfo.getHeaders()).indexOf("Chris-To-Sqlmap") != -1) {
                    if (repeatCheck.containsKey(hash)) {
                        repeatCheckValue = repeatCheck.get(hash) + 1;
                        hash = hash + repeatCheckValue;
                    }
                    addFlag = true;
                }
                // 参数过滤检测
                else if (!repeatCheck.containsKey(hash) && !entity.hasParams(excludeParams)) {
                    if (!entity.getParamBody().isEmpty()) { // POST参数
                        addFlag = true;
                    } else if (!entity.getParamUrl().isEmpty()) { // GET参数
                        addFlag = true;
                    } else if (sqlmapApiOption.getLevel() >= 3 && !entity.getParamCookie().isEmpty()) { // Cookie参数
                        addFlag = true;
                    }
                }
                if (addFlag) {
                    int row = listTasks.size();
                    repeatCheck.put(hash, repeatCheckValue);
                    listTasks.add(entity);
                    fireTableRowsInserted(row, listTasks.size());
                }
            }
        }
    }
}

2. 任务执行处理

public void run() {
    while (true) {
        if (!threadFlag) {
            try {
                sqlmapApiPanel.setMessage("Waiting...");
                sleep(3 * 1000);
            } catch (InterruptedException e) {
                stderr.print(e.getMessage());
            }
            continue;
        }
        
        // 添加新任务
        if (runingTasks.size() < THREAD_NUMBER && listTasks_start < listTasks.size()) {
            while (runingTasks.size() < THREAD_NUMBER && listTasks_start < listTasks.size()) {
                TaskEntity entityNew = listTasks.get(listTasks_start);
                entityNew.setTaskid(sqlmapapi.tastNew(sqlmapapiServer));
                if (entityNew.getTaskid() != null) {
                    entityNew.setTaskEngineid(sqlmapapi.taskStart(sqlmapapiServer, entityNew, sqlmapApiOption));
                    runingTasks.put(entityNew.getTaskid(), entityNew);
                    sqlmapApiPanel.setMessage("New task "+entityNew.getTaskid()+" , URL :"+String.valueOf(entityNew.getUrl()));
                    listTasks_start++;
                } else {
                    try {
                        sqlmapApiPanel.setMessage("New task failed! URL :"+String.valueOf(entityNew.getUrl()));
                        sleep(3 * 1000);
                    } catch (InterruptedException e) {
                        stderr.print(e.getMessage());
                    }
                    continue;
                }
            }
        }
        
        // 刷新任务状态
        if (runingTasks.size() != 0) {
            List<String> removeList = new ArrayList<>();
            for (String key : runingTasks.keySet()) {
                TaskEntity entityRuning = runingTasks.get(key);
                String status = sqlmapapi.flushStatus(sqlmapapiServer, entityRuning);
                sqlmapApiPanel.setMessage("Flash task [" + key + "] status : " + status);
                if ("terminated".equals(status)) {
                    entityRuning.setTaskStatus(status);
                    entityRuning.setTaskScanData(sqlmapapi.flushScanData(sqlmapapiServer, entityRuning));
                    sqlmapApiPanel.setMessage("Task [" + key + "] finished .");
                    removeList.add(key);
                } else if ("not running".equals(status)) {
                    stderr.println(entityRuning.getTaskid() + " not running");
                } else {
                    entityRuning.setTaskStatus(status);
                }
                try {
                    sleep(3 * 1000);
                } catch (InterruptedException e) {
                    stderr.print(e.getMessage());
                }
            }
            if (!removeList.isEmpty()) {
                for (String key : removeList) {
                    runingTasks.remove(key);
                }
            }
            fireTableRowsInserted(0, listTasks.size());
        } else {
            try {
                sleep(3 * 1000);
            } catch (InterruptedException e) {
                stderr.print(e.getMessage());
            }
        }
    }
}

六、使用流程

  1. 配置SQLMapAPI服务

    • 填写正确的Server地址和端口
    • 点击TEST测试连接
  2. 设置过滤条件

    • 根据目标网站特点设置ExcludeSuffix
    • 设置需要忽略的参数(IngoreParams)
    • 设置需要排除的参数(ExcludeParams)
  3. 配置SQLMap参数

    • 选择需要的tamper脚本
    • 设置日志文件路径
  4. 开始扫描

    • 设置并发线程数(THREAD)
    • 输入目标域名(支持正则)
    • 点击START开始扫描
  5. 监控扫描进度

    • 在任务列表中查看各任务状态
    • 在信息提示区域查看实时日志
    • 在扫描结果区域查看漏洞详情

七、最佳实践建议

  1. 性能调优

    • 根据服务器性能设置合适的THREAD值
    • 复杂的注入检测可适当减少并发数
  2. 过滤优化

    • 精确设置ExcludeSuffix以减少无效请求
    • 正确识别并设置动态参数(IngoreParams)
  3. 结果分析

    • 重点关注高风险注入点
    • 结合Burpsuite的Repeater模块验证漏洞
  4. 日志管理

    • 定期清理SQLMapAPI服务器上的日志文件
    • 重要扫描结果建议单独保存

八、注意事项

  1. 使用前确保已获得目标系统的合法授权
  2. 高并发扫描可能对目标系统造成影响,建议在非业务高峰期进行
  3. 复杂的正则匹配可能影响性能,建议先测试
  4. 自定义tamper脚本需放置在SQLMap的tamper目录下

九、下载地址

插件下载:https://pan.baidu.com/s/1YPU_1tujStp69Z9g51AN9g
(历史版本和后续更新也将存放于此)


本文基于Chris_D原创文章整理,仅供学习交流使用,请遵守相关法律法规

Burpsuite结合SQLMapAPI批量注入插件(X10)使用教程 一、插件概述 本插件是Burpsuite与SQLMapAPI结合的批量SQL注入检测工具,主要功能特点: 实现了Burpsuite流量捕获与SQLMap自动化检测的无缝衔接 支持多任务并发检测(可配置线程数) 提供灵活的过滤配置选项 支持正则匹配目标域名 集成SQLMap全部参数配置能力 具备任务状态监控和结果展示功能 二、环境准备 1. 所需组件 Burpsuite Professional版 SQLMapAPI服务(需单独部署) 本插件jar文件 2. SQLMapAPI服务部署 需在服务器上启动SQLMapAPI服务: 三、插件安装 下载插件jar文件(下载地址见文末) 在Burpsuite中安装: 打开Burpsuite → Extender → Add → 选择下载的jar文件 四、插件界面详解 插件分为三个主要面板: 1. 任务面板(Server Panel) Server :SQLMapAPI服务的IP和端口(格式:IP:PORT) THREAD :并发检测的任务数量(建议根据服务器性能设置) Domain :目标域名(支持正则匹配) CLEAN :清除任务缓存列表 TEST :测试SQLMapAPI连接 START :开始检测 2. SQLMapAPI参数配置面板 Tamper :SQLMap自带的tamper脚本,可输入多个(逗号分隔) LogFile :扫描日志文件路径(位于SQLMapAPI服务器上) 3. 过滤条件面板 ExcludeSuffix :排除指定后缀的请求(正则表达式) 示例: .jpg|.png|.ico|.css|.js IngoreCase :ExcludeSuffix是否区分大小写(默认不区分) IngoreParams :去重时忽略的参数(逗号分隔) 示例: timeStamp,randomId ExcludeParams :包含这些参数的请求将被过滤 示例: checkCode,verifyCode 五、核心功能实现原理 1. 请求监听处理 2. 任务执行处理 六、使用流程 配置SQLMapAPI服务 填写正确的Server地址和端口 点击TEST测试连接 设置过滤条件 根据目标网站特点设置ExcludeSuffix 设置需要忽略的参数(IngoreParams) 设置需要排除的参数(ExcludeParams) 配置SQLMap参数 选择需要的tamper脚本 设置日志文件路径 开始扫描 设置并发线程数(THREAD) 输入目标域名(支持正则) 点击START开始扫描 监控扫描进度 在任务列表中查看各任务状态 在信息提示区域查看实时日志 在扫描结果区域查看漏洞详情 七、最佳实践建议 性能调优 根据服务器性能设置合适的THREAD值 复杂的注入检测可适当减少并发数 过滤优化 精确设置ExcludeSuffix以减少无效请求 正确识别并设置动态参数(IngoreParams) 结果分析 重点关注高风险注入点 结合Burpsuite的Repeater模块验证漏洞 日志管理 定期清理SQLMapAPI服务器上的日志文件 重要扫描结果建议单独保存 八、注意事项 使用前确保已获得目标系统的合法授权 高并发扫描可能对目标系统造成影响,建议在非业务高峰期进行 复杂的正则匹配可能影响性能,建议先测试 自定义tamper脚本需放置在SQLMap的tamper目录下 九、下载地址 插件下载:https://pan.baidu.com/s/1YPU_ 1tujStp69Z9g51AN9g (历史版本和后续更新也将存放于此) 本文基于Chris_ D原创文章整理,仅供学习交流使用,请遵守相关法律法规