BurpSuite插件编写[入门篇]

0x00 前言

burp作为web测试中最常用的工具,作为使用者更应该掌握下Extender的写法。这段时间搜集了一下关于插件的写法,发现基于Java的写法好少,基本上都是Python的教程,虽说大体上是一个写法,但是还是想总结总结下。

0x01 插件的调用原理

1、插件的总入口是BurpExtender公开类,也就类似普通咱们写的mian函数,而该BurpExtender类是必须继承 IBurpExtender接口的。

2、当继承IBurpExtender接口后,会强制要求重写registerExtenderCallbacks()函数,而该函数的作用就是注册回调,当自己的写的插件需要哪些API支持的时候,都需要在该函数中进行注册,这样burp在执行的时候,会读取自己写的插件代码是否有回调注册,如果有就进行执行相应代码。

3、基本逻辑流程如下:

BurpExtender→registerExtenderCallbacks()→IBurpExtenderCallback.registerAPI类名称(this)→执行注册函数代码

0x02 API接口介绍

Burp Extender的API其实可以理解为Burp上大部分功能的对外接口,如 IHttpListener 接口,当继承该API接口并进行回调注册后,Burp工具发出的所有请求包和响应包都会传给HTTP侦听器一份,我就可以对HTTP侦听器获得的http流量进行自定义分析或者修改处理。

1. WooYun知识库:

BurpSuite插件开发指南之 API 上篇

BurpSuite插件开发指南之 API 下篇

2. 官方API接口类大全:

All Classes

3. BurpApi中英文CHM版:

链接: https://pan.baidu.com/s/1qu9uprF-cJxCdyrMj7OsYA 提取码: fqe1

4. 常用的API接口类:

IBurpExtender:所有扩展都必须实现此接口。实现必须在burp包中称为BurpExtender,必须将其声明为public,并且必须提供默认(公共,无参数)构造函数。

1
2
3
4
5
void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks)
/* 加载扩展时,将调用此方法。它注册该IBurpExtenderCallbacks接口的实例 ,提供可由扩展调用以执行各种动作的方法
Parameters:
callbacks - An IBurpExtenderCallbacks object.
*/

IBurpExtenderCallbacks:Burp Suite使用此接口将一组回调方法传递给扩展,扩展可以使用这些回调方法在Burp中执行各种操作。加载扩展时,Burp调用其 registerExtenderCallbacks()方法并传递IBurpExtenderCallbacks接口的实例 。然后,扩展可以根据需要调用此接口的方法,以扩展Burp的功能。

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
void	addScanIssue(IScanIssue issue)
// 此方法用于注册新的扫描仪问题。

void addSuiteTab(ITab tab)
// 此方法用于将自定义选项卡添加到Burp Suite主窗口。

void addToSiteMap(IHttpRequestResponse item)
// 此方法可用于将具有指定请求/响应详细信息的项目添加到Burp的站点地图。

IHttpRequestResponseWithMarkers applyMarkers(IHttpRequestResponse httpRequestResponse, java.util.List<int[]> requestMarkers, java.util.List<int[]> responseMarkers)
// 此方法用于将标记应用于与某些特定目的相关的消息偏移量的HTTP请求或响应。

IBurpCollaboratorClientContext createBurpCollaboratorClientContext()
// 此方法用于创建新的Burp Collaborator客户端上下文,该上下文可用于生成Burp Collaborator有效负载,并轮询Collaborator服务器以查找由于使用这些有效负载而导致的任何网络交互。

IMessageEditor createMessageEditor(IMessageEditorController controller, boolean editable)
// 此方法用于创建Burp的HTTP消息编辑器的新实例,以使其在其自己的UI中使用。

ITextEditor createTextEditor()
// 此方法用于创建Burp的纯文本编辑器的新实例,以供扩展程序在其自己的UI中使用。

void customizeUiComponent(java.awt.Component component)
// 此方法用于根据Burp的UI样式自定义UI组件,包括字体大小,颜色,表行间距等。

IScanQueueItem doActiveScan(java.lang.String host, int port, boolean useHttps, byte[] request)
// 此方法可用于将HTTP请求发送到Burp Scanner工具以执行活动的漏洞扫描。

