园长 · 2014/11/20 15:08

0x00 简介


BurpSuite神器这些年非常的受大家欢迎,在国庆期间解了下Burp相关开发并写了这篇笔记。希望和大家分享一下JavaSwing和Burp插件相关开发。第一节仅简单的了解下API相关,后面会带着大家利用Netbeans开发我们自己的扩展以及各种有趣的小工具。

0x01 怎么学?


第一个问题是我们应该怎么去写自己的Burp扩展?我们可以找一些现有的扩展学习下,或者参阅官方文档或者手册,其次才是google一下是否有相关的教程、文章进行学习。

google搜索:burp suite api,找到官方的API相关说明。

  1. http://portswigger.net/burp/extender/

  2. http://blog.portswigger.net/2012/12/draft-new-extensibility-api.html

You can:

  1. 执行和修改 HTTP 请求和响应

  2. 访问运行时的数据,比如:代理日志、目标站map和扫描问题

  3. 启动自己的action,如扫描和网站爬行

  4. 自定义扫描检测和注册扫描问题

  5. 提供自定义Intruder payloads和payload处理

  6. 查询和更新Suite-wide的目标作用域

  7. 查询和更新session处理cookie jar

  8. 实现自定义session处理action

  9. 添加自定义的标签(tabs)和上下文菜单项到Burp 用户界面

  10. 可使用自己的界面添加Burp的HTTP消息编辑器

  11. 自定义Burp的HTTP消息编辑器处理Burp不支持的数据格式

  12. 获取headers, parameters, cookies分析HTTP请求和响应

  13. 读取或修改Burp配置设置

  14. 保存或恢复Burp状态

0x02 学习API


API下载地址:http://portswigger.net/burp/extender/api/burp_extender_api.zip

下载API后新建Eclipse项目导入API文件:

不急于动手写代码,先看下官方的Demo:

下载第一个HelloWorld解压它并复制BurpExtender.java到我们的项目当中:

BurpExtender.java:

BurpExtender.java实现了IBurpExtender接口,而IBurpExtender仅定义了一个方法:registerExtenderCallbacks(注册扩展回调方法):

#!java
public interface IBurpExtender{
/**
* 这个方法将在扩展加载的时候.他将会注册一个
*<code>IBurpExtenderCallbacks</code> 接口实例,可通过扩展
* 实现各种调用
[email protected]
*<code>IBurpExtenderCallbacks</code>对象.
*/
void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks);
}
复制代码

在确认代码无任何错误后选中项目并导出为jar,建议安装一个打jar包的插件:Build Fat Jar这样你就可以非常方便的把整个项目打成一个jar包了.

如果你和我一样从来都没有使用过BurpSuite,那么不妨先打开它把玩几分钟。在extender(扩展)标签当中看到了Burp的插件加载界面。

Add我们刚打好的jar包,加载到Burp扩展中去。

这个时候可以看到我们的插件已经成功运行了,在LoadBurpExtension中的output标签已经看到了Hello output(stdout.println("Hello output");)

Errors标签也输出了Hello errors()stderr.println("Hello errors");

对应的错误信息(throw new RuntimeException("Hello exceptions");)。

插件名(callbacks.setExtensionName("Hello world extension");),

以及提醒面板的信息Hello alerts(callbacks.issueAlert("Hello alerts");)。

获取到Burp混淆后的扩展加载类(自定义类加载器):

如你所想,java加载外部扩展利用了URLClassLoader load外部的jar(对这感兴趣的朋友可以看下p2j上的相关文章:http://p2j.cn/?s=URLClassLoader&submit=Search)。

第一个HelloWorld很容易就搞定了,第二个Event listeners的Demo。所谓事件监听即你可以通过Burp的IBurpExtenderCallbacks去注册自己的监听方法。Demo只提供了四种事件(包含HTTP监听、代理、Scanner、状态监听),所有的未列举的事件直接用Eclipse的快捷键提示就出来了:

比如想要添加一个IScopeChangeListener很简单,让当前类实现IScopeChangeListener接口,注册ScopeChange事件(callbacks.registerScopeChangeListener(this);)重写其scopeChanged方法即可。

设置本地浏览器代理后再次访问任意网站后回到扩展标签,选中我们的扩展程序可以看到监听中的请求已输出。

0x03 HelloWorld


在编写扩展的时候一定要注意,你的包里面务必包含一个BurpExtender类可以有多个类实现IBurpExtender。 创建自己的Panel并加到Burp主窗体,AppPanel是我自己写的一个应用面板。我们可以通过实现ITab 重写getTabCaption和getUiComponent方法(当然实现IBurpExtender接口是必须的)将我们自己的ui嵌套到Burp当中。getTabCaption即获取获取标题,getUiComponent获取组件这里需要给Burp返回你封装的组件对象。

我们可以先写好JPanel再嵌入到Burp当中,这里提供了一个简单的ApplicationPanel小Demo:http://p2j.cn/?p=1512

#!java
package burp; import java.awt.Component; import javax.swing.JPanel;
import javax.swing.SwingUtilities; public class BurpExtender implements IBurpExtender, ITab { private JPanel jPanel1; @Override
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks) {
//设置扩展名
callbacks.setExtensionName("应用中心");
//创建我们的窗体
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//我们的主窗体
jPanel1 = new AppPanel();
//自定义我们的组件
callbacks.customizeUiComponent(jPanel1);
//添加标签到Burp主窗体
callbacks.addSuiteTab(BurpExtender.this);
}
});
} @Override
public String getTabCaption() {
return "应用中心";
} @Override
public Component getUiComponent() {
return jPanel1;
} }
复制代码

