apsry

去留无意,宠辱不惊

0%

burp插件的简单入门

burp插件的简单入门

burp插件简单入门

简单介绍

可以在burp直接下载接口说明和接口

image-20220519234957408

关于入门,可以看一些文章,这里就用hackbar举例

https://github.com/d3vilbug/HackBar

把文件下下来,然后分析代码,在我看来如果能借助别人的代码改改达到自己的需求,就没必要去写了,我开始的想法就是写一个burp的笔记本,刚好hackbar就非常适合我的需求。

我们这边举三个代码来理解

首先是BurpExtender

1
public class BurpExtender implements IBurpExtender, IContextMenuFactory

简单来说就是需要什么模块就先去注册模块,然后再调用

1
2
3
IBurpExtender:在编写Burp拓展时必须要使用的类,该类的作用是在Burp上正确注册,注册方法是使用registerExtenderCallbacks()方法,传递callbacks参数

IContextMenuFactory:此模块用来拓展右键菜单功能首先使用registerContextMenuFactory()方法注册菜单拓展,然后建立createMenuItem()方法创建菜单,使用add()函数,配合JmenuItem()方法设置菜单信息,在此方法内定义actionPerformed参数设置行动函数。

burp的接口可以自行的去官网查看,我觉得其实代码写起来比较简单,相反要是实现一些图形化感觉比较难一些

https://portswigger.net/burp/extender/

可以看这位博主的解释的比较全

https://blog.csdn.net/weixin_47767605/article/details/106237259

https://www.cnblogs.com/wjrblogs/p/15705552.html

image-20220519231332500

我们知道接口的含义,所以就容易理解代码,registerExtenderCallbacks注册模块初始化,createMenuItems创建菜单

然后看hackbar写的通用方法

可以看到add_MenuItem_and_listenerd的逻辑就是添加菜单和listener

1
2
3
4
5
6
7
8
9
//一级菜单:
public static JMenu add_MenuItem_and_listener(JMenu menu, String[] itemList, Object actionListener){
for(int i = 0; i < itemList.length; i++){
JMenuItem item = new JMenuItem(itemList[i]);
item.addActionListener((ActionListener) actionListener);
menu.add(item);
}
return menu;
}

举个例子

我们看webshell这里,可以看到他只注册了一级菜单,所以这个时候用add_MenuItem_and_listenerd进行一个注册

image-20220519233258358

Create_Main_Menu创建主菜单,然后再添加子菜单,如果需要二级菜单就用这个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//二级菜单: 创建主菜单,并加入子菜单    
public static JMenu Create_Main_Menu(JMenu MainMenu, String[] MainMenuItems, String[][] SubMenuItems, Object actionListener){
for(int i=0; i < MainMenuItems.length; i++){
JMenu menu = new JMenu(MainMenuItems[i]);
menu = add_MenuItem_and_listener(menu, SubMenuItems[i], actionListener);
if(MainMenuItems[i].equals("Basic Statements")){
MainMenu.add(new JSeparator());
MainMenu.add(menu);
MainMenu.add(new JSeparator());
}else{
MainMenu.add(menu);
}
}
return MainMenu;
}

举个例子

可以看到LFIMenuItems需要二级菜单

image-20220519233434671

prompt_and_validate_input,接受用户的输入

1
2
3
4
5
6
7
public static String prompt_and_validate_input(String prompt, String str){
String user_input = JOptionPane.showInputDialog(prompt, str);
while(user_input.trim().equals("")){
user_input = JOptionPane.showInputDialog(prompt, str);
}
return user_input.trim();
}

举个例子

我们看到调用prompt_and_validate_input去获取用户的输入

image-20220519233553390

其它就不举例子了0.0,比较简单

do_modify_request对输出的文本进行处理

1
2
3
4
5
6
7
8
public static byte[] do_modify_request(byte[] request, int[] selectedIndex, String modifiedString){
byte[] modString = modifiedString.getBytes();
byte[] newRequest = new byte[request.length + modifiedString.length() - (selectedIndex[1]-selectedIndex[0])];
System.arraycopy(request, 0, newRequest, 0, selectedIndex[0]);
System.arraycopy(modString, 0, newRequest, selectedIndex[0], modString.length);
System.arraycopy(request, selectedIndex[1], newRequest, selectedIndex[0]+modString.length, request.length-selectedIndex[1]);
return newRequest;
}

show_message打印

1
2
3
public static void show_message(String str1, String str2){
JOptionPane.showMessageDialog(null, str1, str2, 0);
}

魔改

然后魔改就比较简单了,比如你想增加自己的webshell

可以先添加菜单

image-20220519233748585

然后可以调用do_WebShell去对传进去的action进行处理,比如这里我们直接添加了behinder的马,然后直接在switch对action进行判断即可,然后照样子把冰蝎马base一些就可以了。注意不要有中文!

如果想自己写一个菜单,那么直接在BurpExtender.registerExtenderCallbacks注册一个即可,比如我这里的HttpHeader

image-20220519234155611

然后创建文件,主要两个点,比较简单,就不继续了

image-20220519234335585

最后效果

image-20220519234714408

image-20220519234813857

burp插件调试

首先确保IDEA和burp插件代码的一致性

image-20220519223635438

添加远程

image-20220519223703402

配置

image-20220519223833622

1
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

可以看到会出现debug

image-20220519223854550

然后就是关于burp的配置

需要在启动时加上

1
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

由于一般大家都是用的破解,比如我原来的命令是这样的

1
"./jre\bin\javaw.exe" -Xmx8G -XX:-UseParallelGC -noverify -javaagent:BurpSuiteLoader_v2022.2.2.jar -Dfile.encoding=utf-8 -jar burpsuite_pro_v2022.2.2.jar

这个时候在后面加上即可

1
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

下载jre的网站

http://hg.openjdk.java.net/

https://jdk.java.net/archive/

报了这样的错误,发现是没有下载dll文件,百度下载了个jdwp.dll放到jdk的bin目录

image-20220519225249179

还有就是注意jdk版本的一致性

最后命令是

1
"\java\jdk-14.0.2\bin\java.exe" -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005  -Xmx8G -XX:-UseParallelGC -noverify -javaagent:BurpSuiteLoader_v2022.2.2.jar -Dfile.encoding=utf-8 -jar burpsuite_pro_v2022.2.2.jar

image-20220520003500992

这个时候我假设在webshell的php下断点

image-20220520003724248

然后在burp下点击hackbar的php选项

image-20220520003931052

可以看到已经成功的断在了我们想要的地方

image-20220520003829133

最终得到想要的结果

image-20220520003907882

参考:

http://www.code2sec.com/burpsuitecha-jian-kai-fa-tips.html

https://blog.csdn.net/huahao1989/article/details/107746738

https://www.netspi.com/blog/technical/web-application-penetration-testing/debugging-burp-extensions/

https://portswigger.net/burp/extender/

http://www.code2sec.com/burpsuitecha-jian-kai-fa-tips.html