IScanQueueItem doActiveScan(java.lang.String host, int port, boolean useHttps, byte[] request, java.util.List<int[]> insertionPointOffsets)
// 此方法可用于根据要扫描的插入点的自定义列表,将HTTP请求发送到Burp Scanner工具以执行活动漏洞扫描。

void doPassiveScan(java.lang.String host, int port, boolean useHttps, byte[] request, byte[] response)
// 此方法可用于将HTTP请求发送到Burp Scanner工具以执行被动漏洞扫描。

void excludeFromScope(java.net.URL url)
// 此方法可用于从Suite范围范围中排除指定的URL。

void exitSuite(boolean promptUser)
// 此方法可用于以编程方式关闭Burp,并向用户提供可选提示。

void generateScanReport(java.lang.String format, IScanIssue[] issues, java.io.File file)
// 此方法用于为指定的扫描程序问题生成报告。

java.lang.String[] getBurpVersion()
// 此方法检索有关正在运行扩展的Burp版本的信息。

java.lang.String[] getCommandLineArguments()
// 此方法返回启动时传递给Burp的命令行参数。

java.util.List<IContextMenuFactory> getContextMenuFactories()
// 此方法用于检索扩展名注册的上下文菜单工厂。

java.util.List<ICookie> getCookieJarContents()
// 此方法用于检索Burp会话处理cookie jar的内容。

java.lang.String getExtensionFilename()
// 此方法检索从中加载当前扩展名的文件的绝对路径名。

java.util.List<IExtensionStateListener> getExtensionStateListeners()
// 此方法用于检索扩展注册的扩展状态侦听器。

java.lang.String[] getHeaders(byte[] message)
// 不推荐使用。
// 使用IExtensionHelpers.analyzeRequest()或 IExtensionHelpers.analyzeResponse()代替。

IExtensionHelpers getHelpers()
// 此方法用于获取IExtensionHelpers对象,扩展可以使用该对象执行许多有用的任务。

java.util.List<IHttpListener> getHttpListeners()
// 此方法用于检索扩展注册的HTTP侦听器。

java.util.List<IIntruderPayloadGeneratorFactory> getIntruderPayloadGeneratorFactories()
// 此方法用于检索扩展注册的Intruder有效负载生成器工厂。

java.util.List<IIntruderPayloadProcessor> getIntruderPayloadProcessors()
// 此方法用于检索扩展注册的Intruder有效负载处理器。

java.util.List<IMessageEditorTabFactory> getMessageEditorTabFactories()
// 此方法用于检索扩展注册的消息编辑器选项卡工厂。

java.lang.String[][] getParameters(byte[] request)
// 不推荐使用。
// 使用IExtensionHelpers.analyzeRequest()代替。

IHttpRequestResponse[] getProxyHistory()
// 此方法返回代理历史记录中所有项目的详细信息。

java.util.List<IProxyListener> getProxyListeners()
// 此方法用于检索扩展注册的代理侦听器。

IScanIssue[] getScanIssues(java.lang.String urlPrefix)
// 对于与指定文字前缀匹配的URL,此方法返回所有当前的扫描问题。

java.util.List<IScannerCheck> getScannerChecks()
// 此方法用于检索扩展名注册的扫描程序检查。

java.util.List<IScannerInsertionPointProvider> getScannerInsertionPointProviders()
// 此方法用于检索扩展名注册的扫描仪插入点提供程序。

java.util.List<IScannerListener> getScannerListeners()
// 此方法用于检索扩展注册的Scanner侦听器。

java.util.List<IScopeChangeListener> getScopeChangeListeners()
// 此方法用于检索扩展注册的范围更改侦听器。

java.util.List<ISessionHandlingAction> getSessionHandlingActions()
// 此方法用于检索扩展注册的会话处理操作。

IHttpRequestResponse[] getSiteMap(java.lang.String urlPrefix)
// 此方法返回站点地图中项目的详细信息。

java.io.OutputStream getStderr()
// 此方法用于获取当前扩展的标准错误流。

java.io.OutputStream getStdout()
// 此方法用于获取当前扩展的标准输出流。

java.lang.String getToolName(int toolFlag)
// 此方法用于获取由提供的工具标志标识的Burp工具的描述性名称。

void includeInScope(java.net.URL url)
// 此方法可用于在Suite范围范围内包括指定的URL。

boolean isExtensionBapp()
// 此方法确定当前扩展是否已作为BApp(BApp商店中的Burp App)加载。

