一、初步偵察與服務識別
1.1 端口掃描
首先對目標主機 192.168.122.41
進行全端口掃描,以發現其上開放的網絡服務。
sudo nmap 192.168.122.41 -p- --min-rate=5000 -A
圖1: Nmap掃描結果,顯示開放22, 8090, 和 8091端口
掃描結果顯示,目標開放了三個端口:SSH (22)、HTTP (8090) 和另一個未知服務 (8091)。我們的攻擊重點將首先放在 8090 端口上運行的 Web 服務。
1.2 Web應用識別
我們優先訪問 http://192.168.122.41:8090
上的Web服務。通過檢查頁面頁腳的版權信息,可以明確識別出該應用為 Confluence,其版本號為 7.13.6。
圖2: Web服務首頁,識別為Confluence 7.13.6
二、漏洞利用與初始訪問
2.1 歷史漏洞查詢
針對已識別的 Confluence 7.13.6 版本,我們進行公開漏洞庫查詢。很快,我們發現一個編號為 CVE-2022-26134 的遠程代碼執行(RCE)漏洞,該漏洞影響了多個Confluence 7.x 版本,包括目標正在使用的版本。
圖3: Confluence 歷史漏洞查詢結果
2.2 RCE漏洞利用
從 GitHub 上獲取針對 CVE-2022-26134 的公開漏洞利用腳本(EXP)。執行該腳本后,我們成功在目標服務器上獲得了反彈 shell,取得了對系統的初步訪問權限。
圖4: 成功利用EXP獲得反彈shell
檢查當前用戶身份和系統中的用戶列表,確認我們當前處于一個名為 confluence
的普通用戶權限下,這也是運行該Web服務的用戶。
圖5: 確認當前為普通用戶權限
三、本地信息收集與提權分析
3.1 發現可疑的備份腳本
獲得初始訪問權限后,我們在應用的根目錄下進行文件搜尋,試圖發現配置文件、憑證或其他可利用的信息。在此過程中,我們發現了一個名為 log-backup.sh
的shell腳本。
圖6: 在項目根目錄發現 log-backup.sh 腳本
從腳本名稱和內容推斷,其功能是將應用日志備份到 /root/logs
目錄下。值得注意的是,目標目錄位于 root
用戶的家目錄下,這意味著執行此腳本需要 root 權限。
3.2 提權路徑分析
檢查該腳本的文件權限,發現當前我們所處的 confluence
用戶對此腳本擁有寫入權限。
圖7: 檢查發現當前用戶對腳本有寫權限
基于以上兩點發現,一個清晰的提權路徑浮現出來:
- 腳本需要
root
權限才能成功執行。 confluence
用戶可以修改該腳本內容。- 這極有可能意味著系統存在一個以
root
身份運行的定時任務(Cron Job),用于周期性地執行此備份腳本。
3.3 驗證定時任務
為了驗證我們的猜想,我們將進程監控工具 pspy
上傳到目標服務器并執行。pspy
可以非侵入式地監控系統上的所有進程活動。很快,pspy
的輸出證實了我們的判斷:一個由 root
用戶啟動的定時任務每隔一段時間就會執行 log-backup.sh
腳本。
圖8: pspy監控到root權限的定時任務正在執行該腳本
四、利用定時任務實現權限提升
4.1 修改腳本并植入后門
既然提權路徑已經確認,我們便可以利用 confluence
用戶對腳本的寫權限,向其中植入提權命令。我們選擇的命令是為 /bin/bash
程序設置 SUID 位。當一個可執行文件被設置了 SUID 位后,任何用戶執行它時,都會臨時獲得該文件所有者(在這里是 root)的權限。
使用 echo
命令將提權代碼追加到腳本末尾:
echo 'chmod u+s /bin/bash' >> log-backup.sh
4.2 獲取Root權限
命令寫入后,我們只需等待下一次定時任務的觸發。當 root
用戶執行被我們修改過的 log-backup.sh
腳本時,我們的 chmod u+s /bin/bash
命令也會以 root
權限被執行。
稍等片刻后,我們執行 /bin/bash -p
命令(-p
參數用于在啟動bash時保持有效用戶ID,這是利用SUID的關鍵),成功獲得了一個 root 權限的 shell,完成了最終的提權。
圖9: 植入SUID后門,成功提權至root