Redis未授权访问漏洞利用

Redis简介:

Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:

  • 基于内存运行,性能高效

  • 支持分布式,理论上可以无限扩展

  • key-value存储系统

  • 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

持久化机制:就是把内存中的数据保存到文件中。防止数据的丢失。

默认是RDB(Redis DataBase):在配置文件redis.conf中

Redis动态修改配置:就是在远程连接之后通过config set进行修改配置文件,而不是打开.conf配置文件;注意这种修改并不会写入配置文件,只在本次连接有效,重启之后就会失效。我们可以修改存储文件路径及其文件名,从而让内存的数据保存到我们指定的目录。

漏洞简介及其危害

Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进⾏采⽤相关的策略,⽐如添加防⽕墙规

则避免其他⾮信任来源 ip 访问等,这样将会将 Redis 服务暴露到公⽹上,如果在没有设置密码认证

(⼀般为空)的情况下,会导致任意⽤户在可以访问⽬标服务器的情况下未授权访问 Redis 以及读取

Redis 的数据。攻击者在未授权访问 Redis 的情况下,利⽤ Redis ⾃身的提供的confifig 命令,可以进

⾏写⽂件操作,攻击者可以成功将⾃⼰的ssh公钥写⼊⽬标服务器的 /root/.ssh ⽂件夹的

authotrized_keys ⽂件中,进⽽可以使⽤对应私钥直接使⽤ssh服务登录⽬标服务器、添加计划任

务、写⼊Webshell等操作。

环境搭建

环境介绍:
靶机:centos(IP:192.168.222.185)
攻击机:kali(IP:192.168.222.129)
使用xshell连接

centos7搭建redis服务端环境:

wget https://download.redis.io/releases/redis-4.0.10.tar.gz//下载redis压缩包
tar -zxvfredis-4.0.10.tar.gz//解压我们下载的压缩包
 cd redis-4.0.10/src//然后进入redis的src目录下
然后进行编译安装
make
make install

成功之后会是如下截图:

修改配置文件:

vim打开redis.conf文件,然后找到daemonize 值改为yes(后台启动,不然窗口一关服务就挂了)
bind 127.0.0.1注释掉,否则只允许本地访问
requirepass yourpassword可以设置密码
protected-mode no
启动redis服务:需要两个文件 redis-server redis.conf(注意这两个并不是在同一级目录,根据自己当前所在目录进行调用)

配置好redis服务之后,我们准备攻击机,攻击机只需要redis-cli即可,不需要启动redis服务;操作同上。随后用攻击机远程连接靶机的redis服务。

注意:我第一次搭建环境时候整整搞了一晚,换了很多版本,配置文件也检查了很多遍,但始终连接不上;总结了如下解决方案:

  1. 如果本地连接不上,很有可能就是服务并没有启动;检查一下服务是否真正启动

  1. 如果所有配置都确定无误,那么就换个环境;我同样的办法昨天一晚上连接不上;今天早上醒来之后就直接连接上了。确实挺神奇。

  1. 然后就是注意6379端口有没有被占用,是否开启。

  1. 如果有环境搭建不成功的可以私我截图,我昨天晚上整整搞了三个小时

webshell提权

思路:就是基于redis的持久化机制,然后修改其数据存储路径和文件名,存储目录设置在该服务器可以访问到的目录;我的centos是装了小皮的,所有我直接修改目录为/www/admin/localhost_80/wwwroot。下面进行操作

此时我们会发现靶机对应目录已经有了该文件。

把一句话木马放进去之后,我们就用蚁剑连接。

此时我们就已经看到靶机所有文件。并且可以在终端操作。

反弹连接

上述方法是基于靶机的6379端口允许入方向,并且假设对应IP静态而且一句话木马并没有被杀毒软件杀掉,我们才可以持久的操作靶机;但是如果上述条件有一个不存在,我们就没有办法webshell提权了。

因此我们可以使用反弹连接。

反弹连接的思路:就是在我们第一次连接redis服务之后,可以在服务端写入定时任务,写入建立反弹连接的命令;然后在我们客户端进行端口监听。

操作如下:

首先客户端(攻击机)监听端口:

常见的监听端口方式:

然后就是利用redis写入定时任务。定时任务就是建立反弹连接到攻击机7777端口。

定时任务:使用的是cron表达式

cron定时任务存储路径:

在攻击机写入定时任务后,我们可以去靶机查看一下,是否在该目录下有root文件。

这时候我们的定时任务写入成功。

在我们的攻击机等待接听就可以了。

注意:我这直接在靶机写入反弹连接命令后,是正常执行的;但是在定时任务中加入后就会不太一样;ifconfig命令显示不存在;本来可以正常执行的命令都显示不存在。

上述命令不能用解决办法

常见建立反弹连接的方式:

SSH免密登陆

在非对称加密中,用公钥加密的密文,只有匹配的私钥才能够解出来。

SSH key免密登陆:

1、客户端生成密钥对(公钥、私钥)

2、客户端把公钥发给服务端保存(正常情况需要密码)

3、客户端用私钥加密消息,发给服务端

4、服务端用公钥解密,解密成功,说明密钥匹配

5、客户端免密登录成功

注意:私钥就是我们自己保存,用来加密消息,而公钥就是用来解密消息的。

常规流程:

攻击机生成一个密钥对。(ssh-keygen命令)
攻击机发送公钥。(ssh-copy-id root@192.168.222.188)此时需要靶机的root用户密码
注意:此时我的centos不能以root身份远程连接,所以我用的是普通用户先登陆,然后进行su root。
然后用该命令ssh -i ./id_rsa tom_user@192.168.222.188在攻击机便可以直接登陆进入靶机。(利用私钥进行登陆)
注意:公钥在靶机存放位置:$HOME/.ssh/authorized_keys

centos不能远程以root身份登陆解决办法

通过Redis流程:

redis我们是不知道其root用户密码,所以不能直接通过命令发送密钥。只能利用redis所有的权限。

注意:这个是可以直接使用root身份登陆,只需要把公钥放到root用户目录下即可。

注意:在用set写入内容save后,对应文件不只有写的内容,还有对应redis信息,所以经常导致异常;大多实验不成功应该就是这个的原因。

Redis等保安全加固

  1. 限制访问IP

  1. 修改默认端口

  1. 密码访问

  1. 低权限运行redis,不要使用root

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

凌晨四点半sec

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

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

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

打赏作者

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

抵扣说明:

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

余额充值