vulhub+idea远程调试 实现漏洞分析学习
使用场景:
很多时候我们在漏洞环境搭建上面消耗了巨大的时间,之前偶然在网上看到了一篇文章关于vulhub的docker环境+idea实现weblogic漏洞远程调试分析的文章,后来想着试着把其他的vulhub里其他java语言相关的漏洞也尝试进行远程调试,下面分享一些环境的配置技巧。IDEA远程调试
要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是:
-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=127.0.0.1:5555
什么是JVM?
JVM(Java Virtual Machine,Java虚拟机)
Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行。因此在运行时,Java源程序需要通过编译器编译成为.class文件。众所周知java.exe是java class文件的执行程序,但实际上java.exe程序只是一个执行的外壳,它会装载jvm.dll(windows下,下皆以windows平台为例,linux下和solaris下其实类似,为:libjvm.so),这个动态连接库才是java虚拟机的实际操作处理所在。JVM是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。所以,JAVA虚拟机JVM是属于JRE的,而现在我们安装JDK时也附带安装了JRE(当然也可以单独安装JRE)。
什么是JVM?
JVM参数说明
-Xdebug:是通知JVM工作在DEBUG模式下。
-Xrunjdwp:是通知JVM使用(java debug wire protocol)来运行调试环境。
Transport:用于在调试程序和 VM 使用的进程之间通讯,指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另有dt_shmem指用共享内存方式,其中,dt_shmem只适用于Windows平台。
Server:VM 是否需要作为调试服务器执行。
suspend指明,是否在调试客户端建立起来后,再执行JVM。
address:调试服务器的端口号,客户端用来连接服务器的端口号。
Docker配置远程调试:
CVE-2020-1938
docker-compose.yml配置
配置vulhub漏洞文件下的docker-compose.yml。
version: '2'
services:
tomcat:
image: vulhub/tomcat:9.0.30
ports:
- "8080:8080"
- "8009:8009"
- "5005:5005"
environment:
TZ: Asia/Shanghai
JPDA_ADDRESS: 5005
JPDA_TRANSPORT: dt_socket
command: ["catalina.sh", "jpda", "run"]
idea配置::
这里需要先把vulhub-docker中tomcat漏洞环境拷贝到本地,然后使用idea打开并配置远程调试
在需要调试的地方打上断点,开始远程调试,我们看到idea已经成功连接上了远程调试端口
攻击执行:
加载攻击payload
接下来就可以对断点处代码进行分析了。
参考文章:
https://blog.csdn.net/qq_41701956/article/details/80020103
https://www.jianshu.com/p/302dc10217c0
https://blog.csdn.net/weixin_44055234/article/details/108824772
https://www.awaimai.com/2608.html
https://www.jianshu.com/p/a9008acc0654
http://blog.topsec.com.cn/struts2-s2-059-%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90/
https://www.cnblogs.com/rutor/p/10245811.html