首页
社区
课程
招聘
[翻译]使用Visual Studio Code开发和调试Java Burp扩展
发表于: 2019-12-29 23:03 7751

[翻译]使用Visual Studio Code开发和调试Java Burp扩展

2019-12-29 23:03
7751

几天前,我发布了Bug Diaries Burp扩展。这是一个Burp扩展程序,使社区(免费)版 Burp 拥有相似的issue功能 。由于某些原因,现在决定用Java重写。这是我学习切换到Java系列文章的第一部分。

本部分讨论如何设置环境以使用Visual Studio Code进行开发。诸如自动完成,Gradle构建以及最重要的调试之类的事情。

克隆存储库可以跳过博客中的某些步骤。如果不熟悉Gradle和Burp开发,我还是建议自己做一遍,克隆以下存储库:

原始的扩展是用 Python 写的。直到今天,我所有的 Burp 扩展都是用 Python 写的,在这过程中我记录了我所学到的东西:

在Burp的IMesageEditors上启用右键单击功能时遇到很多问题。长话短说,我决定改用Java重写扩展。

以下就是我开发虚拟机(VM)怎么部署的方法。

https://aka.ms/vscode-java-installer-win上也有一个给Java开发人员用的VS Code安装程序。 不过我没有使用。

因为Oracle有严格的许可要求,所以我使用OpenJDK。

下载 OpenJDK 11(请参考下面的原因)。我使用了 AdoptOpenJDK.net 的安装程序。

如果你是手动解压 OpenJDK,修改坏境变量:

现在执行 java -version 应该返回像这样的内容(记得在设置完 PATH 后再重新打开一个新的命令行):

注意:如果安装 JDK 13 或更高版本,无法使用 Burp 的 exe 文件加载你的扩展程序。截至2019年12月,Burp 的 exe 文件都是使用由 JDK 11 (版本 55.0) 构建的捆绑 JRE。如果尝试加载用更高版本的 Java 构建的扩展,则会出现此错误:

解决方法:

Gradle 没有安装程序,所以需要按照以下步骤手动进行安装。

现在执行gradle -version 应该返回像这样的内容:

创建用于开发扩展的目录,在此目录中运行以下命令:

这一步完成后将创建一堆目录和文件。

打开build.gradle并粘贴以下内容。

阅读文件中的注释来查看每个部分的功能,最重要的部分是添加 Burp Extender interface Maven repositor ,这为我们提供了 构建支持 以及使用IntelliCode (這遈樭夲), 重要的代码提示功能。

任何其它的依赖项可以像 Burp extender interface 一样被添加。比如这个示例,可以这样添加 Google‘s Gson version 2.8.6

无论本地 Gradle 版本是多少,Gradle Wrapper 都是获得可靠构建的一种方法。需要 Gradle 来安装 Wrapper。

如果你只是想启动 Wrapper,也得先安装 Gradle。在扩展目录中执行 gradle wrapper 。为了使用 Wrapper 构建项目,请把你命令中的 gradle 替换为 gradlew (*nix) 或 gradlew.bat (Windows),例如 gradlew.bat build

创建 src\burp 目录,这个目录将会包含 burp 的包

src\burp 中创建一个名为 BurpExtender.java 的文件

编辑 BurpExtender.java 并添加上这段代码:

注意:如果你的扩展程序只有一个包(或者几个文件),你可以把你的所有文件都直接放到 src 目录下

为了让我们敲代码更轻松,我们把 bigjar Gradle 任务分配给 VS Code 中的默认构建任务,这一点很重要,如果你的扩展使用了非 Burp 依赖项(像上面的 gson)。在这种情况下,你需要publish 这个 jar 文件。

Ctrl+Shift+PF1 打开 VS Code 的命令面板

输入 task 并选择 Configure Default Build Task.

选择 Create tasks.json file from template.

选择 Others.

打开 .vscode\tasks.json 并且粘贴进以下内容:

现在我们可以这样构建项目:

推荐按Ctrl+Shift+B ,这样更快而且看起来很 1337(黑客俚语)。

Terminal (菜单) > Run Task (子菜单) > gradle

打开命令面板,输入 tasks 然后选择Run Build Task.

执行一次即会下载 Burp Extender 接口并构建库,输出的 jar 文件将会被存放在build\libs\burp-sample-extension-java-all.jar

我们的构建工作一切正常,但你可能已经注意到,VS Code 无法识别从 burp 包中导入的接口。

每次添加新的依赖,我们都需要清理 Java 语言服务器。否则我们会再次遇到一样的错误.

现在我们就有了 IntelliCode 支持.

注意:这是大多数 vscode-java 扩展问题的解决方案。

让我们添加一些代码到扩展中展示如何在每次编译之后测试扩展。

修改 BurpExtender.java,看下 IntelliCode 是如何让我们更轻松地编写代码的。

这段代码打印了扩展文件的名字到控制台。使用Ctrl+Shift+B 编译扩展。

