當前位置:
首頁 > 新聞 > Redis未授權訪問漏洞復現

Redis未授權訪問漏洞復現

Redis是一種開源的,內存中的數據結構存儲系統,可用作資料庫,消息代理或緩存。由於它是在在受信任的環境中訪問,因此不應在Internet上公開。但是,一些Redis服務綁定到公共介面,甚至沒有密碼身份驗證保護。

在某些情況下,如果Redis使用root帳戶運行,攻擊者可以將SSH公鑰文件寫入root帳戶,直接通過SSH登錄到受害伺服器。這會允許黑客獲得伺服器許可權,刪除或竊取數據,甚至導致加密勒索,嚴重危及正常的業務服務。

漏洞利用的簡化流程

·登錄不受保護的Redis

·將其備份位置更改為.ssh目錄 - 將SSH密鑰寫入新的備份位置

·使用SSH密鑰遠程連接並登錄目標伺服器

我們應該已經熟悉如何使用私鑰+公鑰進行SSH自動登錄了。

漏洞復現

現在我們來開始實戰,設置一台目標機器。我們需要兩台機器,可以是物理機,虛擬機,也可以是遠程VPS。

只要攻擊端能夠ping通目標就行。

本次示例的環境配置:

目標機器:Ubuntu上的Redis-3.2.11

攻擊機:kali

配置目標機器

首先,在目標機器上安裝Redis。通過下面這個命令來下載源碼:

wget http://download.redis.io/releases/redis-3.2.11.tar.gz

解壓和編譯,命令如下:

tar xzf redis-3.2.11.tar.gz cd redis-3.2.11

make

make之後,我們使用nano來打開redis-3.2.11目錄下的redis.conf配置文件。為了能夠進行遠程訪問,我們需要注釋掉 bind 127.0.0.1這一行,並禁用protected-mode,如圖所示:

現在使用我們剛才編輯的配置文件啟動Redis服務。注意:redis-server在redis-3.2.11/src目錄下,啟動命令如下:

src/redis-server redis.conf

現在,我們已經完成了目標伺服器的設置。此外,我們還應檢查是否有 .ssh文件夾。如果沒有,我們應該創建一個,一會兒攻擊時會用到。

攻擊機配置

首先,確定我們可以ping通目標。然後,我們將生成一個私鑰和公鑰,以便稍後SSH到目標機器中。運行以下命令以生成SSH密鑰並將密碼保留為空:

ssh-keygen -t rsa

然後,進入.ssh目錄,如果你是root用戶,請輸入/.ssh,不是root用戶,輸入~/.ssh,然後將私鑰複製到temp.txt中:

(echo -e "

"; cat id_rsa.pub; echo -e "

") > temp.txt

有人可能會奇怪,為什麼我們在公鑰前後放兩個空行?如果你不知道的話,我們這裡先賣一個關子,下面自會解答。

很好,現在我們已經生成了一對密鑰對,現在我們需要找到一個方法將公鑰上傳到Redis伺服器中(目標機器)。

我們將使用redis-cli向Redis伺服器發送命令,並且直接在終端中讀取伺服器的響應。

在redis-3.2.11/sct目錄下執行以下命令:

cat /.ssh/temp.txt | redis-cli -h 203.137.255.255 -x set s-key

這裡,我們來看看命令。我們使用-h參數來指定遠程Redis伺服器IP,這樣redis-cli就可以進行連接並發送命令。-x參數後的語句意思是,設置redis中s-key密鑰的值為temp.txt。

這裡,我們有了一個隱藏著ssh秘鑰的密鑰!現在我們再來連接到Redis並查看它的配置文件。使用redis-cli再次連接到Redis伺服器,如圖所示:

查看上面的截圖,我們首先使用get s-key命令來驗證s-key密鑰的值,這個值正是我們想要的 - 前後有兩個空行的公鑰。我們這裡真正要做的就是獲取存儲在.ssh文件夾中的「s-key」(SSH公鑰)的值, 這樣我們就可以不用輸入密碼而遠程SSH登錄到目標機器了。

我們需要執行如下操作:

備註:SSH中的authorized_keys文件指定可用於登錄的用戶帳戶,配置文件已經修改。參考文章:ssh.com

攻擊時刻

在攻擊機上,使用下列命令ssh連接到目標機器上:

太贊了,可以看到,我們使用SSH密鑰已經成功自動登錄到伺服器上!到此,我們已經完成了漏洞復現。

最後,我想展示Redis的備份文件是什麼樣的,如圖:

注意不可讀的字元?在關鍵內容之前和之後添加「 n n」只是為了安全起見並將其與其他內容分開,以便可以正確解析。上面賣的關子,其實就是這個意思,很簡單。

使用搜索引擎查找易受攻擊的Redis伺服器

我們將使用Shodan來搜索具有Redis特徵的伺服器。

我們通過Redis的默認埠進行簡單搜索。

共計75,665條搜索結果。而且你知道嗎,這些結果中,有大量的主機都沒有密碼保護(截圖中沒有顯示,但是我們向下滾動的話,能夠看到)!!

這個漏洞是在幾年前發現的,仍有無數機器沒有設置密碼,還暴露在公網中,這對攻擊者來說,拿下伺服器簡直是探囊取物,不費吹灰之力。不得不說,這些人心真是大啊。

根據shadon顯示,2015年有大約56,000個未受保護的 Redis伺服器。

根據ZoomEye顯示,分布的範圍如圖所示:

據ZoomEye稱,漏洞主機數量排名最高的國家是:中國,美國,德國......

OK,言歸正傳。我們如何使用Python腳本驗證伺服器是否受到保護呢?其實,非常簡單。

1.使用socket連接到目標IP

2.執行GET請求

3.如果伺服器不受保護,GET請求會成功; 否則會失敗

緩解措施

·不要綁定到0.0.0.0

·如果需要綁定,請更改默認埠(6379)

·設置密碼


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

惡意宏劫持桌面快捷方式傳播後門
深入研究VBScript—CVE-2018-8174利用分析

TAG:嘶吼RoarTalk |