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






