前言:
前一段时间apace solr JMX因为配置不当出现远程代码执行漏洞,最近自己在看一套java系统时,发现该系统也存在JMX远程代码漏洞,于是乎就想研究下JMX这种通用型漏洞,下面我就从原理到利用对该漏洞做一个简单的梳理。
一、JMX服务和MBean
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX是一套复杂的机制,由于我们要讲的JMX远程代码漏洞和MBean相关,所以这里我们之介绍jmx和mbean相关的一些基础知识。
JMX是管理扩展,通过JMX我们可以监控管理我们的指定的java程序。但不是所有的java类都能被管理。只有按照特定格式编写的java类才能被jmx原理。这种特定格式机制我们称为Mbean。
我们先看一个简单的MBean,mbean首先需要定义一个接口,定义格式xxxMBean,
之后再定义一个实现该接口的类。
二、MBeanServer
对于已经实现的MBean,我们怎么进行监控和管理,这里就需要MBeanServer了。我们可以将MBeanServer理解为一个mbean的仓库,需要监控的mbean都需要先注册到仓库中。向MBeanServer注册mbean有两种方式,一是本地注册,二是远程注册(远程注册就为我们执行任意代码提供了可能,后面会细讲)。
我们先看一段简单的代码,本地向mbeanserver注册mbean。
public static void main(String[] args) throwsException{
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
//向MBeanServer 注册 mbean
ObjectName helloName = new ObjectName("HelloMbean:name=Hello");
mBeanServer.registerMBean(new Hello(), helloName);
Registry registry = LocateRegistry.createRegistry(1099);
//构造 JMXServiceURL
JMXServiceURL jmxServiceURL = new JMXServiceURL("service: