声明:笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。
一、漏洞原理
ActivedMQ的web控制台有三个应用,admin、api、filesever,admin是管理员页面,api是接口,fileserver是存储文件的接口。api和admin都需要登录才能使用,但是fileserver不需要。
产生背景:
该漏洞出现在fileserver应用中,ActiveMQ中的fileserver的服务运行用户通过HTTP、PUT、GET、DELETE邓请求对其中存储的文件进行读写操作,设计目的是为了弥补消息队列操作不能传输、存储二进制文件的缺陷。
漏洞原理:
漏洞产生主要原因是Fileserver支持写入文件,不解析jsp,但是支持移动文件(Move),因此我们将jsp的文件PUT到Fileserver下,再通过Move指令移动到可执行的目录下访问。
写入方法:
1、写入webshell
2、写入cron或ssh key等文件
crond是Linux系统中的守护进程,在后台运行,每分钟检查一次,看看当时是否有任何调度的作业。如果有,它将执行该工作,否则它将保持不活动状态。通常位于/etc/crontab.
3、写入jar或jetty.xml库和配置文件
版本注意事项:
但是我们要注意特定版本才能使用该漏洞,在ActiveMQ的5.12.x~5.13.x版本中已经默认关闭该应用,但是可以在conf/jetty.xml中开启。但是在5.14.0后的版本,Fileserver就彻底被删除了。
二、复现过程
1、靶场搭建
我们使用vulhub一键搭建靶场
这里使用linux自己搭建vulhub,如果有小伙伴不会弄可以查询网上资料或者有评论需要后期我会出搭建教程。
然后我们将虚拟机的ip加端口号就能打开我们创建的靶场了,接下来我们尝试登陆,我们使用admin/admin进行一个登录抓包。
2、写入api和admin中
我们先寻找一下ActiveMQ的绝对路径
我们使用bp抓取一下页面,由于前面讲到api和admin需要登陆,但是Fileserver不需要登录
我们将GET请求改成PUT请求。第一个框是我们修改的请求,第二个框是我们输入的jsp内容。
我们再使用MOVE方法移动文件。其中MOVE指定文件,Destination指定的是我们之前的绝对路径,就是我们的放置目标,再将移动过去的文件重新命名。MOVE命令2开说明我们移动成功,我们来看一下是否上传成功。
我们构造PUT和MOVE请求最后成功。完成漏洞复现。
注意事项:需要注意的是为什么我们的shell写入webapps的admin中,因为我们上文提到了写进api和admin中需要登录,也就是我们的第一步,使用admin/admin登录。
我们同样也可以构造成webapps/api/ruler2.jsp
3、写入crontab
注意事项:crontab原理
那么我们上文提到了还可以写入crontab中,简单的来说,crontab就是linux中检查我们的进程,如果有进程则去运行该进程,通常位于/etc/crontab.中。
修复方案:
1、将Fileserver更新至5.14.0和之后的版本。
2、移除conf/jetty.xml文件中fileserver相关配置文件
3、打补丁
漏洞的影响:
我们可以使用shodan和fofa等来查询漏洞爆发前后fileserver使用情况。
文献参考:ActiveMQ任意文件上传漏洞 - 白阁文库 (baizesec.github.io)
五分钟复现activemq任意文件上传漏洞——CEV-2016-3088漏洞_cev漏洞-CSDN博客
总结:
本次漏洞产生主要原因是Fileserver支持写入文件,不解析jsp,但是支持移动文件(Move),因此我们将jsp的文件PUT到Fileserver下,再通过Move指令移动到可执行的目录下访问。
在漏洞爆发后使用fileserver的用户便减少了,导致截止最新版本已经删除了该功能。
本文标注了参考文献,如果有漏掉部分或者错误部分热烈希望大家指出,本篇文章还会制作更多漏洞复现后续,欢迎大家讨论,或者大家想看哪个漏洞复现,可以在评论区进行讨论。
最后,制作不易,您的点赞是对我最大的支持,感谢大家点赞关注一键三连,未来我还会更新更多漏洞复现原理。