reids未授权访问复现
环境搭建请参考https://www.cnblogs.com/bmjoker/p/9548962.html
redis是什么?
1 | Redis是一个开源的内存数据结构存储系统,常用作数据库、缓存和消息中间件。它支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等,提供了丰富的操作命令,可以进行原子性的操作,支持持久化和复制等高级功能,同时具有高性能、高可用性和可扩展性等优点。Redis通常用于高性能、高并发的Web应用程序、实时系统和分布式系统中,是一个非常流行的数据存储和缓存解决方案。 |
Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。
简单说,漏洞的产生条件有以下两点:
1 | (1)redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网; |
危害:
1 | (1)攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据; |
复现
搭建好环境过后,靶机启动redis服务,攻击机与其进行交互
可以看到该redis服务对公网开放,并且没有启用认证
攻击方式1:利用redis写webshell
利用前提:
1 | 1.靶机redis链接未授权,在攻击机上能用redis-cli连上,如上图,并未登陆验证 |
由于是本地搭建,我们已经知道了路径,所以直接写就行
\r\n\r\n代表换行的意思,用redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。
靶机验证
1 | config set dir /home/ycx/redis/redis-2.8.17# 修改靶机Redis数据库路径 |
我Ubuntu没有安装web服务,就不演示执行效果了
攻击方式2:利用公私钥认证获得root权限
当redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器。
靶机中开启redis服务:redis-server /etc/redis.conf
在靶机中执行 mkdir /root/.ssh 命令,创建ssh公钥存放目录(靶机是作为ssh服务器使用的)
在攻击机中生成ssh公钥和私钥,密码设置为空:
进入.ssh目录:cd .ssh/,将生成的公钥保存到1.txt:
链接靶机上的redis服务,
将保存ssh的公钥1.txt写入redis(使用redis-cli -h ip命令连接靶机,将文件写入):
远程登录靶机的redis服务:redis-cli -h 192.168.0.104
并使用 CONFIG GET dir 命令得到redis备份的路径
更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh)
设置上传公钥的备份文件名字为authorized_key
至此成功写入ssh公钥到靶机
使用公钥免密登录靶机
攻击方式3:计划任务反弹shell
在权限足够的情况下,利用redis写入文件到计划任务目录下执行。
首先我们需要定位到我们需要的文件路径下,因为在/var/spool/cron/crontabs/下如果文件名是root,那么会定时执行里面的命令。这个目录不同操作系统是不一样我的是debain的。具体步骤如下:
按理来说下载就可以反弹shell了,但是解决了很多错误之后依旧无法成功,最后查了一下好像是因为乱码的问题
手动删除后也无法成功
**总结:**计时任务反弹shell 如果是ubuntu和debian操作系统这个就没有办法利用成功,centos操作系统是可以的利用的
攻击方式4:利用redis主从复制反弹shell
主从复制
Redis主从复制是一种数据复制机制,它允许将一个Redis服务器的数据复制到多个Redis从服务器中。在主从复制中,一个Redis服务器充当主服务器,而其他Redis服务器则充当从服务器。主服务器将写操作的数据同步到从服务器,从服务器只能读取数据,不能写入数据。
当主服务器接收到写操作时,它将同步写入所有从服务器,从而确保所有服务器的数据一致。这种机制可以提高Redis的可伸缩性和可用性,因为从服务器可以处理读操作,从而减轻主服务器的负载。
主从复制也可以用于数据备份、故障转移和负载均衡。如果主服务器出现故障,从服务器可以自动接管主服务器的工作,从而确保Redis服务的可用性。如果需要扩展读取性能,可以增加从服务器来处理更多的读操作。
复现(redis版本需要是4.x或者5.x)
由于换版本一直出现问题,我使用windows来作为靶机(这个过程真的很艰辛)
容易踩的坑:Windows防火墙没有放行6379端口, redis.windows.conf里面的bind设置为了127.0.0.1,需要改为:0.0.0.0
启动命令为:redis-server.exe redis.windows.conf
1 | 第一步:git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand.git |
i: 交互式shell ,r: 反弹shell
利用msf破解redis密码
1 | msfdb run#开启msf |