boolean isInScope(java.net.URL url)
// 此方法可用于查询指定的URL是否在当前Suite范围内。

void issueAlert(java.lang.String message)
// 此方法可用于在Burp Suite警报选项卡中显示指定的消息。

void loadConfig(java.util.Map<java.lang.String,java.lang.String> config)
// 不推荐使用。
// 使用loadConfigFromJson()代替。

void loadConfigFromJson(java.lang.String config)
// 此方法使Burp从提供的JSON字符串中加载新的项目级配置。

java.lang.String loadExtensionSetting(java.lang.String name)
// 此方法用于加载使用该方法保存的扩展的配置设置saveExtensionSetting()。

IHttpRequestResponse makeHttpRequest(IHttpService httpService, byte[] request)
// 此方法可用于发出HTTP请求并检索其响应。

byte[] makeHttpRequest(java.lang.String host, int port, boolean useHttps, byte[] request)
// 此方法可用于发出HTTP请求并检索其响应。

void printError(java.lang.String error)
// 此方法将输出行输出到当前扩展程序的标准错误流。

void printOutput(java.lang.String output)
// 此方法将输出行打印到当前扩展的标准输出流。

void registerContextMenuFactory(IContextMenuFactory factory)
// 此方法用于为自定义上下文菜单项注册工厂。

void registerExtensionStateListener(IExtensionStateListener listener)
// 此方法用于注册一个侦听器,该侦听器将收到有关扩展状态更改的通知。

void registerHttpListener(IHttpListener listener)
// 此方法用于注册一个侦听器,该侦听器将被通知任何Burp工具发出的请求和响应。

void registerIntruderPayloadGeneratorFactory(IIntruderPayloadGeneratorFactory factory)
// 此方法用于为入侵者有效载荷注册工厂。

void registerIntruderPayloadProcessor(IIntruderPayloadProcessor processor)
// 此方法用于注册自定义入侵者有效负载处理器。

void registerMenuItem(java.lang.String menuItemCaption, IMenuItemHandler menuItemHandler)
// 不推荐使用。
// 使用registerContextMenuFactory()代替。

void registerMessageEditorTabFactory(IMessageEditorTabFactory factory)
// 此方法用于为自定义消息编辑器选项卡注册工厂。

void registerProxyListener(IProxyListener listener)
// 此方法用于注册一个侦听器,该侦听器将收到有关代理工具正在处理的请求和响应的通知。

void registerScannerCheck(IScannerCheck check)
// 此方法用于注册自定义扫描程序检查。

void registerScannerInsertionPointProvider(IScannerInsertionPointProvider provider)
// 此方法用于注册扫描仪插入点的提供者。

void registerScannerListener(IScannerListener listener)
// 此方法用于注册一个侦听器,该侦听器将被通知由扫描程序工具报告的新问题。

void registerScopeChangeListener(IScopeChangeListener listener)
// 此方法用于注册一个侦听器,该侦听器将在Burp套件范围的目标范围更改时得到通知。

void registerSessionHandlingAction(ISessionHandlingAction action)
// 此方法用于注册自定义会话处理操作。

void removeContextMenuFactory(IContextMenuFactory factory)
// 此方法用于删除扩展名已注册的上下文菜单工厂。

void removeExtensionStateListener(IExtensionStateListener listener)
// 此方法用于删除已由扩展注册的扩展状态侦听器。

void removeHttpListener(IHttpListener listener)
// 此方法用于删除扩展已注册的HTTP侦听器。

void removeIntruderPayloadGeneratorFactory(IIntruderPayloadGeneratorFactory factory)
// 此方法用于删除扩展名已注册的Intruder有效负载生成器工厂。

void removeIntruderPayloadProcessor(IIntruderPayloadProcessor processor)
// 此方法用于删除扩展名已注册的Intruder有效负载处理器。

void removeMessageEditorTabFactory(IMessageEditorTabFactory factory)
// 此方法用于删除扩展名已注册的消息编辑器选项卡工厂。

void removeProxyListener(IProxyListener listener)
// 此方法用于删除扩展名已注册的代理侦听器。

void removeScannerCheck(IScannerCheck check)
// 此方法用于删除扩展名已注册的扫描程序检查。

void removeScannerInsertionPointProvider(IScannerInsertionPointProvider provider)
// 此方法用于删除扩展名已注册的扫描仪插入点提供程序。

