0x00前言
在使用Burp Suite(以下简称Burp)来开展渗透工作的途中可能需要验证一些脑洞大开的想法,但Burp自带的功能可能无法满足你的需求,于是你迫切需要一个高度定制化的插件来实现这个功能。经查阅你得知除了Java还可以通过配置扩展环境来运行由Python或者Ruby语言编写的Burp插件。不过关于语言的选择上,此前在也有详细的文章介绍过如何使用Java作为开发语言编写Burp插件。但各家各有所长并不是所有的同学都恰好掌握Java或者掌握多门编程语言,而现今正是Python盛行的天下所以我们决定再以Python语言做为开发基础在做一次分享。
( 注意多图警告!!!)
0x01环境准备
如果你已经安装上了Jython的话推荐你这么做,在Burp Suite中打开Extender -> Option -> Python Enviroment -> Select file 打开Jython的安装目录选择Jython.jar即可。未安装Jython的话按下文操作。
Jython下载地址: https://www.jython.org/download.html
在下载页面选择Jython Standalone 将jython的jar包下载下来备用,打开Burp Suite在Extender中选中Option,可以看到一个Python Environment的配置项,点击Select file 选中下载的jython-standalone-2.7.1.jar文件。
关于加载自定义插件的方式为 Extender -> Extensions -> Brup Extensions -> add (选中插件) -> Loaded 如果编写的插件有语法错误或者运行中发生错误可以在Errors标签中查看,输出内容可以在Output中查看 。
0x02接口介绍
本章节参考互联网公开资料,文章,以及官方接口文档等。给出实现Burp接口的Python代码Demo,由于时间及篇幅有限 不能对每个接口都进行长篇大论并给出相应实用的Demo,大部分Demo仅仅展示了该接口的某些属性以便读者在使用 时能够快速理解上手,避免接口不熟导致浪费大量时间。
●IBurpExtender
所有的插件都必须实现这个接口。实现接口的类名必须得是 BurpExtender,且需要实现以下方法:
/***
*此方法在Burp加载插件后由Burp调用,并传入一个IBurpExtenderCallbacks接口实例。
*/
void registerExtenderCallbacks(IBurpExtenderCallbacks callbaks)
● Demo:
from burp import IBurpExtender
class BurpExtender(IBurpExtender):
# burp在加载插件后该函数将有Burp自动调用,并传入一个IBurpExtenderCallbacks接口实例
def registerExtenderCallbacks(self, callbacks):
print("Hello Burp!")
Run Output:
● IBurpExtenderCallbacks
Burp使用这个接口将一组回调方法传递给插件,插件可以使用这些方法来执行Burp中的各种操作。加载插件时,Burp 调用registerExtenderCallbacks()方法并传递IBurpExtenderCallbacks接口实例。然后插件根据需求调用此接口的方法以 达到扩展Burp功能的需求。由于此接口提供的方法以及字段过多,请同学们移驾到 http://portswigger.net/burp/extende r/api/burp/IBurpExtenderCallbacks.html中查看。
from burp import *
class BurpExtender(IBurpExtender):
def registerExtenderCallbacks(self, callbacks):
#通过IBurpExtenderCallbacks实例可以设置当前插件的显示名称为Flying Pigs
callbacks.setExtensionName('Flying Pigs')
● Run Screenshot
● IContextMenuFactory
用户如果想在Context中添加自定义菜单的话可以通过调用注册方法,IBurpExtenderCallbacks.registerContextMenuFa ctory()之后在重写createMenuItems来达到添加自定义菜单的需求。
/***
*当用户在Burp内的任何地方调用Context菜单时,Burp将调用此方法。
*invocation-实现IContextMenuInvocation接口的实例,该实例可以获得Context调用的详细信息
*通过重写该方法你应该返回一个包含自定义菜单的list,如若不需要菜单应该返回null
*/
java.util.List<javax.swing.JMenuItem> createMenuItems(IContextMenuInvocation invocation)
Demo:
from burp import *
from javax.swing import JMenu
from javax.swing import JMenuItem
class BurpExtender(IBurpExtender, IContextMenuFactory):
def registerExtenderCallbacks(self, callbacks):
callbacks.setExtensionName('Flying Pigs')
#注册context
callbacks.registerContextMenuFactory(self)