· 更新于
IDE中调试BurpSuite插件
用 JDWP 把 Eclipse 或 IntelliJ IDEA 接到 Burp Suite 进程上,调试 Burp 插件。按 2017 年 Burp Suite Free 1.7.23 与 Eclipse Neon 的界面,把原先截图中的配置项写成可直接对照的步骤。
在开发 Burp Suite 插件的过程中积累的调试经验,特此分享。
本文写于 2017 年,演示版本是 Burp Suite Free 1.7.23 与 Eclipse Neon.3 Release (4.6.3)。当时的两张配置截图已经无法找回,下面改为按对话框中的字段说明。新版本的菜单名称可能不同,但 JDWP 远程调试的方法仍然适用。Java 9 及更新版本通常要把监听地址写成
address=*:8888。
准备
下载 Burp Suite
我这里用的是 Burp Suite Free Edition v1.7.23。
IDE
可以使用的 Java IDE 有 Eclipse IDE 或者 IntelliJ IDEA。演示使用的是 Eclipse Neon.3 Release (4.6.3)。
Burp Suite 插件工程
这里我使用的是 GitHub 上一个开源项目 Logger++。先把工程导入 IDE,并确认它能够编译。
开始调试
Burp 和插件源码不在同一次普通运行里。正确顺序是:Burp 先打开调试端口,IDE 再连接这个端口。插件源码中的断点只有在连接成功后才会生效。
通过下面命令启动 Burp Suite
在 burpsuite_free_v1.7.23.jar 所在目录执行:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888 -jar burpsuite_free_v1.7.23.jar
参数含义如下:
transport=dt_socket:通过套接字传递调试信息。server=y:由 Burp 监听端口,等待 IDE 连接。suspend=n:调试器尚未连接时,Burp 也继续启动。改成y时,Burp 会停住,直到 IDE 连上。address=8888:监听本机 8888 端口。Java 9 及以后写成address=*:8888。
不要关闭这个终端。Burp 窗口能正常出现,就表示它已经在等待调试连接。
配置远程调试工程
原来的第一张截图是 Eclipse 的远程调试对话框。打开已导入的 Logger++ 工程,选择 Run → Debug Configurations…,在左侧双击 Remote Java Application 新建一项配置,然后按下面填写:
| 字段 | 值 |
|---|---|
| Name | 任意名称,例如 Burp |
| Project | 插件工程,例如 Logger++ |
| Connection Type | Standard (Socket Attach) |
| Host | localhost |
| Port | 8888 |
接着打开 Source 标签,确认插件工程的源码目录在查找列表中。断点需要落在这份源码上。
点击 Debug。连接成功后,Eclipse 进入 Debug 视角,调试目标中会出现 Burp 进程,终端里的 Burp 会继续运行。
IntelliJ IDEA 的对应位置是 Run → Edit Configurations…,新增 Remote JVM Debug。Debugger mode 选择 Attach to remote JVM,Host 填 localhost,Port 填 8888,模块选择插件工程,然后启动这项配置。
加载插件并进入断点
原来的第二张截图是连接成功后的调试过程。按这个顺序确认断点可用:
- 在插件源码中给要观察的方法设置断点。
- 在 Burp 中打开 Extender → Extensions → Add。
- Extension type 选择 Java,加载插件工程编译出的 jar,或 Eclipse 工程的 class 输出目录。
- 执行会走到该断点的操作。使用 Logger++ 时,可以让它记录一条经过代理的请求。
- IDE 停在断点后,即可查看变量并单步执行。
修改源码后需要重新编译,并在 Extender 中重新加载插件。调试连接可以保持不断开。
如果点击 Debug 后提示连接被拒绝,先确认启动 Burp 的终端仍在运行,并且 IDE 中的端口也是 8888。