Redis 未授权访问漏洞利用总结
In 未分类 on 2017年07月15日 by view: 15,231
1

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

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

一、漏洞介绍

Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。

漏洞描述

部分 Redis 绑定在 0.0.0.0:6379,并且没有开启认证(这是 Redis 的默认配置),如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致 Redis 服务直接暴露在公网上,导致其他用户可以直接在非授权情况下直接访问 Redis 服务并进行相关操作。

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

二、漏洞利用

首先在本地生产公私钥文件:

然后将公钥写入 foo.txt 文件

连接 Redis 写入文件

这里讲解下,这里设定了 crackit 的键值为公钥,并通过 redis 命令变更 Redis DB 文件及存放地点为默认 root 用户 SSH key 存放文件,并将键值重定向追加到远程文件 authorized_keys 的末尾,也就上传了公钥。

这样就可以成功的将自己的公钥写入 /root/.ssh 文件夹的 authotrized_keys 文件里,然后攻击者直接执行:

可远程利用自己的私钥登录该服务器。

刚刚我们提到公钥登录和 Redis 持久化存放数据操作,这里简单讲下原理

详细讲解 ssh 登录--公钥登录

SSH 提供了公钥登录,可以省去输入密码的步骤。

所谓" 公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录 shell,不再要求密码。

这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用 ssh-keygen 生成一个:

运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。

运行结束以后,在 $HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub 和 id_rsa。前者是你的公钥,后者是你的私钥。

通常这时再输入下面的命令,将公钥传送到远程主机 host 上面: