文章目录
  1. 1. 了解漏洞
    1. 1.1. redis是什么?
    2. 1.2. redis未授权访问漏洞产生的原因是什么?
  2. 2. 分析漏洞原理
    1. 2.1. 漏洞原理及其危害
    2. 2.2. 漏洞利用条件
  3. 3. 漏洞的重现和利用
    1. 3.1. 安装redis
    2. 3.2. 根据漏洞原理配置redis
    3. 3.3. 安装ssh服务端
    4. 3.4. 开启ssh公钥登录,并验证是否正确开启。
    5. 3.5. 对漏洞进行利用
  4. 4. 建议修复方案

欢迎来我的博客,这是我在学习redis未授权访问漏洞的一些操作与收获。学习的目的是为了更好的了解这个漏洞,然后去防御它,而不是为了危害他人。
实验背景:
1.VMware 12 pro
2.fedora 27
3.两台虚拟机A,B

了解漏洞

redis是什么?

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis的外围由一个键、值映射的字典构成。为高速低负载存储系统提供了一种解决方案。

redis未授权访问漏洞产生的原因是什么?

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

分析漏洞原理

漏洞原理及其危害

redis设计之初仅用于本机加快数据存取的速度,或者说,开发独立的权限认证系统开销过于冗杂,所以redis默认并未开启权限认证机制,未区分普通用户和管理员账户,使得暴漏在公网上的redis服务器可以被任意主机连接执行redis内置命令。若配合ssh,可以实现root远程登录,危害十分巨大。

漏洞利用条件

a)以root权限运行redis服务
b)redis服务器暴露在公网环境
c)redis服务允许除本机之外的所有主机登录

漏洞的重现和利用

安装redis

可以直接通过软件源安装

1
$ sudo yum install redis

根据漏洞原理配置redis

先打开redis的配置文件

1
$ sudo vim /etc/redis.conf

bind的意思不是绑定外部服务器的IP,而是绑定本机可以接受访问的IP

密码设置为没有。(在requirepass前面加注释号)

开启redis服务

1
$ sudo redis-server /etc/redis.conf

在打开虚拟机后输入ifconfig查看ip地址,相互ping得通即可继续实验

在另外一台虚拟机上连接该虚拟机,若成功则环境搭配成功。

安装ssh服务端

系统应该默认安装了,没有安装的话可以执行下面命令

1
$ sudo yum install openssh-server

开启ssh公钥登录,并验证是否正确开启。

先打开ssh的配置文件

1
$ sudo vim /etc/ssh/sshd_config

虚拟机A找到RSAAuthentication、PubkeyAuthentication、AuthorizedKeyFiles、StrictModes所在的行,如果被#注释了,就取消#号,改为如下配置:

1
2
3
4
$ RSAAuthentication yes   开启使用RSA算法的基于rhosts的安全验证;
$ PubkeyAuthentication yes 开启公钥验证;
$ AuthorizedKeyFiles .ssh/authorized_keys 后面的目录,是你上传的公钥所保存的文件;
$ StrictModes no 设置关闭ssh在接收登录请求之前先检查用户家目录和rhosts文件的权限和所有权。

之后执行

1
$ sudo service sshd start (抑或是restart)

对漏洞进行利用

(提示:利用redis写入ssh证书并登录)
1.虚拟机B生成公私钥文件,并将公钥文件内容重定向至其他文件

1
2
$ ssh-keygen
$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt

2.启动fedora redis服务
3.使用ssh.txt的内容作为标准输入,执行redis –cli命令,登录成功后使用set dir命令改变目录,设置文件名称,保存生成公钥文件。

4.之后直接用ssh登录虚拟机B(这时候应该是root权限),这就相当于入侵了别人的电脑

建议修复方案

1、指定redis服务使用的网卡 (需要重启redis才能生效)
在 redis.conf 文件中找到 “# bind 127.0.0.1” ,把前面的#号去掉,然后保存。注:修改后只有本机才能访问Redis。

2、设置访问密码 (需要重启redis才能生效)
在 redis.conf 中找到“requirepass”字段,在后面填上你需要的密码,Redis客户端也需要使用此密码来访问Redis服务。

3、修改Redis服务运行账号 (需要重启redis才能生效)
请以较低权限账号运行Redis服务,且禁用该账号的登录权限。另外可以限制攻击者往敏感写入文件,但是Redis数据还是能被黑客访问到,或者被黑客恶意删除。

4、设置防火墙策略
如果正常业务中Redis服务需要被其他服务器来访问,可以设置iptables策略仅允许指定的IP来访问Redis服务。

文章目录
  1. 1. 了解漏洞
    1. 1.1. redis是什么?
    2. 1.2. redis未授权访问漏洞产生的原因是什么?
  2. 2. 分析漏洞原理
    1. 2.1. 漏洞原理及其危害
    2. 2.2. 漏洞利用条件
  3. 3. 漏洞的重现和利用
    1. 3.1. 安装redis
    2. 3.2. 根据漏洞原理配置redis
    3. 3.3. 安装ssh服务端
    4. 3.4. 开启ssh公钥登录,并验证是否正确开启。
    5. 3.5. 对漏洞进行利用
  4. 4. 建议修复方案