Burp 插件编写示例

望着大河弯弯,终于敢放胆。

简介

本篇介绍一下如何使用 Python 编写 BurpSuite 插件.

Jython 简介

BurpSuite 是使用 Java 编写的, 如果想要是用 Python 编写, 就需要借助于 Jython.

Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。最有趣的事情是Jython不像CPython或其他任何高级语言,它提供了对其实现语言的一切存取。所以Jython不仅给你提供了Python的库,同时也提供了所有的Java类。这使其有一个巨大的资源库。

安装 Jython

这里以 MacOS 为例:

1
brew install jython

安装完成之后, Jython 安装在 /usr/local/Cellar/jython 中, 配置环境变量:

1
export JYTHON_HOME=/usr/local/Cellar/jython/2.7.1/libexec

然后可以在终端中输入 jython:

1
2
3
4
Jython 2.7.1 (default:0df7adb1b397, Jun 30 2017, 19:02:43)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.8.0_144
Type "help", "copyright", "credits" or "license" for more information.
>>>

到这里 Jython 就安装完成了.

加载 Jython

Python 编写的插件文件后缀为 py 文件,不能由 Burp 直接加载,所以在加载前需要先设置 Jython 的路径。

在 Jython 官方下载页面选择 Jython 独立 jar 包。下载好后,按照下图所示设置:

01

加载 Python 插件

02

选择要添加的插件

03

说明: 类型选择 Python; 输出选择控制台, 因为没有 UI.

test.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env python
# -*- coding:utf-8 -*-

# 导入 burp 接口
from burp import IBurpExtender, IProxyListener

# 导入 java 库
from java.net import URL


class BurpExtender(IBurpExtender, IProxyListener):
# 按照 Python 类继承的方式实现相关接口

def registerExtenderCallbacks(self, callbacks):
print 'Hello, Burp!'
pass

def processProxyMessgae(self, messageIsRequest, message):
pass

添加成功

04

编写 Burp GUI 插件

使用 Python 调用 Java 的 swing 图形控件库并绑定相关事件。

guiTest.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/env python
# -*- coding:utf-8 -*-

# 导入 burp 接口
from burp import IBurpExtender, ITab

# 导入 Java 库
from javax.swing import JPanel
from javax.swing import JButton

class BurpExtender(IBurpExtender, ITab):

def registerExtenderCallbacks(self, callbacks):

self._cb = callbacks
self._hp = callbacks.getHelpers()

self._cb.setExtensionName('TestPlugin') # 插件名称
print 'hello, Burp!'

self.mainPanel = JPanel() # 面板

# 初始化一个 JButton 并绑定单击事件
self.testBtn = JButton('Click Me!', actionPerformed=self.testBtn_onClick)

# 面板中添加按钮
self.mainPanel.add(self.testBtn)

self._cb.customizeUiComponent(self.mainPanel)
self._cb.addSuiteTab(self)

def testBtn_onClick(self, event):
# 点击按钮事件
print 'clicked!'

def getTabCaption(self):
# 实现 ITab 接口的 getTabCaption() 方法
return 'TestPlugin'

def getUiComponent(self):
# 获取面板内容
return self.mainPanel

同样的, 添加插件

05

这里我们可以看到多出来一个 TestPlugin 的 Tab.