☰
Burp 插件开发入门,手把手写一个简易自动化插件
2026/10/1 15:38:37 网站建设 项目流程

Burp 插件开发入门,手把手写一个简易自动化插件

免责声明:本文仅用于授权环境下的 Web 安全学习、安全测试开发。禁止在未授权的业务系统上使用 Burp 及自研插件做任何扫描、抓包、攻击测试,未经授权测试属于违法行为,所有操作风险由使用者自行承担。本文基于 Burp Community / Professional,使用 Python (Jython) 开发。

前言

很多做 Web 安全的同学天天用 Burp Suite 抓包、改包、爆破,但一直停留在使用别人写好的插件(如 Logger、HackBar、BurpCrypto)。学会 Burp 插件开发之后,可以根据自己的测试场景,把重复的手工操作自动化:自定义请求检测、批量提取接口、自动加解密、自定义漏洞检测、批量替换 Header。

Burp 插件支持多种开发语言:Java、Python(Jython)、Ruby。对于新手,Python(Jython)上手最快,语法简单,不用处理复杂 Java 工程。

前置准备:

  1. Burp Suite(社区版 / 专业版均可)
  2. Jython 独立 Jar 包(jython-standalone.jar,注意版本适配 Burp)
  3. 基础 Python 语法,看懂 HTTP 请求、Burp 里的 HTTP 对象模型

注意:Burp 加载 Python 插件不是原生 CPython,是 Jython,不能直接 import 大部分原生 Python 库(requests、bs4 这些无法使用),只能使用 Burp 提供的 API 和 Jython 内置库,这是新手最容易踩的坑。

一、Burp 插件基础概念与 API 介绍

Burp 插件本质就是一段代码,实现 Burp 提供的扩展接口,注册回调函数,让 Burp 在指定事件触发时执行我们写的代码。

核心接口(I * 开头,Burp API)

  1. IBurpExtender:必须实现,插件入口类,Burp 加载插件时第一个调用
  2. IBurpCollaboratorClientContext:Burp Collaborator(DNS/HTTP 外带)
  3. IHttpRequestResponse:HTTP 请求响应对象,包含 request、response、url、host 等信息
  4. IHttpService:目标服务信息(host、port、http/https)
  5. IScanIssue:自定义漏洞上报,在 Dashboard 漏洞面板展示
  6. IContextMenuFactory:右键菜单扩展,给 Burp 增加自定义右键选项

本文目标:开发一个简易插件,实现两个功能:

  1. 在 Burp 右键菜单增加一个自定义选项:【提取响应中的所有链接】
  2. 选中请求包后点击菜单,自动解析响应体,提取所有 http/https 链接,输出到 Burp 控制台

这个小插件非常适合入门,不需要复杂逻辑,熟悉请求对象、UI 输出、右键菜单注册。

二、环境配置:Burp 加载 Jython

  1. 下载 jython-standalone.jar
  2. 打开 Burp →Extender→Options
  3. 在Python environment中选择刚才下载的 jython jar 包
  4. 切换到Extensions标签,点击Add,选择扩展类型Python,选择插件 py 文件即可加载。

如果报版本错误,更换对应版本的 Jython 包。社区版 Burp 不支持部分扫描相关 API,写扫描类插件建议用专业版。

三、完整插件源码(带详细注释)

新建文件link_extractor.py

