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. Mac开发如何处理键盘事件

    Mac上输入与手机输入的不同是,Mac需要处理更多的键盘交互,因为Mac上的键盘输入会有多种快捷键组合. 代理方法处理 NSTextField #pragma mark - NSTextFieldDe ...

  2. CopyOnWriteArrayList使用

    1.在遍历操作数量大大超过可变操作是(add,set等等)使用.原因是其可变操作是通过对底层数据进行一次新的复制来实现的. 2.迭代器创建后,其不会反应列表的添加.移除或更改.其迭代器是”快照“风格的 ...

  3. What exactly is the parameter e (event) and why pass it to JavaScript functions?

    What exactly is the parameter e (event) and why pass it to JavaScript functions? 问题 Well, when I lea ...

  4. 万变的Web,不变的CRUD

    用JSP+Servlet写程序,到Struts,Spring,hibernate写程序,到现在Spring Cloud分布式写程序,到底有多大区别,是不是还在写CRUD? 看着JD上各种要求,简直是S ...

  5. spring cloud microservice provider and consumer

    MicroService Provider:https://files.cnblogs.com/files/xiandedanteng/empCloud190824.rarMicroService C ...

  6. T78748 【lcez模拟赛】机场Ⅰ

    T78748 [lcez模拟赛]机场Ⅰ 其实这就是最小生成树的题辣 注意输入毒瘤 输入的话要避免记录中间这个‘ , ’ 如下操作可以解决 特别注意%d之间的‘ , ’ 边的权值要现算 存点的话存横纵坐 ...

  7. Day1_Python基础一

    一.基本认识 1.计算机基础 CPU:计算 内存:缓存 硬盘:存储 操作系统:硬件与软件的桥梁 应用程序:应用的平台 2.Python的历史 1989年龟叔,追求清晰.简单.优美的原则. 主要领域:云 ...

  8. leetcode 34在排序数组中查找元素的第一个和最后一个位置

    class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { ve ...

  9. 浏览器端-W3School-HTML:HTML DOM cells 集合

    ylbtech-浏览器端-W3School-HTML:HTML DOM cells 集合 1.返回顶部 1. HTML DOM cells 集合 HTML DOM Table 对象 定义和用法 cel ...

  10. HTML基础汇总

    一.HTML的概述(了解) a.html是什么 : hypertext markup language 超文本标记语言           超文本:音频,视频,图片称为超文本..           ...