Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战
文章目录
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控制台:
2.漏洞原理
Apache ActiveMQ Fileserver 存在多个安全漏洞,可使远程攻击者用恶意代码替代Web应用,在受影响系统上执行远程代码(CVE-2016-3088)。
FileServer服务未对PUT、DELETE、MOVE等敏感请求有拦截,允许PUT请求上传文件到指定目录,且MOVE请求未对文件目的路径进行限制。
2.1ActiveMQ 的 web 控制台构成
ActiveMQ 的 web 控制台分三个应用,admin、api 和 fileserver,其中 admin 是管理员页面,api 是接口,fileserver 是储存文件的接口;admin 和 api 都需要登录后才能使用,fileserver 无需登录.fileserver是一个RESTful API接口,我们可以通过GET、PUT、DELETE等HTTP请求对其中存储的文件进行读写操作。
-
admin 是管理员页面
-
api接口
-
fileserver 接口
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进去了
版本号为5.9.1,为存在漏洞版本。
2. 获取绝对路径
在fileserver接口,对错误路径进行PUT任意数据,可得到绝对路径:
http://host:8161/fileserver/.%04
-
tips:
获取绝对路径实际还得看环境,ActiveMQ 5.7.0 或者更低版本,可以直接报错出路径,而且访问不需要登陆后台。
有人称vulhub 的并不能爆出绝对路径,只有登陆后台访问/admin/test/systemProperties.jsp拿绝对路径。
3.使用put方法上传文件
尝试上传txt文件,状态码为204,表示服务器成功处理了请求,但不需要返回任何实体内容,成功上传 :
访问当前文件路径的文件:
尝试直接写入jsp文件,无法写入:
先写txt格式的shell:
成功访问:
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
成功执行命令:
3.2 SSH 公钥
实例
1. 生成公钥
使用命令生成**对,其他默认:
ssh-****** -t rsa
到对应目录查看:
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、公钥的效果。效果如下:
上一篇: 自定义View之仿手机淘宝的物流时间轴
推荐阅读
-
「漏洞预警」Apache Flink 任意 Jar 包上传导致远程代码执行漏洞复现
-
【墨者学院】Apache Struts2远程代码执行漏洞(S2-016)之URL编码
-
Apache Solr远程代码执行漏洞(CVE-2017-12629)
-
Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现
-
(CVE-2020-1938)Apache Tomcat远程代码执行漏洞复现
-
Apache Flink 任意 Jar 包上传导致远程代码执行漏洞复现问题(漏洞预警)
-
Apache ActiveMQ Fileserver远程代码执行漏洞(CVE-2016-3088) 实战
-
「漏洞预警」Apache Flink 任意 Jar 包上传导致远程代码执行漏洞复现
-
Apache Flink 任意 Jar 包上传导致远程代码执行漏洞复现问题(漏洞预警)