from burp import IBurpExtender from burp import IContextMenuFactory from javax.swing import JMenuItem, JOptionPane from java.util import ArrayList import re # 插件入口类,必须实现IBurpExtender class BurpExtender(IBurpExtender, IContextMenuFactory): def registerExtenderCallbacks(self, callbacks): # 保存回调对象,后续调用Burp API self._callbacks = callbacks # 助手工具类,用于处理HTTP数据包、编码等 self._helpers = callbacks.getHelpers() # 设置插件名称,在扩展列表显示 callbacks.setExtensionName("LinkExtractor 简易链接提取插件") # 注册右键菜单工厂,让Burp识别我们自定义右键菜单 callbacks.registerContextMenuFactory(self) # 打印信息到Burp控制台 print("="*50) print("LinkExtractor 插件加载成功!") print("选中http请求,右键菜单【提取响应中的链接】即可使用") print("="*50) return # 实现IContextMenuFactory:创建右键菜单 def createMenuItems(self, context_menu): # 获取用户选中的请求/响应对象 http_traffic = context_menu.getSelectedMessages() menu_list = ArrayList() # 创建菜单项,绑定点击事件 menu_item = JMenuItem("提取响应中的所有链接") menu_item.addActionListener(lambda event: self.extract_link(http_traffic)) menu_list.add(menu_item) return menu_list # 核心业务方法:提取链接 def extract_link(self, traffic_list): if not traffic_list: JOptionPane.showMessageDialog(None, "请先选中一条HTTP请求记录!") return # 拿到第一条选中的流量对象 http_msg = traffic_list[0] response = http_msg.getResponse() if response is None: print("[!] 该请求没有响应包") return # 将byte数组响应转为字符串 response_str = self._helpers.bytesToString(response) # 正则匹配http/https链接 pattern = re.compile(r'https?://[a-zA-Z0-9_./?=&-]+') result_list = pattern.findall(response_str) # 去重 unique_links = list(set(result_list)) print("\n===== 提取到的链接 =====") if len(unique_links) ==0: print("未发现任何链接") else: for link in unique_links: print(link) print("="*30 + "\n") # 弹窗提示结果数量 JOptionPane.showMessageDialog(None, "提取完成,共 {} 条链接,结果输出到Extender控制台".format(len(unique_links)))

四、代码逐段解析

1. 类定义与 registerExtenderCallbacks

registerExtenderCallbacks是插件入口函数,强制必须实现。Burp 加载插件时自动调用这个方法,传入callbacks对象,这是我们和 Burp 交互的唯一通道。

  • callbacks.getHelpers()获取工具助手类,处理字节数组、URL 解析、编码、HTTP 包解析
  • callbacks.setExtensionName()设置插件显示名称
  • callbacks.registerContextMenuFactory(self)注册右键菜单能力

在 Jython 中,print 输出的内容会直接打印到 Burp Extender 的控制台窗口,方便调试。

2. 右键菜单 createMenuItems

createMenuItems是右键菜单回调方法。

  • context_menu.getSelectedMessages()获取当前选中的 HTTP 请求,返回列表
  • JMenuItem创建菜单按钮,绑定点击事件,点击后执行extract_link函数

3. extract_link 核心逻辑

  1. 判断用户是否选中请求;
  2. 获取响应包(Burp 内部数据包是 byte 数组,不能直接当字符串);
  3. 使用_helpers.bytesToString()把 byte 转字符串;
  4. 正则匹配 http/https 链接,去重;
  5. 控制台输出结果,弹窗提示。

五、加载插件、测试使用

  1. 将代码保存为link_extractor.py;
  2. Burp -> Extender -> Extensions -> Add;
  3. Extension type 选择 Python,选中 py 文件;
  4. 加载成功,控制台会打印加载成功提示。

使用方法

  1. Proxy 抓包,访问任意网页;
  2. 在 Proxy / HTTP history 列表选中这条请求;
  3. 右键,选择菜单【提取响应中的所有链接】;
  4. 弹窗提示数量,打开 Extender 控制台查看所有提取的链接。

六、扩展改造思路(基于这个基础模板继续开发)

学会这个基础框架之后,可以扩展成很多实用小工具:

改造 1:自动检测响应关键词(简易漏洞检测)

读取 response,匹配敏感关键词如password、secret、debug,发现后自动在控制台告警,甚至调用 Burp 的addScanIssue上报漏洞到 Dashboard。

# 简易敏感信息匹配示例片段 if "password" in response_str: print("[警告] 响应中发现password关键词,存在敏感信息泄露风险!")

改造 2:批量修改请求 Header

批量替换 Cookie、添加自定义 Token,在右键一键修改选中请求包。

注意:修改请求包需要操作http_msg.getRequest(),通过 helpers 构建新请求字节数组。

改造 3:批量导出接口 URL

遍历选中多条流量,提取所有请求 URL,导出到文本。

改造 4:加解密插件

在右键选中请求参数,做 AES、RSA、Base64 编码解码(Jython 自带基础加密库)。

七、开发调试技巧(新手必看)

