园长 · 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. 曹工说Redis源码(5)-- redis server 启动过程解析,以及EventLoop每次处理事件前的前置工作解析(下)

    曹工说Redis源码(5)-- redis server 启动过程解析,eventLoop处理事件前的准备工作(下) 文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis ...

  2. vue中axios的安装使用

    axios是一个基于 promise 的 HTTP 库,在vue中axios是比较常用的网络请求方法. 安装 npm install axios -S 在main.js配置 import axios ...

  3. python3(九) Section

    # list或tuple的部分元素 L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] # -----------------传统方法 print([L[ ...

  4. buuctf misc wp 01

    buuctf misc wp 01 1.金三胖 2.二维码 3.N种方法解决 4.大白 5.基础破解 6.你竟然赶我走 1.金三胖 root@kali:~/下载/CTF题目# unzip 77edf3 ...

  5. Linux C++ 网络编程学习系列(6)——多路IO之epoll高级用法

    poll实现多路IO 源码地址:https://github.com/whuwzp/linuxc/tree/master/epoll_libevent 源码说明: server.cpp: 监听127. ...

  6. EL表达式---自定义函数(转)

    EL表达式---自定义函数(转) 有看到一个有趣的应用了,转下来,呵呵!! 1.定义类MyFunction(注意:方法必须为 public static) package com.tgb.jstl;  ...

  7. Progress笔记

    1. iconv -f gbk -t unicode test.tmp > test.csv 如果出现文件数据补全,需要确认在这之前,output是否已经close,如果output to指定了 ...

  8. Julia基础语法字符和字符串

    1.Julia字符串  2.字符

  9. Delphi Unicode转中文

    function UniCode2GB(S : String):String;Var I: Integer;beginI := Length(S);while I >=4 do begintry ...

  10. stand up meeting 12/29/2015

    part 组员                今日工作              工作耗时/h 明日计划 工作耗时/h    UI 冯晓云 重写popup UI添加笔记功能     6 mergeUI ...