小目标
继续深入。
先给自己定一个小目标,实现这样一个插件:
“Burpsuite中的包文自动传送到我们的插件里
”

新建项目
我们一起重新新建一个项目。
在 IDEA 新建一个 gradle 项目,SDK选择11
点击下一步,直到完成
接着在 build.gradle 文件中添加Burpsuite插件的依赖(类似于pom.xml)
compile 'net.portswigger.burp.extender:burp-extender-api:2.2'
目前公开的依赖版本可见:
“https://mvnrepository.com/artifact/net.portswigger.burp.extender/burp-extender-api
”
然后点击一下gradle的更新,将依赖下载下来,这样就将我们之前手动复制api文件的操作省掉了。
随便写点代码,尝试编译成jar包
package burp;
public class BurpExtender implements IBurpExtender{
@Override
public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {
callbacks.setExtensionName("sendmyexp");
callbacks.printOutput("load success");
}
}
我们在build目录下的lib文件夹中能清晰的看见,已经打包成功
然后直接导入到burpsuite查看
OK 成功 接着下一步
我们需要给自己的插件构建ui界面
在 build.gradle 文件中添加gui的依赖
“https://mvnrepository.com/artifact/com.intellij/forms_rt/7.0.3
”
implementation group: 'com.intellij', name: 'forms_rt', version: '7.0.3'
新建一个名为ui的包
接着开始画画。先给窗体设置一个名字 Root,等会要用到。
然后给界面添加一个 Jlabel+JTextArea+JButton,布局的话后面再讲,小伙伴先自己研究下。
修改idea的Gui设计器:
然后点击构建,就会自动生成对应的java代码
同时我们修改 BurpExtender的代码,让插件可以在Burpsuite上新增标签页:
package burp;
import burp.ui.SendExpGui;
import java.awt.*;
import java.io.PrintWriter;
public class BurpExtender implements IBurpExtender,ITab{
public PrintWriter stdout;
private SendExpGui sendExpGui;
private IBurpExtenderCallbacks callbacks;
@Override
public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {
this.callbacks = callbacks;
callbacks.setExtensionName("sendmyexp");
sendExpGui = new SendExpGui(this);
callbacks.addSuiteTab(this);
}
@Override
public String getTabCaption() {
return "SendMyExp";
}
@Override
public Component getUiComponent() {
return sendExpGui.$$$getRootComponent$$$();
}
}
然后去实现按 "Clear"按钮清空的功能,直接右键创建侦听器
编写一个清空文本框的行为,代码如下:
@Override
public void actionPerformed(ActionEvent e) {
//清空
TextArea.setText("");
}
接着再去写传递域名的函数
最终全部的BurpExtender代码如下
package burp;
import burp.ui.SendExpGui;
import java.awt.*;
import java.io.PrintWriter;
public class BurpExtender implements IBurpExtender,ITab,IHttpListener{
private IBurpExtenderCallbacks callbacks;
public PrintWriter stdout;
private SendExpGui sendExpGui;
@Override
public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {
this.callbacks = callbacks;
callbacks.setExtensionName("Sendexp");
sendExpGui = new SendExpGui(this);
callbacks.addSuiteTab(this);
callbacks.registerHttpListener(this);
}
@Override
public void processHttpMessage(int toolFlag, boolean messageIsRequest,
IHttpRequestResponse messageInfo) {
// only process requests
if (messageIsRequest)
{
IHttpService httpService = messageInfo.getHttpService();
sendExpGui.appendOutput(httpService.getHost());
}
}
@Override
public String getTabCaption() {
return "SendExp";
}
@Override
public Component getUiComponent() {
return sendExpGui.$$$getRootComponent$$$();
}
}
SendExpGui代码如下:
package burp.ui;
import burp.BurpExtender;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SendExpGui {
private JPanel root;
private JTextArea BurpPrint;
private JButton clearButton;
private final StringBuilder output;
public SendExpGui(BurpExtender burpExtender) {
output = new StringBuilder();
clearButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
BurpPrint.setText("");
}
});
}
public void appendOutput(String message) {
output.append(message);
output.append("\n");
BurpPrint.setText(output.toString());
}
{
// GUI initializer generated by IntelliJ IDEA GUI Designer
// >>> IMPORTANT!! <<<
// DO NOT EDIT OR ADD ANY CODE HERE!
$$$setupUI$$$();
}
/**
* Method generated by IntelliJ IDEA GUI Designer
* >>> IMPORTANT!! <<<
* DO NOT edit this method OR call it in your code!
*
* @noinspection ALL
*/
private void $$$setupUI$$$() {
root = new JPanel();
root.setLayout(new GridBagLayout());
root.setBackground(new Color(-12913370));
root.setEnabled(true);
root.setMaximumSize(new Dimension(2147483647, 2147483647));
root.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.black), null, TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));
final JLabel label1 = new JLabel();
label1.setBackground(new Color(-12913370));
label1.setHorizontalAlignment(10);
label1.setHorizontalTextPosition(11);
label1.setText("Result: ");
GridBagConstraints gbc;
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1.0;
gbc.anchor = GridBagConstraints.WEST;
root.add(label1, gbc);
clearButton = new JButton();
clearButton.setText("Clear");
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 2;
gbc.weightx = 1.0;
root.add(clearButton, gbc);
final JScrollPane scrollPane1 = new JScrollPane();
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gbc.fill = GridBagConstraints.BOTH;
root.add(scrollPane1, gbc);
BurpPrint = new JTextArea();
BurpPrint.setColumns(0);
BurpPrint.setLineWrap(true);
BurpPrint.setRows(0);
BurpPrint.setText("Burpsuit抓取的数据");
scrollPane1.setViewportView(BurpPrint);
}
/**
* @noinspection ALL
*/
public JComponent $$$getRootComponent$$$() {
return root;
}
}
实现效果:


文章转载自白帽子飙车路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。