void removeScannerListener(IScannerListener listener)
// 此方法用于删除扩展名已注册的Scanner侦听器。

void removeScopeChangeListener(IScopeChangeListener listener)
// 此方法用于删除扩展已注册的范围更改侦听器。

void removeSessionHandlingAction(ISessionHandlingAction action)
// 此方法用于删除扩展已注册的会话处理操作。

void removeSuiteTab(ITab tab)
// 此方法用于从Burp Suite主窗口中删除先前添加的选项卡。

void restoreState(java.io.File file)
// 不推荐使用。
// 状态文件已替换为Burp项目文件。

IHttpRequestResponsePersisted saveBuffersToTempFiles(IHttpRequestResponse httpRequestResponse)
// 此方法用于将IHttpRequestResponse对象的请求和响应保存 到临时文件,以便它们不再保存在内存中。

java.util.Map<java.lang.String,java.lang.String> saveConfig()
// 不推荐使用。
// 使用saveConfigAsJson()代替。

java.lang.String saveConfigAsJson(java.lang.String... configPaths)
// 此方法使Burp以JSON格式保存其当前的项目级别配置。

void saveExtensionSetting(java.lang.String name, java.lang.String value)
// 此方法用于以持久的方式保存扩展的配置设置,以免重新加载扩展和Burp Suite。

void saveState(java.io.File file)
// 不推荐使用。
// 状态文件已替换为Burp项目文件。

ITempFile saveToTempFile(byte[] buffer)
// 此方法用于在磁盘上创建一个包含所提供数据的临时文件。

void sendToComparer(byte[] data)
// 此方法可用于将数据发送到比较器工具。

void sendToIntruder(java.lang.String host, int port, boolean useHttps, byte[] request)
// 此方法可用于向Burp Intruder工具发送HTTP请求。

void sendToIntruder(java.lang.String host, int port, boolean useHttps, byte[] request, java.util.List<int[]> payloadPositionOffsets)
// 此方法可用于向Burp Intruder工具发送HTTP请求。

void sendToRepeater(java.lang.String host, int port, boolean useHttps, byte[] request, java.lang.String tabCaption)
// 此方法可用于将HTTP请求发送到Burp Repeater工具。

void sendToSpider(java.net.URL url)
// 此方法可用于将种子URL发送到Burp Spider工具。

void setExtensionName(java.lang.String name)
// 此方法用于设置当前扩展名的显示名称,该名称将显示在扩展器工具的用户界面中。

void setProxyInterceptionEnabled(boolean enabled)
// 此方法设置Burp代理的主侦听模式。

void unloadExtension()
// 此方法用于从Burp Suite卸载扩展。

void updateCookieJar(ICookie cookie)
// 此方法用于更新Burp会话处理cookie jar的内容。

IExtensionHelpers:此接口包含许多帮助程序方法,扩展程序可用于辅助Burp扩展程序出现的各种常见任务。扩展可以调用IBurpExtenderCallbacks.getHelpers以获得该接口的实例。

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
byte[]	addParameter(byte[] request, IParameter parameter)
// 此方法将新参数添加到HTTP请求,并在适当时更新Content-Length标头。

IRequestInfo analyzeRequest(byte[] request)
// 此方法可用于分析HTTP请求,并获取有关该请求的各种关键详细信息。

IRequestInfo analyzeRequest(IHttpRequestResponse request)
// 此方法可用于分析HTTP请求,并获取有关该请求的各种关键详细信息。

IRequestInfo analyzeRequest(IHttpService httpService, byte[] request)
// 此方法可用于分析HTTP请求,并获取有关该请求的各种关键详细信息。

IResponseInfo analyzeResponse(byte[] response)
// 此方法可用于分析HTTP响应,并获取有关它的各种关键细节。

IResponseKeywords analyzeResponseKeywords(java.util.List<java.lang.String> keywords, byte[]... responses)
// 此方法分析一个或多个响应以标识指定关键字的出现次数,并返回IResponseKeywords可以查询的 对象以获得每个关键字的出现次数的详细信息。

IResponseVariations analyzeResponseVariations(byte[]... responses)
// 此方法分析一个或多个响应以标识许多属性中的变化,并返回IResponseVariations 可以查询以获得变化细节的对象。

