Burp 是 Web 安全测试中不可或缺的神器。每一个师傅的电脑里面应该都有一个 Burp。同时 Burp 和很多其他神器一样,它也支持插件。但是目前总体来说网上 Burp 插件开发的资料不是特别特别的丰富。今天我也来讲讲自己如何从一个完全不会 Burp 插件开发的小白如何学习 Burp 插件的开发。

如何调试

其实开发一样东西,调试真的特别重要。如果没有调试,那就和瞎子摸象差不多,非常的难顶。尤其是在 Burp 插件的开发过程中,如果你不可以调试,那你就必须把 jar 包打包出来,再安装,然后通过 output 来打印调试,这样的确非常地痛苦。后来在网上找了一些资料,一开始没太明白,后来研究发现原来调试配置这么简单。这么我们以宇宙 JAVA 开发神器 IDEA 为例。

1.配置 DEBUG

首先是在 IDEA 里面配置调试。点击右上角里面的配置,点击 "Edit Configurations" 就可以进入对 DEBUG 的配置页面。新增一个 Remote 配置,命名可以随自己的喜好。

2. 命令行启动 Burp

为了配合调试,需要在命令行中使用刚才新建 DEBUG 配置的参数来启动 Burp。

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar burpsuite_community_v2.1.02.jar

3. 部署 jar 包,打断点

可以现在程序中打一下断点。接着就是编译 jar 包,并且启动 IDE 的 DEBUG。将 jar 包部署到 Burp 中,下面就可以快乐地调试了。

Burp 开发

老实说其实 Burp 插件开发其实还是比较简单的,只要你掌握常规的套路,熟悉了基本的 API 之后,基本就可以进行插件的开发。插件开发最困难的部分其实是 GUI 的开发,不过这也属于 JAVA GUI 开发的范畴,这个暂不讨论。Burp 开发注意以下几点:

  • 所有 Burp 插件都必须实现 IBurpExtender 接口

  • 实现的类必须叫做 BurpExtender

  • 必须要重写 registerExtenderCallbacks 方法

后续如果需要调用启用其它接口的方法,那么也需要在 BurpExtender 中实现相应的接口。讲一个例子,比如要对 Proxy 进行相关的操作。

首先,需要在 BurpExtender 中实现 IProxyListener 接口,接下来就需要实现 processProxyMessage 方法。在 processProxyMessage 方法中,就可以对发送的请求以及相应进行处理。

public void processProxyMessage(boolean messageIsRequest, final IInterceptedProxyMessage iInterceptedProxyMessage)

下面再讲一个例子,获取请求中的请求头:

    public List<Map<String, String>> getHeaders(IHttpRequestResponse messageInfo) {
List<Map<String, String>> headers = new ArrayList<>();
IRequestInfo analyzeRequest = helpers.analyzeRequest(messageInfo);
List<String> h = analyzeRequest.getHeaders();
for (String h1: h) {
Map<String, String> hMap = new HashMap<>();
if (h1.startsWith("GET") || h1.startsWith("POST")) {
continue;
} else {
String[] header = h1.split(":", -1);
hMap.put(header[0], header[1]);
}
headers.add(hMap);
}
return headers;
}

总结

其实总的来说 Burp 插件开发并不特别困难,只要当一个合格的 API 调用者就可以了。网上目前也有很多开源的 Burp 插件代码,其实你可以找一个感兴趣的 Burp 插件代码看一下,你就可以快速地了解这些 API 的作用。其实 Burp 的 Extender 中的 APIs 就已经列出了所有可用的 API 接口。

