【测试工具】如何使用 burp pro 自定义一个拦截器插件
在 Burp Suite 中,你可以使用 Burp Extender 编写自定义拦截器插件,以拦截并修改 HTTP 请求或响应。Burp Suite 支持 Java 和 Python (Jython) 作为扩展开发语言。以下是一个完整的流程,介绍如何创建一个 Burp 插件来拦截请求并进行自定义处理。
1. 选择开发语言
Burp Suite 官方推荐使用 Java 进行插件开发,但如果你更熟悉 Python,可以使用 Jython(Java 版 Python)。
下面分别介绍 Java 版 和 Python 版 实现。
2. 使用 Java 编写拦截器插件
如果你熟悉 Java,可以使用 Burp Extender API 编写一个拦截器。
此插件示例:
- 拦截所有 HTTP 请求
- 在请求头中添加一个自定义字段
X-Custom-Header: BurpInterceptor - 拦截特定接口
/api/target-endpoint并修改其响应
代码:BurpInterceptor.java
import burp.*;import java.io.PrintWriter;public class BurpInterceptor implements IBurpExtender, IHttpListener {private PrintWriter stdout;@Overridepublic void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {// 设置插件名称callbacks.setExtensionName("Custom HTTP Interceptor");// 获取控制台输出stdout = new PrintWriter(callbacks.getStdout(), true);// 注册 HTTP 监听器callbacks.registerHttpListener(this);stdout.println("Custom HTTP Interceptor Loaded!");}@Overridepublic void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo) {// 获取请求或响应数据IRequestInfo requestInfo = BurpExtenderHelpers.getHelpers().analyzeRequest(messageInfo);String url = requestInfo.getUrl().toString();if (messageIsRequest) {// 处理 HTTP 请求stdout.println("Intercepting Request: " + url);// 修改请求头byte[] requestBytes = messageInfo.getRequest();String requestStr = new String(requestBytes);String modifiedRequest = requestStr.replaceFirst("User-Agent: .*", "User-Agent: BurpCustomPlugin");messageInfo.setRequest(modifiedRequest.getBytes());} else {// 处理 HTTP 响应stdout.println("Intercepting Response for: " + url);if (url.contains("/api/target-endpoint")) {String modifiedResponse = "HTTP/1.1 403 Forbidden\r\nContent-Length: 0\r\n\r\n";messageInfo.setResponse(modifiedResponse.getBytes());stdout.println("Modified response to 403 Forbidden.");}}}
}
编译和使用
- 下载 Burp Suite Extender API
- 从 PortSwigger 官方网站 下载
burp-extender-api.jar
- 从 PortSwigger 官方网站 下载
- 编译插件
javac -cp burp-extender-api.jar BurpInterceptor.java jar cf BurpInterceptor.jar BurpInterceptor.class - 加载插件
- 打开 Burp Suite → Extender → Extensions
- 选择 Add → 选择
BurpInterceptor.jar - 插件加载后,Burp 控制台应显示
"Custom HTTP Interceptor Loaded!"
3. 使用 Python (Jython) 编写拦截器插件
如果你更熟悉 Python,可以使用 Jython 进行开发。以下是一个类似的 Python 版本:
- 拦截所有 HTTP 请求
- 在请求头中添加
X-Burp-Plugin: Active - 拦截
/api/target-endpoint并修改返回内容
代码:BurpInterceptor.py
from burp import IBurpExtender, IHttpListener
from java.io import PrintWriterclass BurpExtender(IBurpExtender, IHttpListener):def registerExtenderCallbacks(self, callbacks):self._callbacks = callbacksself._helpers = callbacks.getHelpers()self.stdout = PrintWriter(callbacks.getStdout(), True)# 设置插件名称callbacks.setExtensionName("Python HTTP Interceptor")# 注册 HTTP 监听器callbacks.registerHttpListener(self)self.stdout.println("Python HTTP Interceptor Loaded!")def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):requestInfo = self._helpers.analyzeRequest(messageInfo)if messageIsRequest:# 修改请求头,添加自定义 Headerrequest = self._helpers.bytesToString(messageInfo.getRequest())modified_request = request.replace("User-Agent: ", "User-Agent: BurpCustom\nX-Burp-Plugin: Active\n")messageInfo.setRequest(self._helpers.stringToBytes(modified_request))self.stdout.println("Modified request headers.")else:# 拦截特定接口并修改响应url = requestInfo.getUrl().toString()if "/api/target-endpoint" in url:modified_response = "HTTP/1.1 403 Forbidden\r\nContent-Length: 0\r\n\r\n"messageInfo.setResponse(self._helpers.stringToBytes(modified_response))self.stdout.println("Intercepted /api/target-endpoint, modified response to 403 Forbidden.")
加载 Python 插件
- 下载并安装 Jython
- 下载 Jython Standalone (
jython-standalone-2.7.2.jar)
- 下载 Jython Standalone (
- 加载 Python 插件
- 在 Burp Suite → Extender → Extensions
- 选择 Add
- 选择 Extension Type: Python
- 选择
BurpInterceptor.py - 运行插件,Burp 控制台应显示
"Python HTTP Interceptor Loaded!"
4. 选择 Java 还是 Python
| 语言 | 适用场景 | 优势 | 缺点 |
|---|---|---|---|
| Java | 高性能 Burp 插件 | 官方推荐,运行效率高 | 需要编译,开发较复杂 |
| Python (Jython) | 快速开发 Burp 插件 | 代码简单,修改方便 | 依赖 Jython,运行效率较低 |
如果是快速测试或实验性功能,建议使用 Python(Jython)。
如果是长期使用的插件,建议使用 Java。
5. 总结
- Java 版插件 适用于 生产环境和高性能需求,但开发较复杂。
- Python (Jython) 插件 适用于 快速测试,代码修改更灵活。
- Burp Extender API 允许拦截、修改 HTTP 请求和响应,适用于 Web 安全测试。
个人推荐使用 jython 节省时间,用起来真的很方便
相关文章:
【测试工具】如何使用 burp pro 自定义一个拦截器插件
在 Burp Suite 中,你可以使用 Burp Extender 编写自定义拦截器插件,以拦截并修改 HTTP 请求或响应。Burp Suite 支持 Java 和 Python (Jython) 作为扩展开发语言。以下是一个完整的流程,介绍如何创建一个 Burp 插件来拦截请求并进行自定义处理…...
MySQL、创建数据库、表、SQL 函数:数学函数、字符串函数、日期函数、聚合函数
DAY18.1 Java核心基础 MySQL 创建数据库 数据库是一个服务,实际开发需要根据具体的项目创建对应的数据库实例 create database mytest1 default character set utf8 collate utf8_general_ci; create database mytest2 default character set utf8 collate utf8…...
关于我对接了deepseek之后部署到本地将数据存储到mysql的过程
写在前面 今天写一下使用nodejs作为服务端,vue作为客户端,mysql的数据库,对接deepseek的全过程,要实现一个很简单的效果就是,可以自由的询问,然后可以将询问的过程存储到mysql的数据库中。 文档对接 deeps…...
23种设计模式-策略(Strategy)设计模式
策略设计模式 🚩什么是策略设计模式?🚩策略设计模式的特点🚩策略设计模式的结构🚩策略设计模式的优缺点🚩策略设计模式的Java实现🚩代码总结🚩总结 🚩什么是策略设计模式…...
【Exception】MybatisPlusException: can not find lambda cache for this entity
文章目录 环境 | Environment复现步骤 | Reproduction steps报错日志 | Error log源码 | Source CodeUserServiceImpl.javaAddressServiceImpl.javaAbstractSubTableBaseServiceImpl.javaUserEntity.javaAddressEntity.javaSubTableBaseEntity.java 原因分析 | Analysis解决方案…...
vue ts+Windi CSS
1、创建vue项目 trae(字节)打开一个空文件夹 npm install -g vue/cli vue create my-project cd my-project vue add typescript npm run serve vue项目创建完成 2、安装windicss vue add windicss vue.config.js配置 npm install vue-router …...
ffmpeg系列(三)—— 音频重采样
SwrContext 一、SwrContext 的重要字段 SwrContext 是音频重采样的核心配置对象,其关键字段决定了重采样的行为和性能。以下是常用字段及其作用: 字段名称类型作用典型值示例in_sample_rateint输入音频的采样率(Hz)。44100out_…...
Android Gradle 插件(AGP)版本与 Gradle 版本需要严格对应
一、AGP 与 Gradle 版本对照表 Android Gradle 插件版本对应 Gradle 版本适用 Android Studio 版本8.1.x8.2Arctic Fox (2020.3.1+)8.0.x8.0Arctic Fox (2020.3.1+)7.4.x7.5.1IntelliJ IDEA 2022+7.3.x7.4IntelliJ IDEA 2022+7.2.x7.3.3IntelliJ IDEA 2021.3+7.1.x…...
Angular由一个bug说起之十五:自定义基于Overlay的Tooltip
背景 工具提示(tooltip)是一个常见的 UI 组件,用于在用户与页面元素交互时提供额外的信息。由于angular/material/tooltip的matTooltip只能显示纯文本,所以我们可以通过自定义Directive来实现一个灵活且功能丰富的tooltip Overlay…...
使用 Chromedp 监听网页请求和响应
使用 Chromedp 监听网页请求和响应 在进行网络爬虫的时候,有很多网站都有反爬机制,比如你想抓点数据,结果发现每次请求都带一堆奇奇怪怪的参数 —— 什么 timestamp 签名、AES 加密的字段,还有各种 Token 令牌,跟密码…...
Java中用Stream流取出分组后每组最大值对象的ID
取出分组后每组最大值对象的ID 如果只需要获取这些对象的ID(或其他特定字段),而不是整个对象,可以采用以下方法: 方法1:先获取对象再提取ID List<String> customerIds orders.stream().collect(Coll…...
GPT-SoVITS本地部署:低成本实现语音克隆远程生成音频全流程实战
文章目录 前言1.GPT-SoVITS V2下载2.本地运行GPT-SoVITS V23.简单使用演示4.安装内网穿透工具4.1 创建远程连接公网地址 5. 固定远程访问公网地址 前言 今天要给大家安利一个绝对能让你大呼过瘾的声音黑科技——GPT-SoVITS!这款由花儿不哭大佬精心打造的语音克隆神…...
使用HTTP提交git时,每次都要输入用户名和密码的解决方案
通过https提交的git项目,每次提交都需要输入用户名和密码 解决方案如下: 打开项目目录,通过终端输入: git config --global credential.helper store验证方式: 重启 scode修改or添加文件后使用git上传, 本次需要帐号密码再次修改or添加文件…...
Flutter视频播放优化
在Flutter中实现流畅视频播放,选择合适的播放器插件是关键。推荐使用以下两类插件: 跨平台低延迟方案 flutter_vlc_player:基于VLC引擎,支持RTSP/RTMP协议,通过hwAcc: HwAcc.full启用硬件加速,配合setOpti…...
嵌入式学习第二十八天--顺序栈
栈的基本代码 栈是限定仅在表尾进行插入和删除操作的线性表。 先进后出、后进先出 栈顶:允许操作的一端 栈底:不允许操作的一端 入栈,出栈。 顺序栈 链式栈 302\5 1.创建 CreateSeqStack 2.销毁 DestroySeqStack 3.判断是否为空栈 IsEmptySeqStack 4.判断是否为满…...
基于MCP协议的多模态模型优化在医疗3D打印精密人工关节制造中的研究
一、引言 1.1 研究背景与意义 在全球人口老龄化趋势愈发明显的当下,诸如骨关节炎、类风湿性关节炎这类关节疾病的发病率不断攀升,进而使得人工关节置换手术的需求呈现出激增态势。人工关节置换手术作为治疗终末期关节疾病的有效手段,能够显著缓解患者疼痛,提升关节功能与生…...
【Unity】 HTFramework框架(六十三)SerializableDictionary可序列化字典
更新日期:2025年3月26日。 Github 仓库:https://github.com/SaiTingHu/HTFramework Gitee 仓库:https://gitee.com/SaiTingHu/HTFramework 索引 一、SerializableDictionary可序列化字典1.使用SerializableDictionary2.实现思路 二、Serializ…...
MATLAB绘图配色包说明
本栏目将分享MATLAB数据分析图表,该贴讲述配色包的使用 将配色包colormap_nclCM文件夹添加到路径close all(尽量不要删),使用map colormap(nclCM(309))时会多出来一张空白图片。配色资源来自slandarer;找不到合适颜色…...
8路CXP相机采集系统介绍
8xCXP相机采集系统介绍 目录 1 系统概述 4 2 硬件架构 5 2.1 FPGA处理单元 5 2.2 CXP接口层 6 2.3 CXP相机说明与使用要求 7 2.4 SSI控制器板 8 3 FPGA方案 9 3.1 FPGA实现 9 3.2 Block Design说明 10 4 软件方案 14 4.1 嵌入式层 14 4.2 上位机软件(C…...
Stable Diffusion 基础模型结构超级详解!
1. Transformer 第一个只用 Attention 机制来解决序列到序列问题的模型,最早被 Google 用来解决翻译问题 对于中英翻译而言,需要解决三个具体的问题: 如何用数字表示中文和英文 如何让神经网络理解语义 如何让神经网络生成英文 1.1 Tok…...
【Linux网络(七)】数据链路层
目录 1、认识MAC地址 2、 mac帧格式 3、局域网的通信原理 4、ARP协议 浏览器输入url1后发生的事情:(面试题) 数据链路层解决的是:直接相连的主机(不仅仅包括电脑,还包括路由器)之间&#x…...
Nginx RTMP 处理模块 (ngx_rtmp_handler.c) 详细分析
ngx_rtmp_handler 是 Nginx RTMP 模块中的核心处理部分,主要负责处理 RTMP 流会话中的数据接收、发送、ping 操作以及分块大小的设置等。 1. 全局变量 ngx_rtmp_naccepted: 记录接受的 RTMP 连接数。 ngx_rtmp_bw_out 和 ngx_rtmp_bw_in: 分别表示输出带宽和输入带…...
2025年渗透测试面试题总结-某奇安信-Ateam(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 奇安信-Ateam 一、SQL注入攻防技术体系 1.1 SQL注入类型矩阵(基于利用方式) …...
前端工程化--gulp的使用
gulp 介绍 gulp 是一个基于 Nodejs 的自动化构建工具,中文主页能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的合并、压缩、检查、监听文件变化、浏览器自动刷新、测试等任务 使用步骤: 安装 nodejs 全局安装 gulp npm install…...
谈谈对spring IOC的理解,原理和实现
一、IoC 核心概念 1. 控制反转(Inversion of Control) 传统编程中对象自行管理依赖(主动创建),而IoC将控制权转移给容器,由容器负责对象的创建、装配和管理,实现依赖关系的反向控制。 2. 依赖…...
Windows 10 ARM64平台MFC串口程序开发
Windows 10 IoT ARM64平台除了支持新的UWP框架,也兼容支持老框架MFC。使得用户在Windows 10 IoT下可以对原MFC工程进行功能升级,不用在新框架下重写整个工程。熟悉MFC开发的工程师也可以在Windows 10 IoT平台下继续使用MFC进行开发。 本文展示MFC串口程序…...
31天Python入门——第16天:模块与库详解
你好,我是安然无虞。 文章目录 Python模块模块之间的调用 Python包库的概念Python标准库安装第三方库 \_\_name\_\_ \_\_main\_\_ Python模块 在 Python 中, 模块是一个包含函数、变量和类等代码定义的py文件. 所以也可以说, 普通的py文件就是一个模块. 模块可以…...
设计模式(创建型)- 原型模式
目录 定义 类图 角色 优缺点 优点 缺点 应用场景 案例展示 浅克隆 深克隆 定义 原型模式旨在创建重复的对象,同时确保良好的性能表现。它通过复制现有对象(原型)来创建新对象,而非使用传统的构造函数创建方式。这种设计…...
Redis + Caffeine多级缓存电商场景深度解析
Redis Caffeine多级缓存 Redis Caffeine多级缓存电商场景深度解析一、实施目的二、具体实施2.1 架构设计2.2 组件配置2.3 核心代码实现 三、实施效果3.1 性能指标对比3.2 业务指标改善3.3 系统稳定性 四、关键策略4.1 缓存预热4.2 一致性保障4.3 监控配置Prometheus监控指标 …...
spring-ai ollama小试牛刀
序 本文主要展示下spring-ai ollama的使用 示例 pom.xml <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId></dependency>这里以ollama示例 配置 spring:ai:olla…...
