以下文章来源于弱口令安全实验室 ,作者白袍 | dduo
在分析各种漏洞的时候,环境搭建总是非常麻烦,利用docker+远程调试可以很快得到一个分析环境,本文介绍了Java远程调试各类组件的一些技巧和方法。
以冰蝎为例,新建一个Java项目,将冰蝎的jar包拷贝进lib
文件夹,右键选择Add as Library
:
调试选项:
启动冰蝎:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -jar Behinder.jar
开始debug:
使用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/lib
和modules
两个文件夹为依赖项:
同样配置远程调试,端口保持和docker-compose.yml
一致,启动调试:
以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
中一致:
在调试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
目录:
之后就可以正常调试了:
这个方法主要应用在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 file
,To directory
选择src
目录里新建的目录:
修改完成后就可以进行编译,选择Build-Build Artifacts
,在out
目录下得到jar包:
-END-
本文作者:白袍
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/177503.html