挖洞效率好低,思来想去,还是得靠插件。0到1,的burp插件开发
https://portswigger.net/burp/extender/api/allclasses-noframe.html 接口文档 ,给出的 接口的方法及其作用
https://portswigger.net/burp/extender/api/constant-values.html#burp.IRequestInfo.CONTENT_TYPE_JSON 方便查看 各个接口中 方法的参数 及其所代表的含义
1.Java 代码基础
2.配置号burp api
保存java api 到本地
并创建空的java项目,导入api
3. 在BurpExtender 实现自己的功能模块
4. GUI 页面编写 Swing组件的使用
https://juejin.cn/post/6844903572891500551#heading-3 可以学习下,简单的burp 窗口,是怎么实现的。 实现ITab接口
SwingUtilities.invokeLater() 创建 视图窗口
SwingUtilities的 函数invokeLater来保证GUI在事件分发线程中创建。
参考文章:
https://blog.csdn.net/Mculover666/article/details/104338322 awt
https://blog.csdn.net/bingongzi/article/details/95736582 Jframe
getUiComponent() 方法 ,返回主面板
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//生成主面板 以及两个子面板
JSplitPane RootPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
JSplitPane jSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
JSplitPane jSplitPane2= new JSplitPane(JSplitPane.VERTICAL_SPLIT);
// 声明 二维记录表
logTable = new Table(BurpExtender.this);
// 声明清除列表 记录 的按钮
JButton Button = new JButton("清除记录") ;
// 给自己 第二个子面板 生成一个 模型。 并把按钮添加进去
JPanel panel= new JPanel();
panel.setLayout(new GridLayout(18, 1));
panel.add(Button);
jSplitPane2.setLeftComponent(panel);
// 将二维记录表 放进滑动框 JScrollPane
JScrollPane scrollPane = new JScrollPane(logTable);//先创建对象在放进去
jSplitPane.setLeftComponent(scrollPane);
// tabs with request/response viewers 生成标签 展示数据包详情 放进子面板一
JTabbedPane tabs = new JTabbedPane();
requestViewer = callbacks.createMessageEditor(BurpExtender.this, false);
responseViewer = callbacks.createMessageEditor(BurpExtender.this, false);
tabs.addTab("Request", requestViewer.getComponent());
tabs.addTab("Response", responseViewer.getComponent());
jSplitPane.setRightComponent(tabs);
//整体分布
RootPane.setLeftComponent(jSplitPane);
RootPane.setRightComponent(jSplitPane2);
RootPane.setDividerLocation(1000);
//customize自己的UI
BurpExtender.this.callbacks.customizeUiComponent(RootPane);
BurpExtender.this.callbacks.customizeUiComponent(logTable);
BurpExtender.this.callbacks.customizeUiComponent(scrollPane);
BurpExtender.this.callbacks.customizeUiComponent(panel);
BurpExtender.this.callbacks.customizeUiComponent(tabs);
BurpExtender.this.callbacks.addSuiteTab(BurpExtender.this);
// 定义按钮 的监听操作
Button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
log.clear();
BurpExtender.this.fireTableDataChanged();
}
});
}
});
l
5. 功能实现
根据自己的需求,分解实现步骤,一步步,实现。 可以去参考用到相同步骤的项目
一种 json格式的越权 一种 get方式的越权
josn格式
1. 判断数据包 的格式 json
其中 messageInfo 是 IHttpRequestResponse类型的对象
this.helpers.analyzeRequest(messageInfo).getContentType()
有接口可以查看 json的 Type值 4
https://portswigger.net/burp/extender/api/constant-values.html#burp.IRequestInfo.CONTENT_TYPE_JSON
2.判断参数key值 是否包含id
3.参数value 进行类型转换 加一 或者5
4.根据参数 构造新的请求包 判断响应包的变化
case1 响应码 发生变化 不存在越权 case2 数据包中 包含error|等报错字段 越权失败,但是可以报响应包拿出来看看 case3
case4 一个原本size不小的响应包,明显变大。
get 格式 的越权 url中越权 参数中越权 尝试将不同的参数置空,置为负数, 将置空与置为负数的参数,进行排列组合
遇到的报错: java: 无效的目标发行版: 11 问题解决文章 jdk环境不对,重新修改项目配置
https://blog.csdn.net/weixin_46294086/article/details/124203970
如何获取 json数据 getParameters() 。
如何判断在body的哪个位置,添加payload 如何根据数据包生成 payload。
parameters 的 name 与value。 根据name判断 payload 的位置,uodate参数,替换payload
替换payload ,重新发包,并分析响应包。
声明一个logEntry类 ,记录请求的详情。
private static class LogEntry{
// 记录的参数
final String url;
final String status;
final String res;
final IHttpRequestResponse requestResponse;
//通过构造函数,表明 记录 所需要的参数,及对象的参数类型
LogEntry(String url, String status, String res, IHttpRequestResponse requestResponse) {
this.url = url;
this.status = status;
this.res = res;
this.requestResponse = requestResponse;
}
}
// 通过列表 记录多个LogEntry
public final List<LogEntry> log = new ArrayList<LogEntry>();
toolflag 配置监听那个模块的数据 64 4 监听 proxy repeater 模块的流量。
processHTTPMESSAGE()
定义心得接口 实现 报告扫描结果呈现
单独实现 功能模块, 调用,减少代码的重复编写
完成功能,展示数据后,导出 jar 包 。
后期会分享,自己的插件,还在继续优化,欢迎与大家交流。
标签:插件,BurpExtender,callbacks,参数,burp,new,编写,JSplitPane From: https://www.cnblogs.com/darkfree/p/17460771.html