· 更新于

IDE中调试BurpSuite插件

用 JDWP 把 Eclipse 或 IntelliJ IDEA 接到 Burp Suite 进程上,调试 Burp 插件。按 2017 年 Burp Suite Free 1.7.23 与 Eclipse Neon 的界面,把原先截图中的配置项写成可直接对照的步骤。

#BurpSuite#IDE#Eclipse

文章目录
  1. 准备
  2. 下载 Burp Suite
  3. IDE
  4. Burp Suite 插件工程
  5. 开始调试
  6. 通过下面命令启动 Burp Suite
  7. 配置远程调试工程
  8. 加载插件并进入断点

在开发 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 TypeStandard (Socket Attach)
Hostlocalhost
Port8888

接着打开 Source 标签,确认插件工程的源码目录在查找列表中。断点需要落在这份源码上。

点击 Debug。连接成功后,Eclipse 进入 Debug 视角,调试目标中会出现 Burp 进程,终端里的 Burp 会继续运行。

IntelliJ IDEA 的对应位置是 Run → Edit Configurations…,新增 Remote JVM Debug。Debugger mode 选择 Attach to remote JVM,Host 填 localhost,Port 填 8888,模块选择插件工程,然后启动这项配置。

加载插件并进入断点

原来的第二张截图是连接成功后的调试过程。按这个顺序确认断点可用:

  1. 在插件源码中给要观察的方法设置断点。
  2. 在 Burp 中打开 Extender → Extensions → Add。
  3. Extension type 选择 Java,加载插件工程编译出的 jar,或 Eclipse 工程的 class 输出目录。
  4. 执行会走到该断点的操作。使用 Logger++ 时,可以让它记录一条经过代理的请求。
  5. IDE 停在断点后,即可查看变量并单步执行。

修改源码后需要重新编译,并在 Extender 中重新加载插件。调试连接可以保持不断开。

如果点击 Debug 后提示连接被拒绝,先确认启动 Burp 的终端仍在运行,并且 IDE 中的端口也是 8888。