如何写一个 Burp 插件的更多相关文章

  1. 如何写一个jquery插件

      本文总结整理一下如何写一个jquery插件?虽然现今各种mvvm框架异常火爆,但是jquery这个陪伴我们成长,给我们带来很多帮助的优秀的库不应该被我们抛弃,写此文章,作为对以往欠下的笔记的补充, ...

  2. 为PhoneGap写一个android插件

    为PhoneGap写一个android插件,要怎么做? 其实这句话应该反过来说,为android写一个PhoneGap插件,要怎么做? 这里以最简单的Hello World!为例,做个说明: 1.第一 ...

  3. 自己写一个 jQuery 插件

    我知道这一天终将会到来,现在,它来了. 需求 开发 SharePoint 的 CSOM 应用时,经常需要在网页上输出一些信息. 这种需求和 alert 的弹窗.F12 的断点查看信息的场景是不一样的: ...

  4. 如何给Ionic写一个cordova插件

    写一个cordova插件 之前由javaWeb转html5开发,由于面临新技术,遂在适应的过程中极为挣扎,不过还好~,这个过程也极为短暂:现如今面临一些较为复杂的需求还会有一丝丝头痛,却没有一开始那么 ...

  5. 写一个umi插件 自动生成代码 解放cv的双手

    引言 最近在写一个中台项目,使用的react的umi框架. 各种增删改查.基本是列表页 新建页 详情页这种页面 为了避免不必要的简单重复(主要是想偷懒) 于是想去实现自己的一个代码生成器 探索 首先, ...

  6. 80行代码教你写一个Webpack插件并发布到npm

    1. 前言 最近在学习 Webpack 相关的原理,以前只知道 Webpack 的配置方法,但并不知道其内部流程,经过一轮的学习,感觉获益良多,为了巩固学习的内容,我决定尝试自己动手写一个插件. 这个 ...

  7. 基于vue框架手写一个notify插件,实现通知功能

    简单编写一个vue插件,当点击时触发notify插件,dom中出现相应内容并且在相应时间之后清除,我们可以在根组件中设定通知内容和延迟消失时间. 1. 基础知识 我们首先初始化一个vue项目,删除不需 ...

  8. 写一个jq插件

    本文章摘自博客园的http://www.cnblogs.com/JustinYoung/archive/2010/03/30/jquery-chajian.html,写此文章只是方便自己记载技术 一个 ...

  9. 如何使用jQuery写一个jQuery插件

    jQuery插件其实是前端框架的思维,构成一个框架,个人认为必须满足以下几个基础条件:1. 可重用,2. 兼容性,3. 维护方便,虽说现在有很多比较成熟的前端框架,但是也有部分存在配置麻烦,学习成本大 ...

随机推荐

  1. conda查看某个安装包的依赖项

    查看某个安装包XXX的依赖项的conda指令为: conda search XXX -info 比如XXX为pytorch0.3.1,就会有如下输出: pytorch 0.3.1 py36hfbe70 ...

  2. 02.替换空格 (Java)

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路 感觉这题对于Java意义 ...

  3. LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)

    题目描述 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7 ...

  4. R语言爬取动态网页之环境准备

    在R实现pm2.5地图数据展示文章中,使用rvest包实现了静态页面的数据抓取,然而rvest只能抓取静态网页,而诸如ajax异步加载的动态网页结构无能为力.在R语言中,爬取这类网页可以使用RSele ...

  5. CppCheck介绍与使用

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u011012932/article/details/52778149 简述 Cppcheck 是一种 ...

  6. spark 笔记 14: spark中的delay scheduling实现

    延迟调度算法的实现是在TaskSetManager类中的,它通过将task存放在四个不同级别的hash表里,当有可用的资源时,resourceOffer函数的参数之一(maxLocality)就是这些 ...

  7. vue-微信浏览器左上角返回按钮拦截

    [需求] 在微信公众号开发中,有时需要对浏览器左上角返回按钮进行拦截处理相关的页面逻辑,而并不是让页面直接返回上一页,之前在这个细节点上的一直实现得不是很好.但看到京东购物公众号上的效果却实现得非常好 ...

  8. 【转】C++ const成员变量和成员函数(常成员函数)

    转:http://c.biancheng.net/view/2230.html 在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定.const 可以用来修饰成员变量和成员函数. co ...

  9. 手动清空微信PC客户端数据

    微信PC客户端,用久了之后,会产生大量数据,包括聊天记录.聊天图片.视频等等,非常占存储空间,除非很重要的聊天记录或文件,建议额外保存,其他的可以手动删掉就好,可以节省存储空间. 1.找到[C:\Us ...

  10. VirtualBox-5.2.8-121009-Win,虚拟机指令ifconfig不显示ip解决方法