Web安全之Openfire的外掛指令碼上傳漏洞復現
*本文作者:si1ence,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。
前言
一次偶然的機會發現某臺Web伺服器被黑了之後被植入了挖礦病毒,然後忙活了好久清理完病毒之後就開始思考思考到底是怎麼被黑的,俗話說的好死要死得明白。
伺服器本身只開發了外網的web埠,然後初步懷疑是從web服務端進來的於是先用D盾查殺一下果不出所料查殺出一個webshell,路徑卻在Openfire目錄下以前沒有接觸過這個玩意遂研究之。
0×1 功能介紹
Openfire 是基於XMPP 協議的IM 的伺服器端的一個實現,雖然當兩個使用者連線後,可以通過點對點的方式來發送訊息,但是使用者還是需要連線到伺服器來獲取一些連線資訊和通訊資訊的,所以伺服器端是必須要實現的。Openfire 也提供了一些基本功能,但真的很基本的!慶幸的是,它也提供外掛的擴充套件,像Spark 一樣,同樣強烈建議使用外掛擴充套件的方式來增加新的功能,而不是修改人家的原始碼。
然後上Zoomeye搜尋一波,發現應用還挺廣泛的:
0×2 過程溯源
由於是生產環境也不好瞎搞,然後就找到這個webshell的目錄發現還有一個叫做helloworld.jar的包,開啟一下才發現這個玩意才是上傳的主體,然後自己從官網下載一個最新版本的openfire本地安裝測試一下。
就一個exe安裝檔案直接點點點就好了,安裝完畢之後直接就進入了配置介面擷取關鍵的二個步驟如下:
然後進入了一個配置管理員的介面,說實話不知道是什麼玩意也不知道有什麼用然後就下一步下一步直接跳過了。
安裝完成之後,進入登陸介面,輸入使用者名稱密碼admin:admin直接就登陸成功了,毫無違和感。
發現有一個外掛的地方,按照google搜尋到的辦法結合從伺服器儲存下來的helloword.jar檔案然後就上傳一下試一下,上傳成功。
然後轉換到使用者介面設定的地方點選一下就直接訪問到了webshell的內容:
測試了一下許可權就是執行openfire的使用者的管理system這波操作是真的可以。
0×3 過程分析
查看了一下helloword的包裡面具體都包含了什麼東西,看起來類似於一個基於servlet的網站目錄結構。
查看了一下plugin.xml檔案當中Url指向的是chakan.jsp這個檔案,但是我並沒有在這個web目錄下面搜到這個jsp,反而是這個被查殺出來的sqzr.jsp這個程式碼貌似沒有執行的樣子。
根據xml當中提示:
Main plugin class 提示這裡是你的外掛全路徑:
com.iteye.redhacker.openfire.plugin.helloWorldPlugin
才發現了chakan.jsp的原始檔都還是class檔案。
在web.xml當中發現了這個webapp外掛同時也定義好了servlet-mapping所有的這個路徑下資源的請求都通過chakan.jsp和update2.jsp處理。
管理員的使用者名稱和密碼都明文儲存在儲存在資料庫當中:
0×4 總結
1.禍患常積於忽微平時在配置一些應用系統的時候看來還真的不能太馬虎,跳過一小步可能就是安全一大步了
2.如果不是最開始掃描出來的那個sqzr.jsp這個大馬估計排查起來需要很長的時間,這種基於war包和jar包的webshell查殺起來還是有些麻煩。
*本文作者:si1ence,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。