黑客"實(shí)戰(zhàn)"內(nèi)容之redis未授權(quán)訪問(wèn)漏洞復(fù)現(xiàn)
Redis是一種開(kāi)源的,內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),可用作數(shù)據(jù)庫(kù),消息代理或緩存。由于它是在在受信任的環(huán)境中訪問(wèn),因此不應(yīng)在Internet上公開(kāi)。但是,一些Redis服務(wù)綁定到公共接口,甚至沒(méi)有密碼身份驗(yàn)證保護(hù)。
在某些情況下,如果Redis使用root帳戶運(yùn)行,攻擊者可以將SSH公鑰文件寫(xiě)入root帳戶,直接通過(guò)SSH登錄到受害服務(wù)器。這會(huì)允許黑客獲得服務(wù)器權(quán)限,刪除或竊取數(shù)據(jù),甚至導(dǎo)致加密勒索,嚴(yán)重危及正常的業(yè)務(wù)服務(wù)
在正式開(kāi)始介紹復(fù)現(xiàn)過(guò)程前,先說(shuō)明一下我復(fù)現(xiàn)的是最嚴(yán)重的漏洞利用情況即以root身份登錄redis服務(wù)寫(xiě)入ssh公鑰實(shí)現(xiàn)使用ssh免密登錄受害主機(jī)。現(xiàn)在先說(shuō)明一下SSH免密登錄的原理(已經(jīng)了解的童靴們可以直接跳過(guò)hhh):
SSH提供兩種登錄驗(yàn)證方式,一種是口令驗(yàn)證也就是賬號(hào)密碼登錄,另一種是密鑰驗(yàn)證也就是我們想要的免密登錄了,這里我只簡(jiǎn)單說(shuō)一下密鑰驗(yàn)證的原理。
所謂密鑰驗(yàn)證,其實(shí)就是一種基于公鑰密碼的認(rèn)證,使用公鑰加密、私鑰解密,其中公鑰是可以公開(kāi)的,放在服務(wù)器端,你可以把同一個(gè)公鑰放在所有你想SSH遠(yuǎn)程登錄的服務(wù)器中,而私鑰是保密的只有你自己知道,公鑰加密的消息只有私鑰才能解密,大體過(guò)程如下:
(1)客戶端生成私鑰和公鑰,并把公鑰拷貝給服務(wù)器端;
(2)客戶端發(fā)起登錄請(qǐng)求,發(fā)送自己的相關(guān)信息;
(3)服務(wù)器端根據(jù)客戶端發(fā)來(lái)的信息查找是否存有該客戶端的公鑰,若沒(méi)有拒絕登錄,若有則生成一段隨機(jī)數(shù)使用該公鑰加密后發(fā)送給客戶端;
(4)客戶端收到服務(wù)器發(fā)來(lái)的加密后的消息后使用私鑰解密,并把解密后的結(jié)果發(fā)給服務(wù)器用于驗(yàn)證;
(5)服務(wù)器收到客戶端發(fā)來(lái)的解密結(jié)果,與自己剛才生成的隨機(jī)數(shù)比對(duì),若一樣則允許登錄,不一樣則拒絕登錄。
下面我們開(kāi)始進(jìn)行漏洞環(huán)境的搭建:
從官網(wǎng)下載源碼的壓縮包,程序:
wget http://download.redis.io/releases/redis-3.2.11.tar.gz
解壓:
tar xzf redis-3.2.11.tar.gz
進(jìn)入解壓后的目錄:
cd redis-3.2.11
執(zhí)行:
Make
執(zhí)行完畢后,進(jìn)入src目錄:
cd src
將redis-server和redis-cli拷貝到/usr/bin目錄下(這樣啟動(dòng)redis-server和redis-cli就不用每次都進(jìn)入安裝目錄了)
cp redis-server /usr/bin
cp redis-cli /usr/bin
返回目錄redis-3.2.11,將redis.conf拷貝到/etc/目錄下
Cd
Cp redis.conf /etc/
編輯etc中的redis配置文件redis.conf,如下圖所示
Vim redis.conf
這樣可以去掉ip綁定,允許除本地外的主機(jī)遠(yuǎn)程登錄redis服務(wù)
關(guān)閉保護(hù)模式,允許遠(yuǎn)程連接redis服務(wù)
使用/etc/目錄下的reids.conf文件中的配置啟動(dòng)redis服務(wù)
redis-server /etc/redis.conf
安裝ssh服務(wù)
使用systemctl start sshd命令啟動(dòng)ssh服務(wù)。
(三)復(fù)制虛擬機(jī),一個(gè)作為靶機(jī),一個(gè)作為攻擊端
至此漏洞環(huán)境便已經(jīng)搭建完畢,此時(shí)的redis服務(wù)是可以以root用戶身份遠(yuǎn)程免密碼登錄的。
查看兩機(jī)器的ip
虛擬機(jī)A(192.168.0.146)為靶機(jī),虛擬機(jī)B(192.168.0.147)為攻擊端
在A中開(kāi)啟redis服務(wù):redis-server /etc/redis.conf
在主機(jī)A中執(zhí)行mkdir /root/.ssh命令,創(chuàng)建ssh公鑰存放目錄
在B中生成ssh公鑰和私鑰,密碼設(shè)置為空
進(jìn)入.ssh目錄:cd .ssh/,將生成的公鑰保存到1.txt
將1.txt寫(xiě)入redis
遠(yuǎn)程登錄主機(jī)A的redis服務(wù):redis-cli -h 192.168.0.146 并使用CONFIG GET dir命令得到redis備份的路徑:
更改redis備份路徑為ssh公鑰存放目錄(一般默認(rèn)為/root/.ssh)
設(shè)置上傳公鑰的備份文件名字為authorized_keys:
開(kāi)啟主機(jī)A和主機(jī)B的ssh服務(wù)(Fedor默認(rèn)ssh服務(wù)關(guān)閉),命令為systemctl start sshd.serveice:
在主機(jī)B使用ssh免密登錄主機(jī)A:ssh -i id_rsa root@192.168.0.146,成功登錄:
我們就成功利用redis未授權(quán)訪問(wèn)漏洞實(shí)現(xiàn)了ssh免密登錄目標(biāo)服務(wù)器,接下來(lái)就可以使用ssh服務(wù)來(lái)進(jìn)行下一步的滲透工作