欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

程序员文章站 2022-05-15 09:56:59
...

Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088)

1.ActiveMQ介绍

  ActiveMQ 是 Apache 软件基金会下的一个开源消息驱动中间件软件。Jetty 是一个开源的 servlet 容器,它为基于 Java 的 web 容器,例如 JSP 和 servlet 提供运行环境。ActiveMQ 5.0 及以后版本默认集成了jetty。在启动后提供一个监控 ActiveMQ 的 Web 应用。
  一般访问 host:8161可以看到web控制台:
Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

2.漏洞原理

  Apache ActiveMQ Fileserver 存在多个安全漏洞,可使远程攻击者用恶意代码替代Web应用,在受影响系统上执行远程代码(CVE-2016-3088)。

  FileServer服务未对PUT、DELETE、MOVE等敏感请求有拦截,允许PUT请求上传文件到指定目录,且MOVE请求未对文件目的路径进行限制。

Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

2.1ActiveMQ 的 web 控制台构成

  ActiveMQ 的 web 控制台分三个应用,admin、api 和 fileserver,其中 admin 是管理员页面,api 是接口,fileserver 是储存文件的接口;admin 和 api 都需要登录后才能使用,fileserver 无需登录.fileserver是一个RESTful API接口,我们可以通过GET、PUT、DELETE等HTTP请求对其中存储的文件进行读写操作。

  • admin 是管理员页面
    Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

  • api接口
    Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

  • fileserver 接口
    Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

2.2 受影响版本

Apache ActiveMQ 5.0.0-5.13.x

3.漏洞利用

3.1 Webshell

3.1.1 原理

  ActiveMQ 中的 FileServer 服务允许用户通过 HTTP PUT 方法上传文件到指定目录,用户可以上传文件到指定目录,该路径在 conf/jetty.xml 中定义。伪造一个特殊的上传路径,可以爆出绝对路径,,MOVE方法没有对目的路径做任何限制或者过滤,由此,我们可以构造PUT请求上传 webshell 到 fileserver 目录,然后通过 Move 方法将其移动到有执行权限的 admin/ 目录。

3.1.2 实例

1. 查看版本信息:
http://host:8161/admin/index.jsp?printable=true   #使用弱口令 admin/admin进去了

Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

版本号为5.9.1,为存在漏洞版本。

2. 获取绝对路径

在fileserver接口,对错误路径进行PUT任意数据,可得到绝对路径:

http://host:8161/fileserver/.%04

Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

  • tips:
      获取绝对路径实际还得看环境,ActiveMQ 5.7.0 或者更低版本,可以直接报错出路径,而且访问不需要登陆后台。
      有人称vulhub 的并不能爆出绝对路径,只有登陆后台访问/admin/test/systemProperties.jsp拿绝对路径。
3.使用put方法上传文件

  尝试上传txt文件,状态码为204,表示服务器成功处理了请求,但不需要返回任何实体内容,成功上传 :
Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

访问当前文件路径的文件:
Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

尝试直接写入jsp文件,无法写入:
Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

先写txt格式的shell:
Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

成功访问:
Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

4. 使用MOVE方法,将shell移动到admin目录下执行

  在移动时,直接重命名为shell.jsp文件

MOVE /fileserver/shell.txt HTTP/1.1
Destination:file:D:\Programs\apache-activemq-5.9.1\webapps\admin\shell.jsp

Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

成功执行命令:
Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

3.2 SSH 公钥

实例

1. 生成公钥

使用命令生成**对,其他默认:

ssh-****** -t rsa

Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

到对应目录查看:
Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

2. 上传、移动、重命名

使用PUT方法上传秘钥:

移动到/root/.ssh/目录:

重命名为authorized_keys

3.ssh远程登录

4.修复方法

4.1 标准修复方法

  从5.14.0版本开始,文件服务器功能将被完全删除。建议用户使用其他基于FTP和HTTP的文件服务器来传输Blob消息。
  Fileserver Web应用程序应该禁用它(从5.12.0开始默认禁用),可以通过从conf \ jetty.xml文件中删除(注释掉)以下几行来完成:

<bean class="org.eclipse.jetty.webapp.WebAppContext">
    <property name="contextPath" value="/fileserver" />
    <property name="resourceBase" value="${activemq.home}/webapps/fileserver" />
    <property name="logUrlOnStart" value="true" />
    <property name="parentLoaderPriority" value="true" />
</bean>
  • 目前厂商已经发布了升级补丁以修复这个安全问题,厂商的主页:

http://activemq.apache.org/security-advisories.data/CVE-2016-3088-announcement.txt

4.2 不得已而为之

  • 场景:实在无法进行升级

  在web.xml中禁用PUT方法,达成无法上传webshell、公钥的效果。效果如下:
Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战

相关标签: 漏洞 安全漏洞