1. 控制台打印调试

Jython 不能用断点调试,print 是最主要调试手段,打印变量、数据包、长度,定位哪里出错。

print("response长度:", len(response))

2. 异常捕获,防止插件崩溃

写插件建议增加 try except,代码异常时不会直接卡死 Burp。

try: # 业务代码 except Exception as e: print("[异常] "+str(e))

把核心代码包裹在 try 里面,防止插件异常导致 Burp 扩展直接失效。

3. Burp API 文档查阅

官方 API 文档:https://portswigger.net/burp/extender/api
所有接口、方法都在这里,开发插件时经常查阅。

4. 区分 IHttpRequestResponse 对象

IHttpRequestResponse包含:

  • getRequest():获取请求 byte 数组
  • getResponse():获取响应 byte 数组
  • getHttpService():获取 host、port、协议
  • getUrl():直接拿到java.net.URL 对象

Burp 内部所有数据包都是字节数组,字符串和字节数组必须通过 helpers 转换,直接强转容易乱码。

八、高频踩坑清单

  1. ❌ 直接 import requests、bs4、numpy
    Jython 不支持 CPython 的第三方包,只能使用 Jython 内置库 + Burp API。网络请求必须调用 Burp 的 API 发送请求,不能用 requests。
  2. ❌ 忘记registerExtenderCallbacks,或者函数名写错
    这是插件入口,名字写错,Burp 加载插件直接失败,无报错提示。
  3. ❌ 直接把 byte 数组当字符串处理
    Burp 的 request/response 都是byte[],必须使用self._helpers.bytesToString()转换。
  4. ❌ 正则匹配中文乱码
    响应编码复杂时,部分页面会出现乱码,需要做编码判断,或者直接使用原始字节匹配。
  5. ❌ 右键菜单多次重复创建
    不要在循环重复 new JMenuItem,会出现重复菜单项。
  6. ❌ 社区版限制
    Burp Community 不支持主动扫描相关 API(IScannerCheck),如果你想写主动扫描插件,需要 Burp 专业版。

九、进阶方向:开发主动扫描插件(简要介绍)

如果想做漏洞检测插件,需要实现IScannerCheck接口,注册扫描规则。Burp 在主动扫描每个请求时,会回调doPassiveScan(被动扫描)、doActiveScan(主动发包检测)。

  • 被动扫描:只分析现有流量,不发包,适合敏感信息检测、指纹识别;
  • 主动扫描:Burp 自动构造 payload 发包,适合注入、未授权检测。

被动扫描插件开发门槛更低,推荐在掌握右键插件之后再学习 IScannerCheck。

十、开发检查清单

  1. 确认 Jython jar 包版本和 Burp 匹配;
  2. 代码实现 IBurpExtender,保证 registerExtenderCallbacks 正确;
  3. 所有 HTTP 字节包使用 helpers 做类型转换;
  4. 增加 try 捕获异常,避免插件崩溃;
  5. 先用简单场景测试,逐步增加功能;
  6. 测试插件:正常请求、无响应、空响应等边界场景;
  7. 所有功能在授权靶场测试,不要直接访问外网业务站点。

最后

网络安全需要学习那些知识

网络安全零基础入门学习路线&规划

初级
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

想要入坑黑客&网络安全的朋友,给大家准备了一份:282G全网最全的网络安全资料包免费领取!

7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

零基础入门,建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习; 搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime; ·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完; ·用Python编写漏洞的exp,然后写一个简单的网络爬虫; ·PHP基本语法学习并书写一个简单的博客系统; 熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选); ·了解Bootstrap的布局或者CSS。

8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,贴一个大概的路线。

网络安全工程师企业级学习路线

视频配套资料&国内外网安书籍、文档&工具
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

一些我自己买的、其他平台白嫖不到的视频教程:

要学习网安其实不难,难的是坚持和相信自己,我的经验是既然已经选定网安你就要相信它,相信它能成为你日后进阶的高效渠道,这样自己才会更有信念去学习,才能在碰到困难的时候坚持下去。

机会属于有准备的人,这是一个实力的时代。人和人之间的差距不在于智商,而在于如何利用业余时间,只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间!

这份完整版的学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询