Jolokia读写文件新姿势

之前看到一个Jolokia新的利用姿势:

SSRF to RCE with Jolokia and MBeans

这篇文章介绍了在SSRF只能GET请求的场景下,Jolokia一些读写文件,加载.so文件的利用方法

我参考这篇文章,结合了之前APISandbox的一些打法出在了 NCTF 2021 上面


Java管理扩展(JavaManagementExtensions,JMX)是一种Java技术,它提供用于管理和监视应用程序、系统对象、设备(如打印机)和面向服务的网络的工具,这些资源由被称为MBean(Managed Bean)的对象表示。在JMX API中,可以动态加载和实例化类。可以使用Java动态管理工具包设计和开发管理和监视应用程序。

Jolokia是一个JMX-HTTP桥接器,它可以利用JSON通过HTTP实现JMX远程管理,具有快速、简单等特点。除了支持基本的JMX操作之外,它还提供一些独特的特性来增强JMX远程管理如:批量请求,细粒度安全策略等。

我们通过阅读官方文档可以知道,Jolokia URL模式大概是:/jolokia/action/package:MBeanSelector/method/param1/param2这个样子,使用/的时候需要用!转义

文章中提到了几种(GET请求触发)手法,分别是:

  • 使用vmSystemProperties获取JVM信息
  • 使用JavaFlightRecorder任意文件写
  • 使用compilerDirectivesAdd任意文件读
  • 使用jvmtiAgentLoad任意加载 .so
  • 使用vmLog写入日志文件

作者通过vmlog往Tomcat ROOT路径写jsp webshell来实现从SSRF到RCE的转变。

img

当时正在构思NCTF校赛出什么题目,看到这几种利用手法,就想着结合之前APISandbox的一些东西,出一道actuator的综合利用,题目设计大概是这样的:

一个正常的Springboot应用,/actuator配置里面暴露了一些本来不应该暴露的端点,其中就有jolokia,env等

img

直接访问/actuator/jolokia/会403,是因为我使用SpringSecurity限制了本地IP访问

用APIKit扫描,或者访问/actuator/mappings可以看到有一个隐藏的API/user/list

img

这个API返回XML数据,可以自然想到XXE。

为了不让XXE直接读文件,我加了waf过滤了除http协议之外的协议,预期是利用XXE来SSRF打/actuator/jolokia/

这儿有俩坑点,docker端口是开在58082的,SSRF的时候请求端口需要访问/actuator/env来获得,是8080

构造SSRF之后,访问/actuator/jolokia/list会发现报错:

img

这是因为/jolokia/list返回的数据太长了,而且里面有一些特殊符号会报XML document structures must start and end within the same entity.

于是后面给了附件pom.xml,可以本地起起来看一下有什么Mbean。

img

然后可以判断远程环境是否存在这个Mbean:

img

如果不存在返回的是上图,如果存在返回的是下图两种情况

img

那么便可以直接用com.sun.management:type=DiagnosticCommand/compilerDirectivesAdd/!/flag来读取flag了。

updatedupdated2022-10-302022-10-30
加载评论