这篇文章主要介绍burp解密http请求数据插件的编写。根据上篇文章分析得到的AES加解密算法,我们要编写一个AES解密插件,将指定host的请求数据解密,并在新建的消息编辑器中显示。
一、AES解密插件用到的接口
IMessageEditorTabFactory
//implements IBurpExtender 因为我们要实现的是burp插件
//implements IMessageEditorTabFactory 创建一个IMessageEditor工厂
public class BurpExtender implements IBurpExtender,IMessageEditorTabFactory{
public PrintWriter stdount;
public PrintWriter stderr;
public IExtensionHelpers helpers;
private IBurpExtenderCallbacks callbacks;
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks){
this.stdount = new PrintWriter(callbacks.getStdout(),true);
this.stderr = new PrintWriter(callbacks.getStderr(),true);
this.callbacks = callbacks;
this.helpers = callbacks.getHelpers();
callbacks.setExtensionName("Ucam Log Plugin");
//在插件的回调函数中注册它 即能够调用到我们实现的这个工厂
callbacks.registerMessageEditorTabFactory(this);
}
//implements后会继承createNewInstance方法 我们在方法中实现
//自定义消息编辑器
public IMessageEditorTab createNewInstance(IMessageEditorController controller,boolean editable){
return new iMessageEditorTab();
}
}
IMessageEditorTab
//下面即是implements IMessageEditorTab后 自定义的消息编辑器
//具体的功能则是在继承的几个方法中实现
class iMessageEditorTab implements IMessageEditorTab{
//实例化iTextEditor返回当前加密数据显示的组件包括加密数据内容
private ITextEditor iTextEditor = callbacks.createTextEditor();
//设置消息编辑器的标题 如这里设置的“Ucam Log Plugin”
public String getTabCaption(){
return "Ucam Log Plugin";
}
//设置组件 这里直接设置为默认的iTextEditor组件
public Component getUiComponent(){
return iTextEditor.getComponent();
}
//过滤对特定的请求才生成消息编辑器 当burp中捕捉的请求不符合
//我们需要的则不生成消息编辑器
//比如 消息中包含“param”字段、host为www.test.com才生成消息编辑器
//则如果请求包含它们返回true
public boolean isEnabled(byte[] content,boolean isRequest){
//参数content byte[]即是getMessage中获取的iTextEditor中的文本
//参数isRequest boolean即表示当前文本是request请求 还是 response接收的数据
//当isRequest true表示request false表示response
}
//我们要在消息编辑器中显示的消息
//比如对content解密、添加额外内容、或者替换掉再返回到消息编辑器中
public void setMessage(byte[] content,boolean isRequest){
//参数content byte[]即是getMessage中获取的iTextEditor中的文本
//参数isRequest boolean即表示当前是request请求 还是 response接收的数据
//当isRequest true表示request false表示response
}
//返回iTextEditor显示的文本
public byte[] getMessage(){
return iTextEditor.getText();
}
//允许修改消息
public boolean isModified(){
return true;
}
//返回iTextEditor中选定的文本 没有选择的话 则不返回数据
public byte[] getSelectedData(){
return iTextEditor.getSelectedText();
}
}
二、解密插件的实现与使用
过滤需要处理的请求,如下所示
解密请求数据并输出
加载插件测试,如下所示
抓取我们过滤的特定的请求包测试
综上所述,该篇文章主要介绍了burp中自定义消息编辑器解密插件的编写。其中,我们可以依据自己的个人需求来指定需要过滤的请求,比如可以按照请求数据中包含的参数名称、请求头中包含的host、user-agent、Content-Type、请求链接url等,多个条件一起判断也可以。