Java调试修改小技巧

2022-06-29 6,945

在分析各种漏洞的时候,环境搭建总是非常麻烦,利用docker+远程调试可以很快得到一个分析环境,本文介绍了Java远程调试各类组件的一些技巧和方法。

1. jar包远程调试

以冰蝎为例,新建一个Java项目,将冰蝎的jar包拷贝进lib文件夹,右键选择Add as Library

调试选项:

启动冰蝎:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -jar Behinder.jar

开始debug:

2. weblogic远程调试

使用vulhub的环境,以CVE-2017-10271为例,进入其文件夹,修改docker-compose.yml,增加一个调试端口:

version: '2'
services:
 weblogic:
   image: vulhub/weblogic:10.3.6.0-2017
   ports:
    - "7001:7001"
    - "8453:8453"

启动容器,进入容器环境,修改/root/Oracle/Middleware/user_projects/domains/base_domain/bin/setDomainEnv.sh,添加这两句:

重启容器后再次进入容器,将/root/Oracle/Middleware/modules/root/Oracle/Middleware/wlserver_10.3这两个文件夹压缩为压缩包,拷贝出容器:

zip -q -r modules.zip ./modules
docker cp 2e44342c215d:/root/Oracle/Middleware/modules.zip ~/modules.zip

将这两个压缩包拷贝至一个项目文件夹中解压,使用IDEA打开,添加wlserver_10.3/server/libmodules两个文件夹为依赖项:

同样配置远程调试,端口保持和docker-compose.yml一致,启动调试:

3. Tomcat远程调试

CVE-2017-12615为例,修改docker-compose.yml

version: '2'
services:
 tomcat:
   build: .
   ports:
    - "8080:8080"
    - "5005:5005"

启动容器,添加JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"/usr/local/tomcat/bin/catalina.sh:

重启容器,将/usr/local/tomcat/lib拷贝出来:

docker cp 44abbec28838:/usr/local/tomcat/lib ~/tomcatlib

tomcatlib文件夹放入项目目录,添加为依赖项。开始远程调试,端口保持和docker-compose.yml中一致:

4. 其他情况

在调试shiro550漏洞时,镜像里环境部分是用java -jar的方式启动的,所以修改时也是一样,在docker-compose.yml处修改其启动命令:

version: '2'
services:
 web:
   image: vulhub/shiro:1.2.4
   ports:
    - "8080:8080"
    - "5005:5005"
   command: java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar /shirodemo-1.0-SNAPSHOT.jar

拷贝出shirodemo-1.0-SNAPSHOT.jar,添加进依赖,会发现jar包里还有jar,无法查看其源码:

解决办法是将shirodemo-1.0-SNAPSHOT.jar解压放入src目录,添加src/BOOT-INF/lib文件夹为依赖:

再在Modules-Dependencies里添加src/BOOT-INF目录:

之后就可以正常调试了:

5. 修改jar包代码并重新打包

这个方法主要应用在Cobalt Strike的修改里,先使用IDEA自带的java-decompiler.jar反编译Cobalt Strike的源码:

java -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true cs_original/cobaltstrike.jar cs_src

cs_original/cobaltstrike.jar是原包,cs_src是反编译后的输出目录,得到一个jar后缀文件,解压缩即可得到反编译后的源码。

IDEA新建项目,将反编译后的所有源码放入decompiled_src目录,原包放入lib目录,再在File-Project Structure-Modules-Dependencies中添加原包:

File-Project Structure-Artifacts中添加JAR,主类为aggressor.Aggressor

需要修改相应文件时,右键选择Refactor-Copy fileTo directory选择src目录里新建的目录:

修改完成后就可以进行编译,选择Build-Build Artifacts,在out目录下得到jar包:


-END-


本文作者:白袍

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/182076.html

Tags:
评论  (0)
快来写下你的想法吧!

白袍

文章数:5 积分: 40

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号