byte[] base64Decode(byte[] data)
// 此方法可用于对指定数据进行Base64解码。

byte[] base64Decode(java.lang.String data)
// 此方法可用于对指定数据进行Base64解码。

java.lang.String base64Encode(byte[] data)
// 此方法可用于对指定数据进行Base64编码。

java.lang.String base64Encode(java.lang.String data)
// 此方法可用于对指定数据进行Base64编码。

byte[] buildHttpMessage(java.util.List<java.lang.String> headers, byte[] body)
// 此方法构建包含指定的标头和消息正文的HTTP消息。

byte[] buildHttpRequest(java.net.URL url)
// 此方法创建对指定URL的GET请求。

IHttpService buildHttpService(java.lang.String host, int port, boolean useHttps)
// 此方法IHttpService根据提供的详细信息构造一个对象。

IHttpService buildHttpService(java.lang.String host, int port, java.lang.String protocol)
// 此方法IHttpService根据提供的详细信息构造一个对象。

IParameter buildParameter(java.lang.String name, java.lang.String value, byte type)
// 此方法IParameter根据提供的详细信息构造一个对象。

java.lang.String bytesToString(byte[] data)
// 此方法可用于将数据从字节数组转换为String形式。

IParameter getRequestParameter(byte[] request, java.lang.String parameterName)
// 此方法可用于检索HTTP请求中指定参数的详细信息。

int indexOf(byte[] data, byte[] pattern, boolean caseSensitive, int from, int to)
// 此方法在一条数据中搜索指定模式的首次出现。

IScannerInsertionPoint makeScannerInsertionPoint(java.lang.String insertionPointName, byte[] baseRequest, int from, int to)
// 此方法IScannerInsertionPoint根据提供的详细信息构造一个对象。

byte[] removeParameter(byte[] request, IParameter parameter)
// 此方法从HTTP请求中删除参数,并在适当时更新Content-Length标头。

byte[] stringToBytes(java.lang.String data)
// 此方法可用于将数据从字符串形式转换为字节数组。

byte[] toggleRequestMethod(byte[] request)
// 此方法可用于在GET和POST之间切换请求的方法。

byte[] updateParameter(byte[] request, IParameter parameter)
// 此方法更新HTTP请求中参数的值,并且在适当的情况下更新Content-Length标头。

byte[] urlDecode(byte[] data)
// 此方法可用于对指定数据进行URL解码。

java.lang.String urlDecode(java.lang.String data)
// 此方法可用于对指定数据进行URL解码。

byte[] urlEncode(byte[] data)
// 此方法可用于对指定数据进行URL编码。

java.lang.String urlEncode(java.lang.String data)
// 此方法可用于对指定数据进行URL编码。

PrintWriter:在burp中的输入输出显示,需要使用到 PrintWriter 类,可以通过该类即可在burp中输入输出自己想要的内容。

1
2
3
4
5
6
import java.io.PrintWriter;

PrintWriter stdout = new PrintWriter(callbacks.getStdout(),true);
PrintWriter stderr = new PrintWriter(callbacks.getStderr(),true);
stdout.println("Hello output");
stderr.println("Hello errors");

IHttpListener:扩展可以实现此接口,然后调用 IBurpExtenderCallbacks.registerHttpListener()以注册HTTP侦听器。任何Burp工具发出的请求和响应都将通知给侦听器。扩展可以通过注册HTTP侦听器来对这些消息执行自定义分析或修改。

1
2
3
4
5
6
void	processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo)
// 当即将发出HTTP请求时,以及已接收到HTTP响应时,将调用此方法。
// 参数:
// toolFlag-指示发出请求的Burp工具的标志。打p工具标志在IBurpExtenderCallbacks界面中定义 。(不同的toolFlag代表了不同的burp组件 https://portswigger.net/burp/extender/api/constant-values.html#burp.IBurpExtenderCallbacks)
// messageIsRequest -标记是否正在为请求或响应调用该方法。
// messageInfo-要处理的请求/响应的详细信息。扩展程序可以在此对象上调用setter方法来更新当前消息,从而修改Burp的行为。

IHttpRequestResponse:此接口用于检索和更新有关HTTP消息的详细信息。 注意: setter方法通常只能在处理邮件之前使用,而不能在只读上下文中使用。与响应详细信息有关的getter方法只能在发出请求之后使用。

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
java.lang.String	getComment()
// 如果适用,此方法用于检索该项目的用户注释注释。

