Burpsuit结合SQLMapAPI产生的批量注入插件是怎样的

1.1变动:

增加过滤设置

优化显示结果

增加运行提示信息

增加域名正则匹配

整个插件分为三个面板:任务面板、sqlmapapi参数配置面板、过滤条件面板。

任务面板

Burpsuit结合SQLMapAPI产生的批量注入插件是怎样的

Server : SQLmapapi服务的IP和端口

THREAD:同时检测的任务数量

Domain:需要检测的域名,支持正则匹配

CLEAN:清除任务缓存列表

TEST:测试SQLmapapi的连接是否成功

START:开启检测

左下为任务列表和任务状态,右侧按钮下方是信息提示区域,下方为请求详情和扫描结果。

sqlmapapi参数配置面板

Burpsuit结合SQLMapAPI产生的批量注入插件是怎样的

这里的设置参考sqlmap的参数设置。

Tamper:列表中的是sqlmap自带的tamper,输入框中可填入自定义的tamper使用 ”,“逗号分割 。

LogFile:设置扫描日志记录文件,该文文件存储路径为sqlmapapi服务器上的路径。

过滤条件面板

Burpsuit结合SQLMapAPI产生的批量注入插件是怎样的

ExcludeSuffix:用来排除一些指定后缀的请求,使用正则进行匹配。例如:图片、css、js等。

IngoreCase:对ExcludeSuffix进行限制是否区分大小写,默认为不区分。

IngoreParams:在对请求进行重复性检测时需要忽略的参数,使用”,“逗号分割,例如:请求中的随机数timeStamp等。

ExcludeParams:在对请求进行过滤时如果存在该参数则不将该请求加入待测列表,例如:验证码checkCode等。

以上是根据这段时间在实际使用的过程中所做的一些修改,后续还会根据大家的建议进一步对该插件进行优化,谢谢大家的支持。

以下是程序中的一些代码以及实现思路:

请求监听段实现代码

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 可区分http 和 https                String url = String.valueOf(iRequestInfo.getUrl());                url = url.indexOf("?") > 0 ? url.substring(0, url.indexOf("?")) : url;                // 排除指定后缀URL(eg : .jpg|.png|.ico)                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)) {                        // repeatCheck                        if (!entity.getParamBody().isEmpty()) {// 检测post参数是否为空                            addFlag = true;                        } else if (!entity.getParamUrl().isEmpty()) {// 检测get参数是否为空                            addFlag = true;                        } else if (sqlmapApiOption.getLevel() >= 3 && !entity.getParamCookie().isEmpty()) {// level参数大于3是应检测cookie注入                            addFlag = true;                        }                    }                    if (addFlag) {                        int row = listTasks.size();                        repeatCheck.put(hash, repeatCheckValue);                        listTasks.add(entity);                        fireTableRowsInserted(row, listTasks.size());                    }                }            }        }    }

任务执行段实现代码:

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() != "" && entityNew.getTaskid() != "-") {                                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) {                        // 刷新map中任务的状态                        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 + " .");                            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");                                // entityRuning.setTaskEngineid(taskStart(entityRuning));                            } 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());                        }                    }                }            }

关于Burpsuit结合SQLMapAPI产生的批量注入插件是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

文章标题:Burpsuit结合SQLMapAPI产生的批量注入插件是怎样的,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/27542

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月20日 下午11:58
下一篇 2022年9月20日 下午11:59

相关推荐

  • javascript数值型只有一种吗

    javascript数值型只有一种:浮点类型。JavaScript内部存储数字都是按64位浮点类型存储的,所以在JavaScript中实际上是没有整数类型的。按照JavaScript中的数字格式能够表示的整数范围为“[-2^53 ~ 2^53]”,包含边界值;但需要注意的是,数组索引、位操作符等使用…

    2022年9月24日
    58100
  • mysql的配置文件是哪个

    Windows操作系统中的MySQL配置文件是“my.ini”,位置一般在MySql安装的根目录下,也有可能在隐藏文件夹“ProgramData”下面;而Linux操作系统中的MySQL配置文件是“my.cnf”,位置一般在“/etc/my.cnf”或“/etc/mysql/my.cnf”目录下。 …

    2022年9月20日
    3.4K00
  • SQL注入语法有哪些

    仅供参考学习使用。 SQL注入语法 报错注入 updatexml(1,concat(0x7e,(select database()),0x7e),1)–+extractvalue(1,concat(0x7e,(select database()),0x7e),1)–+select count(*…

    2022年9月6日
    71500
  • word竖排文字如何设置居中

    word竖排文字设置居中的方法: 1、首先我们点击顶部“插入”工具栏。 2、然后选择下面的“文本框” 3、接着选择“绘制竖排文本框” 4、这样画一个文本框,在其中打字就是竖排的了。 5、输入完成后,右键文本框,选择“设置文本框格式” 6、最后在其中选择“居中”并保存即可设置竖排文字居中。 感谢各位的…

    2022年9月1日
    1.3K00
  • 虚拟机关机命令是什么

    虚拟机关机命令: 关机命令的输入方法为:按下“Win+R”打开“运行”输入 cmd “进入命令提示符”。 一、poweroff 1、poweroff :关机并关闭电源 2、poweroff -p:关机并关闭电源 3、poweroff -f :强制关机 4、poweroff -w:不是真正的关机,只是…

    2022年9月22日
    1.1K00
  • ai如何转曲文件

    ai转曲文件的方法: 1、首先双击桌面的ai软件,然后打开。 2、之后去点击任务选项栏中的“选择”。 3、点击弹出菜单中的“全部”。 4、之后点击任务选项中的“文字”。 5、点击文字下面的“创建轮廓”即可。 以上就是“ai如何转曲文件”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很…

    2022年9月1日
    2.0K00
  • Redis集群与扩展知识点分析

    Redis的高可用 1.为什么要高可用 防止单点故障,造成整个集群不可用 实现高可用通常的做法是将数据库复制多个副本以部署在不同的服务器上,其中一台挂了也可以继续提供服务 Redis实现高可用有三种部署模式:主从模式,哨兵模式,集群模式 2.主从模式 主节点负责读写操作 从节点只负责读操作 从节点的…

    2022年9月15日
    71800
  • javascript可不可以加密

    javascript可以加密;一般的JavaScript代码基本没有必要加密,加密都会把体积变大影响加载速度,如果是敏感的业务,则可以对JavaScript代码进行加密,在书写业务代码的时候就要设计到安全问题,一般较好是把整体业务做拆分,核心计算的业务较好放到后台,把简单的逻辑搞复杂化然后加密。 本…

    2022年9月1日
    69400
  • pr如何修改视频尺寸

    pr修改视频尺寸的方法: 1、首先进入特效控制台,然后点击打开“运动”。 2、然后在里面找到“缩放比例”。 3、接着可以去打开比例控制条,然后可以调节改变视频的大小。 4、最后去掉“等比缩放”将前面的√取消即可。 以上就是关于“pr如何修改视频尺寸”这篇文章的内容,相信大家都有了一定的了解,希望小编…

    2022年8月29日
    96900
  • 关系数据库实现数据之间联系的方法叫什么

    关系数据库实现数据之间联系的方法是公共属性;通过一个表中包含另一个表主键的方法实现数据之间的联系,外键是用于建立两个表数据之间联系的属性,外键可以由一个或多个属性组成,外键值引用被参照主键的值,使两个数据之间建立了联系。 本教程操作环境:windows10系统、DELL G3电脑。 关系数据库实现数…

    2022年9月2日
    82500
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部