学习
实践
活动
专区
工具
TVP
写文章
专栏首页云鼎实验室的专栏Exploiting Jolokia Agent with Java EE Servers

Exploiting Jolokia Agent with Java EE Servers

0x00 - About Jolokia

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

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 的例子:

或者 POST 一个 JSON:

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 部署在目标平台上的问题。具体架构如下:

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

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

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

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

2. Information Disclosure

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

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

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

0x02 - Tomcat with Jolokia

1. DoS

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

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

2. Create Admin Account

问题在 User:database=UserDatabase,type=UserDatabase 下,其包括了 createRolecreateUser 等操作,攻击流程为:

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

0x03 - JBoss with Jolokia

1. DoS

关闭服务:

1. Deploy WAR

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

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

0x04 Others

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

可能会有其他的 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,所以暴露出的东西不止如此。

此外,这次分析仅仅是在业务层面上进行分析,没有跟进到源码层面。可能会有如下情况:某个 MBean 进行了 JNDI lookup,或者远程下载文件保存在本地,反序列化某一些内容等等,通过 Jolokia 进行操作可以二次利用这些问题来 RCE。这就需要具体情况具体分析了,本文如有错误,欢迎指正 :D

文章分享自微信公众号:
云鼎实验室

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:RicterZ
原始发表时间:2018-03-28
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 性能监控之Telegraf+InfluxDB+Grafana实现JMX实时监控

    性能测试需要监控服务端 JVM 信息,Java 虚拟机 (JVM) 提供操作管理和监测提供了一套完整框架,即 JMX(Java 管理扩展),我们需要做到采集其所...

    高楼Zee
  • Spring-Boot-Actuator漏洞利用总结

    Spring Boot Actuator端点通过 JMX 和HTTP 公开暴露给外界访问,大多数时候我们使用基于HTTP的Actuator端点,因为它们很容易通...

    半月弧
  • 开发者openshift4使用入门教程 - 16 - 使用init container挂载pinpoint APM监控

    首先定义一个emptyDir类型的卷pinpoint-agent-1,initcontainers容器启动的时候,将这个pinpoint-agent-1卷挂载到...

    东风微鸣
  • Vert.x工具—使用Dropwizard Metrics对指标进行监控(Metrics使用教程)

        最近项目中需要针对Vert.x的运行效率进行监控,查阅Vert.x官文,发现目前提供了Dropwizard和Hawkular两种开箱即用的工具。本文将介...

    随风溜达的向日葵
  • Jolokia架构介绍 原

        虽然jolokia是为了满足JSR-160的要求,但是他和JSR-160连接器有巨大的差异。其中最引人注目的区别是jolokia传递数据是无类型的数据(...

    随风溜达的向日葵
  • 通过JMX监控Spring Boot应用

    在Spring Boot应用的健康监控一文中,我们通过Spring Boot Actuator对外暴露应用的监控信息,除了使用HTTP获取JSON格式 的数据之...

    阿杜
  • 顶级Javaer,常用的 14 个类库

    昨天下载下来Java16尝尝鲜。一看,好家伙,足足有176MB大。即使把jmc和jvisualvm给搞了出去,依然还是这么大,真的是让人震惊不已。

    xjjdog
  • SpringBoot官宣:正式弃用 Java 8

    点击上方蓝色字体,选择“设为星标” 回复”学习资料“获取学习宝典 Spring官方发布了Spring Boot 3.0.0的第一个里程碑版本M1。 下面一...

    猿天地
  • SAP 云平台的一些有用链接 - 保证持续更新

    SAP Cloud Platform console client for the Neo environment enables development, d...

    Jerry Wang
  • Spring Boot官宣:正式弃用 Java 8,最低要 Java 17!

    技术不断更新,这不springboot又开始了新的发布!乔戈里带大家一起看看最新的更新。

    乔戈里
  • SpringBoot官宣:正式弃用 Java 8

    2022年1月20日,Spring官方发布了Spring Boot 3.0.0的第一个里程碑版本M1 。

    乔戈里
  • 渗透测试-如何高效率挖掘漏洞

    21、22、3306等远程端口,可使用超级弱口令工具或者railgun自带模块进行暴力破解

    hyyrent
  • jvm参数学习

    晓果冻
  • Spring Boot 3.0.0 发布第一个里程碑版本M1,你的 Java 升到 17 了吗?

    2022年1月20日,Spring官方发布了Spring Boot 3.0.0的第一个里程碑版本M1。

    程序猿DD
  • elk基于jolokia监控springboot应用jvm方案

    目前大部分应用都采用springboot 的方式部署,springboot 采用jar包发布,而jvm的运行状态又比较关键,因此用elk对jvm监控进行了集成,...

    冬天里的懒猫
  • 生还是不生? SpringBoot3 版本有起飞前兆,最小依赖Java17!

    一直以来,Java8都是Java社区心头的痛。因为它代表着以稳定性为主的企业管理层,与拥抱变化为主的底层码农层之间的、爱的魔力拉锯战。

    xjjdog
  • SpringBoot官宣:正式弃用 Java 8 啦

    点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 |...

    芋道源码
  • Benefits of having web app for your business

    Benefits-of-Web-Application-Development.png

    用户4822892
  • Awesome Java - 2017 Java 资源大合集

    A curated list of awesome Java frameworks, libraries and software.

    大数据工程师-公子

扫码关注腾讯云开发者

领取腾讯云代金券