JAVA安全网JAVA安全网

生命不息,折腾不止。
--JAVA人自留地。

Exploiting Jolokia Agent with Java EE Servers

本文作者:RicterZ


**0x00 - About Jolokia**

Jolokia 是一个通过 HTTP 的 JMX 连接器,提供了类 RESTful 的操作方式,可以通过 POST JSON 的方式访问和修改 JMX 属性、执行 JMX 操作、搜索 MBean、列出 MBean 的 Meta-data 等。
图片 1.png

Jolokia 支持提供了多种 Agents,包括 WAR Agent、OSGi Agent、JVM Agent 或者 Mule Agent。其中 WAR Agent 支持了多种 Web Server:

JBoss 4.2.3, 5.1.0, 6.1.0, 7.0.2, 7.1.1, 8.0.0

Oracle WebLogic 9.2.3.0, 10.0.2.0, 10.3.6.0

Glassfish 2.1.1, 3.0.1, 3.1.2, 4.0.0

IBM Websphere 6.1.0.33, 7.0.0.11, 8.0.0.1, 8.5

Apache Tomcat 5.5.35, 6.0.37, 7.0.52, 8.0.3

Jetty 5.1.15, 6.1.26, 7.6.9, 8.1.9, 9.1.2

Resin 3.1.9

Jonas 4.10.7, 5.1.1, 5.2.1

Apache Geronimo 2.1.6, 2.2.1, 3.0.0

Spring dm Server 2.0.0.RELEASE

Eclipse Virgo 2.1.0

通过 Jolokia,可以方便的操作 MBean,通过 GET 的例子:

图片 2.png

或者 POST 一个 JSON:

图片 3.png

Jolokia 支持 READ、WRITE、SEARCH、EXEC、LIST 等操作,具体可以参考官方文档:https://jolokia.org/reference/html/index.html 。

**0x01 - Jolokia Security Issues**

  1. JNDI Injection
    Jolokia 支持一个叫做代理模式(Proxy Mode)的东西,是为了解决不能将 Jolokia Agent 部署在目标平台上的问题。具体架构如下:
    图片 4.png

可以通过向 Jolokia 发送 POST 请求来触发:

图片 5.png

熟悉 Java 安全的朋友可能会注意到,这里可能有一个 JNDI 注入。的确,在 WAR Agent 的情况下,此处存在一个 JNDI 注入,问题发生在 agent\jsr160\src\main\java\org\jolokia\jsr160\Jsr160RequestDispatcher.java:

图片 6.png

当 Web Container 将请求的交由 Jsr160RequestDispatcher 处理时,Jolokia Agent 创建连接,导致 JNDI 注入。在 WAR Agent 里,默认是由 Jsr160RequestDispatcher 处理的,这一点在 web.xml 也有体现:

图片 7.png

那么,攻击者只需发送一个带有 Evil JMXRMI 的地址的 JSON,即可利用 JNDI 在目标机器上执行命令。

图片 9.png

  1. Information Disclosure
    Jolokia 中有一个默认注册的 MBean:com.sun.management:type=HotSpotDiagnostic ,这个 MBean 中存在 dumpHeap 方法,可以 dump 内存到指定的目录。同时在低版本的 Java 中(比如 1.8.0_11),导出的文件名可以设置任意名称,而非 .hprof 后缀。

下载后可以通过分析文件获取一些敏感信息:

图片 10.png

如上图就获得了 Tomcat 管理员的账号密码,可以通过部署 WAR 文件的方式进行 getshell。

图片 11.png

**0x02 - Tomcat with Jolokia**

  1. DoS
    部署了 Jolokia 后,可以访问 /jolokia/list 查看可用的 MBean,通过翻阅可以发现 Tomcat + Jolokia 的情况下存在一些敏感操作,比如关闭服务:
    图片 12.png

这样会造成 DoS,虽然没啥用。

  1. Create Admin Account
    问题在 User:database=UserDatabase,type=UserDatabase 下,其包括了 createRole、createUser 等操作,攻击流程为:

图片 13.png

接着利用 test233 / test233 登陆即可。

图片 14.png

**0x03 - JBoss with Jolokia**

  1. DoS
    关闭服务:
    图片 15.png
  1. Deploy WAR

JBoss 中,通过 JMX Console 部署 WAR 是最为人所知的,JBoss 中的 jboss.system:service=MainDeployer 提供了这个方法。由于此方法是重载的,所以需要指定一个 signature,也就是下图的deploy(java.lang.String):

图片 16.png

接着通过访问 /test 即可进入 webshell。

图片 17.png

**0x04 Others**

Weblogic 暴露出很多 MBean,但是有一些方法存在限制:

图片 18.png

可能会有其他的 MBean 可以进行操作,但是由于 MBean 繁多,没有太多精力去看。Jetty 没有暴露什么 MBean,所以暂时没有什么方法。ActiveMQ 有一些 MBean,粗略看了下没有发现什么问题,如果大家发现了,可以多多交流。

**0x05 Reference**

https://jolokia.org/reference/html/index.html

https://www.cvedetails.com/cve/CVE-2018-1000130/

写在最后:Jolokia 可以暴露出更多的攻击面,通过这些攻击面进行操作来获取更高的权限,本文仅仅分析了部分 Java EE Servers 所呈现出来的 MBean,但是由于 Jolokia 支持多种 Agent,所以暴露出的东西不止如此。

本文来源:https://mp.weixin.qq.com/s/blpFK0oigTGtI_eVJxEL0w

未经允许不得转载:JAVA安全网 » Exploiting Jolokia Agent with Java EE Servers

评论 3

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. 黄老师好!

    Black nightmare (2020-09-17) 回复
  2. 学习了

    梦里梦外 (2020-05-08) 回复
  3. 老师

    轨迹 (2018-04-02) 回复