jar 文件会出现在 build\libs目录下。

BurpSuite配置:

我的扩展开发周期是:

在 Burp 中使用扩展(监视器2)

这是本篇文章最重要的一部分,我将讨论如何在 VS Code 中调试扩展程序。从网上我找到了这些参考资料:

Eric Gruber 在 https://blog.netspi.com/debugging-burp-extensions/ 上的扩展程序调试展示了如何使用 IntelliJ 来调试 Burp,它给了我使用 jdwp 的想法。

Derek(@StackCrash)在博客里 https://www.itsecguy.com/my-first-burp-suite-extension/ 中提到,将 burp.StatBurp 添加到项目属性的 Run 部分即可。

VS Code 的 Java 扩展包中自带一个 Java 调试器,要使用它,我们需要使用以下命令行选项运行 Burp:

这将在 localhost:80000 上运行调试服务器。请注意,互联网上的大多数示例都只是以端口来运行,这样服务器会默认监听 0.0.0.0,这样显然不好(除非你能从远程主机来进行调试)。

接下来,我们必须使用以下参数运行 Burp 的 jar 文件。Burp 的 jar 文件默认安装在以下路径:

完整的命令:

你可能已经在 Burp 的目录中看到了 BurpSuiteCommunity.vmoptions 文件,我们可以向里面添加运行时参数,向文件中添加下面一行来启用调试:

现在我们可以运行 exe 然后调试我们的扩展程序。我已经在 Git 仓库中包含了一个 .vmoptions 样本文件 。

接下来,我们必须在 VS Code 中启动 Java 调试器并连接到调试端口。在 callbacks.printOutput(fileName); 这一行设置断点,然后选择 Debug (菜单) > Start Debugging 或 按下 F5

这将创建并打开 .vscode\launch.json 文件 ,粘贴下面这段代码到里面并保存它:

这个文件非常简单,唯一重要的参数就是 hostnameport ,指向上面的调试端口(localhost:8000)。

再次开始调试,Windows 防火墙可能会弹出来。如果可以不是在调试一台远程计算机,请按取消。如果防火墙对话框没关掉但调试器已经超时了,就按 F5 重新调试。

待调试器被附加后,通过在复选框上 Ctrl+鼠标右击 来重新加载扩展,然后能看到调试器成功断在断点处。

非常漂亮也超级有用。

如果查看 build 目录里,会看到很多类文件,我们不希望这些出现在源代码控制中,所以把 build 目录添加到 .gitignore 文件中是明智的,但这意味着我们最终的 jar 文件也将被忽略,我们希望最终的 jar 文件出现在仓库中,以便人们可以下载并使用它。

我们可以通过修改 build.gradle 文件中的 libDirName 来更改扩展程序 jar 文件的存放路径。

此配置将最终的 jar 文件复制到 @jar\burp-sample-extension-java-all.jar

用 Java 创建一个简单的 Burp 扩展

安装 Gradle 和 编译扩展

在 VS Code 中开启 Java IntelliCode

在 VS Code 中调试 Java Burp 扩展

更改 jar 文件的存放路径

原文链接:https://parsiya.net/blog/2019-12-02-developing-and-debugging-java-burp-extensions-with-visual-studio-code/#debugging-the-extension-with-vs-code

翻译:lipss

校对:nxe

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
openjdk version "11.0.5" 2019-10-15
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.5+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.5+10, mixed mode
java.lang.UnsupportedClassVersionError: burp/BurpExtender has been compiled by
a more recent version of the Java Runtime (class file version 57.0), this
version of the Java Runtime only recognizes class file versions up to 55.0
gradle -version

------------------------------------------------------------
Gradle 6.0.1
------------------------------------------------------------

Build time:   2019-11-18 20:25:01 UTC
Revision:     fad121066a68c4701acd362daf4287a7c309a0f5

Kotlin:       1.3.50
Groovy:       2.5.8
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          11.0.5 (AdoptOpenJDK 11.0.5+10)
OS:           Windows 10 10.0 amd64
// Apply the Java plugin
apply plugin: 'java'

// Use Maven (because Burp Extender is on Maven)
repositories {
     mavenCentral()
}

dependencies {
    // Add the Burp Extender interface
    compile 'net.portswigger.burp.extender:burp-extender-api:2.1'
}

sourceSets {
    main {
        java {
            // Set the source directory to "src"
            srcDir 'src'
        }
    }
}

// Create a task for bundling all dependencies into a jar file.
task bigJar(type: Jar) {
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}
dependencies {
    // Add the Burp Extender interface
    compile 'net.portswigger.burp.extender:burp-extender-api:2.1'
    compile 'com.google.code.gson:gson:2.8.6'
}
package burp;

public class BurpExtender implements IBurpExtender
{
    //
    // implement IBurpExtender
    //
    @Override
    public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks)
    {
        // set our extension name
        callbacks.setExtensionName("Burp Sample Extension Java");
    }
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-1-10 15:25 被lipss编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//