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

发布时间:2026/10/1 15:38:44
Burp 插件开发入门,手把手写一个简易自动化插件 Burp 插件开发入门手把手写一个简易自动化插件免责声明本文仅用于授权环境下的 Web 安全学习、安全测试开发。禁止在未授权的业务系统上使用 Burp 及自研插件做任何扫描、抓包、攻击测试未经授权测试属于违法行为所有操作风险由使用者自行承担。本文基于 Burp Community / Professional使用 Python (Jython) 开发。前言很多做 Web 安全的同学天天用 Burp Suite 抓包、改包、爆破但一直停留在使用别人写好的插件如 Logger、HackBar、BurpCrypto。学会 Burp 插件开发之后可以根据自己的测试场景把重复的手工操作自动化自定义请求检测、批量提取接口、自动加解密、自定义漏洞检测、批量替换 Header。Burp 插件支持多种开发语言Java、PythonJython、Ruby。对于新手Python(Jython)上手最快语法简单不用处理复杂 Java 工程。前置准备Burp Suite社区版 / 专业版均可Jython 独立 Jar 包jython-standalone.jar注意版本适配 Burp基础 Python 语法看懂 HTTP 请求、Burp 里的 HTTP 对象模型注意Burp 加载 Python 插件不是原生 CPython是 Jython不能直接 import 大部分原生 Python 库requests、bs4 这些无法使用只能使用 Burp 提供的 API 和 Jython 内置库这是新手最容易踩的坑。一、Burp 插件基础概念与 API 介绍Burp 插件本质就是一段代码实现 Burp 提供的扩展接口注册回调函数让 Burp 在指定事件触发时执行我们写的代码。核心接口I * 开头Burp APIIBurpExtender必须实现插件入口类Burp 加载插件时第一个调用IBurpCollaboratorClientContextBurp CollaboratorDNS/HTTP 外带IHttpRequestResponseHTTP 请求响应对象包含 request、response、url、host 等信息IHttpService目标服务信息host、port、http/httpsIScanIssue自定义漏洞上报在 Dashboard 漏洞面板展示IContextMenuFactory右键菜单扩展给 Burp 增加自定义右键选项本文目标开发一个简易插件实现两个功能在 Burp 右键菜单增加一个自定义选项【提取响应中的所有链接】选中请求包后点击菜单自动解析响应体提取所有 http/https 链接输出到 Burp 控制台这个小插件非常适合入门不需要复杂逻辑熟悉请求对象、UI 输出、右键菜单注册。二、环境配置Burp 加载 Jython下载 jython-standalone.jar打开 Burp →Extender→Options在Python environment中选择刚才下载的 jython jar 包切换到Extensions标签点击Add选择扩展类型Python选择插件 py 文件即可加载。如果报版本错误更换对应版本的 Jython 包。社区版 Burp 不支持部分扫描相关 API写扫描类插件建议用专业版。三、完整插件源码带详细注释新建文件link_extractor.pyfrom 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(rhttps?://[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. 类定义与 registerExtenderCallbacksregisterExtenderCallbacks是插件入口函数强制必须实现。Burp 加载插件时自动调用这个方法传入callbacks对象这是我们和 Burp 交互的唯一通道。callbacks.getHelpers()获取工具助手类处理字节数组、URL 解析、编码、HTTP 包解析callbacks.setExtensionName()设置插件显示名称callbacks.registerContextMenuFactory(self)注册右键菜单能力在 Jython 中print 输出的内容会直接打印到 Burp Extender 的控制台窗口方便调试。2. 右键菜单 createMenuItemscreateMenuItems是右键菜单回调方法。context_menu.getSelectedMessages()获取当前选中的 HTTP 请求返回列表JMenuItem创建菜单按钮绑定点击事件点击后执行extract_link函数3. extract_link 核心逻辑判断用户是否选中请求获取响应包Burp 内部数据包是 byte 数组不能直接当字符串使用_helpers.bytesToString()把 byte 转字符串正则匹配 http/https 链接去重控制台输出结果弹窗提示。五、加载插件、测试使用将代码保存为link_extractor.pyBurp - Extender - Extensions - AddExtension type 选择 Python选中 py 文件加载成功控制台会打印加载成功提示。使用方法Proxy 抓包访问任意网页在 Proxy / HTTP history 列表选中这条请求右键选择菜单【提取响应中的所有链接】弹窗提示数量打开 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 转换直接强转容易乱码。八、高频踩坑清单❌ 直接 import requests、bs4、numpyJython 不支持 CPython 的第三方包只能使用 Jython 内置库 Burp API。网络请求必须调用 Burp 的 API 发送请求不能用 requests。❌ 忘记registerExtenderCallbacks或者函数名写错这是插件入口名字写错Burp 加载插件直接失败无报错提示。❌ 直接把 byte 数组当字符串处理Burp 的 request/response 都是byte[]必须使用self._helpers.bytesToString()转换。❌ 正则匹配中文乱码响应编码复杂时部分页面会出现乱码需要做编码判断或者直接使用原始字节匹配。❌ 右键菜单多次重复创建不要在循环重复 new JMenuItem会出现重复菜单项。❌ 社区版限制Burp Community 不支持主动扫描相关 APIIScannerCheck如果你想写主动扫描插件需要 Burp 专业版。九、进阶方向开发主动扫描插件简要介绍如果想做漏洞检测插件需要实现IScannerCheck接口注册扫描规则。Burp 在主动扫描每个请求时会回调doPassiveScan被动扫描、doActiveScan主动发包检测。被动扫描只分析现有流量不发包适合敏感信息检测、指纹识别主动扫描Burp 自动构造 payload 发包适合注入、未授权检测。被动扫描插件开发门槛更低推荐在掌握右键插件之后再学习 IScannerCheck。十、开发检查清单确认 Jython jar 包版本和 Burp 匹配代码实现 IBurpExtender保证 registerExtenderCallbacks 正确所有 HTTP 字节包使用 helpers 做类型转换增加 try 捕获异常避免插件崩溃先用简单场景测试逐步增加功能测试插件正常请求、无响应、空响应等边界场景所有功能在授权靶场测试不要直接访问外网业务站点。最后网络安全需要学习那些知识网络安全零基础入门学习路线规划初级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%免费】