burp插件入门

0x01 java项目

学习了一下burp插件的入门, 参考:

https://support.portswigger.net/customer/portal/questions/17285859-how-to-deploy-an-extension

首先第一个坑是那堆接口, 自己之前没怎么写过java,所以这次,也没写...

找到官方提供的接口下载下来:

https://github.com/PortSwigger/burp-extender-api

然后新建一个java项目,名字随便起一个,然后新建一个叫burp的package把所有接口都拷进去,参考:

https://portswigger.net/burp/extender/writing-your-first-burp-suite-extension

然后我直接在burp包下创建了一个BurpExtender.class的类,用的就是最简单的那个官方例子的代码:

https://github.com/PortSwigger/example-hello-world/blob/master/java/BurpExtender.java

所以,一行代码没写:>

0x02 导成jar包

这个也一顿折腾,我使用的是intellij,首先打开file下的Project Structure,点开加号,Artifacts->JAR->From modules ...

屏幕快照 2019-12-28 下午5.01.40

这里的Main Class我任性地随便选了一个main,然后下边META-INF/MANIFEST.MF也生成路径了,(虽然还不是很懂

屏幕快照 2019-12-28 下午5.04.37

然后选择build里的Build Artifacts->Build一般就生成一个out文件夹有一个工程同名jar包,导入burpSuite即可。(注意是Build Artifacts)

屏幕快照 2019-12-28 下午5.08.17

对了,接口文件好像可以直接从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
package burp;

import java.io.PrintWriter;

public class BurpExtender implements IBurpExtender
{
//
// implement IBurpExtender
//

@Override
public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks)
{
// set our extension name
callbacks.setExtensionName("Hello world extension");

// obtain our output and error streams
PrintWriter stdout = new PrintWriter(callbacks.getStdout(), true);
PrintWriter stderr = new PrintWriter(callbacks.getStderr(), true);

// write a message to our output stream
stdout.println("Hello output");

// write a message to our error stream
stderr.println("Hello errors");

// write a message to the Burp alerts tab
callbacks.issueAlert("Hello alerts");

// throw an exception that will appear in our error stream
throw new RuntimeException("Hello exceptions");
}
}

JMenu

拿来一个基本代码:

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
package burp;


import javax.swing.*;
import java.util.ArrayList;
import java.util.List;

public class BurpExtender implements IBurpExtender, IContextMenuFactory
{
//
// implement IBurpExtender
//

@Override
public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks)
{
// set our extension name
callbacks.setExtensionName("JMenu Test");
callbacks.registerContextMenuFactory(this);
}

@Override
public List<JMenuItem> createMenuItems(IContextMenuInvocation invocation) {
List<JMenuItem> jMenuItemList = new ArrayList<>(); // create JMenuItemList
JMenu jMenu = new JMenu("My JMenus"); // title
JMenuItem jMenuItem1 = new JMenuItem("My JMenu 1"); // 第一个选项
JMenuItem jMenuItem2 = new JMenuItem("My JMenu 2"); // 第二个选项
jMenu.add(jMenuItem1);
jMenu.add(jMenuItem2);
jMenuItemList.add(jMenu);
return jMenuItemList;
}
}

截屏2020-10-02 下午5.16.57

java swing编程,创造一个JMenu。

JFrame

在其中一个选项中添加单击事件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Override
public List<JMenuItem> createMenuItems(IContextMenuInvocation invocation) {
List<JMenuItem> menu = new ArrayList<JMenuItem>();
JMenu main = new JMenu("JMenu Test");
JMenuItem item = new JMenuItem("My JMenu 1");
main.add(item);
menu.add(main);

item.addActionListener(e -> {
JFrame frame = new JFrame("JFrame Text"); //创建JFrame
JTextArea _text = new JTextArea("Hello World"); //创建JTextArea
_text.setEditable(false);

frame.add(_text); //插入文本
frame.setSize(600, 600);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
});
return menu;
}

截屏2020-10-02 下午5.47.54