vulhub ActiveMQ任意文件写入漏洞 (CVE-2016-3088)

本文详述了CVE-2016-3088漏洞的背景、漏洞原理,包括webshell、cron反弹shell和jetty.xml修改的利用方法,以及如何获取权限和防御建议。

引言

今天来复现一下ActiveMQ任意文件写入漏洞 (CVE-2016-3088)
vulhub的官网有对这个漏洞的英文介绍ActiveMQ Arbitrary File Write Vulnerability (CVE-2016-3088)
本文主要分为三个部分:

  1. 漏洞原理(基于vulhub)以及知识点引申
  2. 漏洞复现
  3. 漏洞引发的思考

漏洞介绍和知识拓展

背景简述和漏洞详情部分来源于vulhub

背景简述

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

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

  1. 其使用率并不高

  2. 文件操作容易出现漏洞

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

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

漏洞详情

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

文件写入有几种利用方法:

  1. 写入webshell

  2. 写入cron或ssh key等文件

  3. 写入jar或jetty.xml等库和配置文件

写入webshell的好处是,门槛低更方便,但前面也说了fileserver不解析jsp,admin和api两个应用都需要登录才能访问,所以有点鸡肋;写入cron或ssh key,好处是直接反弹拿shell,也比较方便,缺点是需要root权限;写入jar,稍微麻烦点(需要jar的后门),写入xml配置文件,这个方法比较靠谱,但有个鸡肋点是:我们需要知道activemq的绝对路径。

知识拓展

背景简述和漏洞详情里面有几点和漏洞强相关的知识点是我之前没有接触过的,需要学习和理解一下:

  1. cron是什么

  2. 反弹shell是什么

  3. cron或ssh key和反弹shell的关系

  4. jetty和jetty.xml是什么

  5. linux文件权限

下面来一个一个了解一下:

cron是什么

在这个链接找到了cron的介绍:Cron是什么?利用Cron Job自动执行定时任务
简单来说,cron是linux系统的守护进程,用于在特定时间自动执行重复任务。

反弹shell是什么

简单来说反弹shell(reverse shell)就是反向的shell,是相对于标准shell的一个概念。
标准shell是攻击者作为客户端去连接目标服务器;
而反弹shell是攻击者作为服务器,监听某端口,而目标设备作为客户端主动连接攻击者。
反弹shell的应用场景:

  1. 目标机在局域网内
  2. 目标机ip地址是动态的
  3. 有防火墙等限制,目标机只能发请求,不能收请求
  4. 不确定目标机何时具备连接条件

这部分主要参考:反弹shell原理与实现
至于具体的反弹shell百度一搜全都是,就不说了。

cron或ssh key和反弹shell的关系

cron和反弹shell的关系很好理解,就是往目标机的定时任务文件中写反弹shell脚本;
ssh key和反弹shell的关系,从网上查到的资料看,是往目标机里面写了攻击机的ssh key(公钥)之后,攻击机就可以免密登录目标机。可是这不还是攻击机做客户端,目标机做服务器么?还是需要目标机开启ssh服务,并且允许攻击机连接,和反弹关系不大呀。。。小小的脑袋,大大的问号,也不知道是牵强附会,还是我没找到正确的资料。。
这部分主要参考:
Linux反弹shell
不请自来 | Redis 未授权访问漏洞深度利用

jetty和jetty.xml是什么

简单来说,jetty是一种开源的servlet容器,是基于java的web容器,和tomcat是一类东西。jetty是通过API或者XML文件进行配置的,而jetty.xml是jetty的一个重要配置文件。

linux文件权限

vulhub官网教程中,据不完全统计,至少有两句话提到了权限相关的问题:

This method requires the ActiveMQ run as root, otherwise it will not be able to write to the cron file.
这个方法需要ActiveMQ是root运行,否则也不能写入cron文件。
In some cases, the owner of jetty.xml and jar is the user of the web container, so the success rate of writing crontab is higher.
有的情况下,jetty.xml和jar的所有人是web容器的用户,所以相比起来,写入crontab成功率更高一点。

总而言之,由于是通过ActiveMQ进行文件上传,因此运行ActiveMQ的用户必须有目标文件夹,或者需要修改的文件的写权限才行。

那么要确定能否写入或者修改文件,就需要确定两件事情:

  1. 文件或文件夹权限
  2. 运行ActiveMQ的用户

下面就以/etc/cron.d目录和jetty.xml

### CVE-2016-3088 漏洞概述 CVE-2016-3088 是 Apache ActiveMQ 的一个任意文件写入漏洞,主要由于 `fileserver` 应用未受保护且允许通过 HTTP 请求创建和移动文件。此漏洞影响的版本范围为 Apache ActiveMQ 5.x 至 5.14.0 版本[^3]。 --- ### 环境准备 为了复现该漏洞,需搭建受影响的环境: #### 使用 VulnHub 靶场 VulnHub 提供了一个方便的漏洞测试平台,可以快速部署目标服务。按照以下步骤操作: 1. 下载并启动 Docker 或虚拟机镜像。 2. 安装指定版本的 Apache ActiveMQ(如 5.13.0),确保其配置启用了 `fileserver` 功能。 3. 修改 `conf/jetty.xml` 文件中的 `<bean>` 节点,启用 `fileserver` Web 应用程序。 ```bash docker run --name activemq -p 8161:8161 webcenter/activemq:5.13.0 ``` 上述命令会运行一个容器化的 ActiveMQ 实例,并将其管理端口映射到主机上的 8161 端口。 --- ### 漏洞验证方法 #### 利用工具或手动发送请求 可以通过向 `/fileserver/{filename}` 发送 `PUT` 请求来验证是否存在漏洞。以下是具体过程: 1. **构造恶意请求** 向服务器发送一个带有自定义数据体的 `PUT` 请求,尝试在 `fileserver` 中创建新文件。 ```http PUT /fileserver/test.txt HTTP/1.1 Host: localhost:8161 Content-Type: text/plain Content-Length: 17 This is a test file. ``` 2. **确认文件已成功上传** 访问路径 `/fileserver/test.txt` 并查看返回的内容是否匹配预期的数据。 3. **执行 MOVE 方法** 将刚刚创建的文件移动至其他目录下,例如 Tomcat 的根目录或其他可加载的位置。 ```http MOVE /fileserver/test.txt HTTP/1.1 Host: localhost:8161 Destination: http://localhost:8161/tomcat/webapps/root/shell.jsp Overwrite: T ``` 如果一切正常,则会在目标位置生成新的 JSP 文件,从而实现远程代码执行的效果。 --- ### 自动化检测脚本 (POC) XRay 工具提供了针对 CVE-2016-3088 的自动化扫描功能,下面是一个简单的 YAML 格式的 POC 描述文件[^4]: ```yaml name: poc-yaml-activemq_CVE-2016-3088 set: r1: randomInt(5, 10) r2: randomLowercase(r1) rules: - method: PUT path: /fileserver/{{r2}} expression: | response.status == 204 detail: author: laura_lion links: - https://github.com/Laura0xiaoshizi ``` 将以上内容保存为 `.yaml` 文件后导入 XRay 执行即可完成批量探测工作。 --- ### 注意事项 尽管漏洞利用相对简单,但在实际环境中应严格遵循法律规范,仅限于授权范围内进行渗透测试活动。此外,在生产环境下务必及时更新软件补丁以防止此类安全风险的发生。 ---
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值