使用 Cursor 自制 Burp 越权测试插件(实战记录)
这篇文章记录一次真实需求:我在做越权测试时,需要批量把“高权限请求”换成“低权限请求头”去重放,看看接口是否存在越权。Burp Suite 自带工具可以做,但手工操作太慢,所以我让 Cursor 帮我写了一个插件。
1. 业务场景
我有一个已开通权限的账号,发出的请求如下(节选):
POST /loan/user/userinfo/search HTTP/1.1
Host: example.com
Cookie: ...; Admin-Token=***; MainCommonToken=***; 4A-access-token=***;
Content-Length: 255
Content-Type: application/json;charset=UTF-8
User-Agent: Mozilla/5.0 ...
Origin: https://example.com
Referer: https://example.com/loan
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
{"user_id":"123","mobile_no":"","name":"","id_no":"","credit_page":{"total":0,"page":1,"pageSize":10},"order_page":{"total":0,"page":1,"pageSize":10},"repay_page":{"total":0,"page":1,"pageSize":10},"account_page":{"total":0,"page":1,"pageSize":10}}
另一个账号没有开通产品,低权限请求头如下(节选):
Host: example.com
Cookie: sensorsdata2015jssdkcross=...; Saas-Token=***; MainCommonToken=***; Admin-Token=***; ...
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
X-Main-Params: ***
Origin: https://example.com
Referer: https://example.com/
需求很明确:
- 模拟低权限账号访问高权限接口
- 攻击者只知道接口与参数,其他的字段一概不知
- 低权限请求头必须完整保留,因为这就是攻击者拥有的所有字段
- 请求方法与 body 保持不变
2. 插件目标
插件需要做到:
- 支持粘贴低权限请求头
- 原请求 + 低权限请求 + 无 Cookie 请求 三种对比
- 自动高亮疑似越权
- 自动比较响应 body 差异
- 自动监听 Proxy 流量
- 中文正常显示
- 一键清空列表
3. 关键实现思路
核心逻辑很简单:
- 复用原请求的 URL / Method / Body
- 替换为低权限请求头
- 发送一次低权限请求
- 可选:发送一次“无 Cookie”请求
- 自动对比响应体(JSON 差异或 hash 对比)
4. 结果展示
下面的样式是没有经过任何美化的,cursor直接做出来的,还是相当好用了
5. 结语
这个插件属于实战工具,不复杂但很高效。核心价值是:把“手工替换 + 手工对比”的工作变成自动流程,节省大量时间。
可直接复用的提示词
下面这段是我用来让 Cursor 生成插件的提示词,可以直接使用:
你是 Burp Suite 插件开发者(Jython)。请帮我写一个插件,实现越权测试自动化:
需求:
1) 我会粘贴“低权限账号”的完整请求头(每行一个 header),插件要保留全部字段。
2) 当我选中某个请求时,插件要用“原请求的 URL / Method / Body”+“低权限请求头”发送一次请求。
3) 再额外发送一次“无 Cookie 请求”(用原请求头,但删除 Cookie)。
4) 显示结果:原始 / 低权 / 无 Cookie 的状态码、长度,并自动对比响应体:
- JSON 进行字段 diff
- 非 JSON 用 hash/长度对比
5) 如果低权限或无 Cookie 的响应体与原始一致,则标记为“疑似越权”,整行高亮。
6) 界面需要:表格 + 详情面板,点击行可查看三组请求/响应,支持中文显示(gzip/deflate 解压,UTF-8/GBK/GB18030)。
7) 支持自动模式:设置目标域名后,只要 Proxy 抓到请求就自动测试。排除 png/jpg/js/css 等静态资源。
8) 右侧有保存设置按钮、清空列表按钮。
输出:给我完整可运行的 Jython 插件代码。