效果图:

BurpSuite 扩展开发[1]-API与HelloWold的更多相关文章

  1. Spark RDD API扩展开发

    原文链接: Spark RDD API扩展开发(1) Spark RDD API扩展开发(2):自定义RDD 我们都知道,Apache Spark内置了很多操作数据的API.但是很多时候,当我们在现实 ...

  2. 【转发】NPAPI学习(Firefox和Chrome扩展开发 )

    NPAPI学习(Firefox和Chrome扩展开发 ) 2011-11-08 14:41:02 by [6yang], 1172 visits, 收藏 | 返回 Firefox和Chrome扩展开发 ...

  3. Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  4. PHP扩展开发相关总结

    1.线程安全宏定义 在TSRM/TSRM.h文件中有如下定义 #define TSRMLS_FETCH() void ***tsrm_ls = (void ***) ts_resource_ex(0, ...

  5. Chrome扩展开发(Gmail附件管理助手)系列之〇——概述

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  6. Chrome扩展开发之三——Chrome扩展中的数据本地存储和下载

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  7. Chrome扩展开发之四——核心功能的实现思路

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  8. firefox 扩展开发笔记(三):高级ui交互编程

    firefox 扩展开发笔记(三):高级ui交互编程 前言 前两篇链接 1:firefox 扩展开发笔记(一):jpm 使用实践以及调试 2:firefox 扩展开发笔记(二):进阶开发之移动设备模拟 ...

  9. flask开发restful api系列(8)-再谈项目结构

    上一章,我们讲到,怎么用蓝图建造一个好的项目,今天我们继续深入.上一章中,我们所有的接口都写在view.py中,如果几十个,还稍微好管理一点,假如上百个,上千个,怎么找?所有接口堆在一起就显得杂乱无章 ...

随机推荐

  1. RedHat 6.5 上将系统语言修改为中文

    RedHat 6.5 上将系统语言修改为中文 1.打开终端,输入su -,键入密码,获取超级用户权限. 2.输入cd /etc/sysconfig,进入设置目录. 3.输入vi i18n,进入到配置文 ...

  2. find的基本查询命令《一》

    一. find的基本查询命令 find命令最常用的是查找某个文件,如: find ./ -name "abc.txt" 则会在当前目录及子目录下查找abc.txt文件 更常用的是查 ...

  3. Node教程——API接口开发(MangoDB+Express)

    一.大纲 大纲: 关于架构, 首先我们的有一个app.js这个就是根路由起点,用来最初的打入口 它的功能有: 1.1 引入模块创建基础的网站服务器, 1.2 导入bodyPasser,过滤还有处理我们 ...

  4. mappedBy和JoinColumn,onetomany。

    无论是onetomany,还是manytoone.都要设置级联关系(cascade),否则不会储存关联的数据. @Entity public class Clazzss { @Id @Generate ...

  5. G++编译链接的那些事

    语言 CPP 前言   虽然 VSCodeC++ 编辑器非常受大家的欢迎,无论是大佬还是小白都说对其爱不释手...   我...用了一段时间后发现实在是麻烦,配置往往花费我大量时间.可以说真的是吃力不 ...

  6. commonJS、AMD和CMD之间的区别

    JS中的模块规范(CommonJS,AMD,CMD),如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已. 现在就看看吧, ...

  7. 用网线连接Windows和Linux台式机,并实现Linux共享Windows的WiFi网络

    前言 由于工作需要,需要利用网线将自己的笔记本和Linux台式机进行连接,实现Windows可以远程登录Linux机器,并实现Linux共享Windows的WiFi网络. 网上的很多方法可以实现两台机 ...

  8. 重启mysql服务

    重启mysql 启动mysql: 方式一:sudo /etc/init.d/mysql start 方式二:sudo service mysql start 停止mysql: 方式一:sudo /et ...

  9. shiro:加密及密码比对器(三)

    基于[自定义remle(二)]项目增加加密功能 1:数据库t_user表增加一列(盐) 增加字段:salt CREATE TABLE `t_user` ( `id` int(11) NOT NULL ...

  10. 新增记录txt文档

    StringBuilder s = new StringBuilder(); s.Append("[" + dt.Rows[i]["Store"].Conver ...