java.lang.String getHighlight()
// 如果适用,此方法用于检索该项目的用户注释突出显示。

IHttpService getHttpService()
// 此方法用于检索此请求/响应的HTTP服务。

byte[] getRequest()
// 此方法用于检索请求消息。

byte[] getResponse()
// 此方法用于检索响应消息。

void setComment(java.lang.String comment)
// 此方法用于更新此项的用户注释注释。

void setHighlight(java.lang.String color)
// 此方法用于更新该项目的用户注释突出显示。

void setHttpService(IHttpService httpService)
// 此方法用于为此请求/响应更新HTTP服务。

void setRequest(byte[] message)
// 此方法用于更新请求消息。

void setResponse(byte[] message)
// 此方法用于更新响应消息。

IProxyListener:扩展可以实现此接口,然后调用 IBurpExtenderCallbacks.registerProxyListener()以注册代理侦听器。代理工具正在处理的请求和响应将通知给侦听器。扩展可以通过注册代理侦听器来执行对这些消息的自定义分析或修改,并控制UI内消息的拦截。

1
2
3
4
5
void	processProxyMessage(boolean messageIsRequest, IInterceptedProxyMessage message)
// 当代理正在处理HTTP消息时,将调用此方法。
// 参数:
// messageIsRequest -指示HTTP消息是请求还是响应。
// message- IInterceptedProxyMessage扩展程序可用于查询和更新消息详细信息,并控制是否应拦截消息并将其显示给用户以进行手动查看或修改的对象。

0x03 API接口功能分类

插件入口和帮助接口类:IBurpExtender、IBurpExtenderCallbacks、 IExtensionHelpers、IExtensionStateListener

IExtensionHelpers、IExtensionStateListener IBurpExtender接口类是Burp插件的入口,所有Burp的插件均需要实现此接口,并且 类命名为BurpExtender。IBurpExtenderCallbacks接口类是IBurpExtender接口的实 现类与Burp其他各个组件(Scanner、Intruder、Spider……)、各个通信对象 (HttpRequestResponse、HttpService、SessionHandlingAction)之间的连接。 IExtensionHelpers、IExtensionStateListener这两个接口类是插件的帮助和管理操作的接口定义。

UI相关接口类:IContextMenuFactory、IContextMenuInvocation、ITab、ITextEditor、 IMessageEditor、IMenuItemHandler 这类接口类主要是定义Burp插件的UI显示和动作的处理事件,主要是软件交互中使用。

Burp工具组件接口类:IInterceptedProxyMessage、IIntruderAttack、 IIntruderPayloadGenerator、IIntruderPayloadGeneratorFactory、 IIntruderPayloadProcessor、IProxyListener、IScanIssue、IScannerCheck、 IScannerInsertionPoint、IScannerInsertionPointProvider、IScannerListener、IScanQueueItem、IScopeChangeListener 这些接口类的功能非常好理解,Burp在接口定义的命名中使用了的见名知意的规 范,看到接口类的名称,基本就能猜测出来这个接口是适用于哪个工具组件。

HTTP消息处理接口类:ICookie、IHttpListener、IHttpRequestResponse、 IHttpRequestResponsePersisted、IHttpRequestResponseWithMarkers、IHttpService、 IRequestInfo、IParameter、IResponseInfo 这些接口的定义主要是围绕HTTP消息通信过程中涉及的Cookie、Request、 Response、Parameter几大消息对象,通过对通信消息头、消息体的数据处理,来达到控制HTTP消息传递的目的。

0x04 总结

Burp的插件编写其实理清楚了整个框架编写流程,再好好熟悉下内置的这些API,基本上就可以写一些自己想要的小功能插件了。

0x05 参考文章

[ 1 ] http://code2sec.com/burpsuitecha-jian-kai-fa-tips.html

[ 2 ] https://www.freebuf.com/column/171237.html

[ 3 ] https://portswigger.net/burp/extender/api/allclasses-noframe.html

[ 4 ] https://www.cnblogs.com/ermei/p/6689006.html


BurpSuite插件编写[入门篇]
https://sh1yan.top/2020/03/02/Writing-the-burpseuite-plug-in-beginner/
作者
shiyan
发布于
2020年3月2日
许可协议