Windows之任意文件删除到提权
字数 1779 2025-08-19 12:42:28
Windows任意文件删除漏洞提权技术深度解析
前言
本文深入分析Windows系统中从任意文件/文件夹删除漏洞到系统提权的技术原理和实现方法。ZDI曾发表过相关研究,展示了如何通过这类漏洞提升至SYSTEM权限。我们将结合多个CVE案例(CVE-2022-21838、CVE-2023-21752等)详细解析这一提权手法的技术细节。
技术原理基础
DACL与文件权限
- DACL(自由访问控制列表):Windows文件系统的安全机制,属于ACL(访问控制列表)的一种
- 当进程访问安全对象时,系统检查DACL中的ACE(访问控制条目)决定是否授予权限
- 无DACL表示完全开放访问,空DACL则拒绝所有访问
Windows Installer服务机制
- 负责应用程序安装(通常处理.msi文件)
- 安装过程会记录更改,允许回滚到原始状态
- 回滚相关文件存储在
X:\Config.Msi目录中:.rbs文件:回滚脚本.rbf文件:原始文件副本
- 默认情况下,
Config.Msi及其文件有强DACL保护
漏洞利用核心思路
- 初始条件:获取任意文件/文件夹删除能力
- 目标:破坏
Config.Msi的安全机制 - 步骤:
- 在Windows Installer创建
Config.Msi后立即删除它 - 用弱DACL重新创建
Config.Msi - 篡改其中的.rbs/.rbf文件
- 利用回滚机制执行恶意操作
- 在Windows Installer创建
技术实现细节
关键组件
- 符号链接工具:用于创建文件关联
- Oplock(机会锁):控制文件访问时机
- 线程优先级控制:提高竞争成功率
典型利用流程(CVE-2022-21838)
-
准备阶段:
- 创建临时文件夹结构(
temp\folder1) - 在目标文件(
file1.txt)上设置Oplock - 等待服务进程枚举并尝试删除文件
- 创建临时文件夹结构(
-
触发阶段:
- Oplock触发时移动文件,使文件夹为空
- 删除空文件夹
- 维持Oplock状态不释放
-
重定向阶段:
- 创建
\RPC Control\file1.txt符号链接 - 指向
C:\Config.Msi::$INDEX_ALLOCATION - 释放Oplock导致"删除"实际指向
Config.Msi
- 创建
-
提权阶段:
- 弱DACL重建
Config.Msi - 注入恶意回滚脚本
- 触发回滚执行系统命令
- 弱DACL重建
代码分析关键函数
-
bitnessCheck():- 检测系统架构(x64/x86)
- 确保加载正确的动态链接库
-
install():- 处理MSI安装包
- 设置
INSTALLUILEVEL_NONE关闭界面 - 执行安装/卸载操作
-
监控循环:
- 高优先级线程监控
Config.Msi创建/删除 - 检测.rbs文件生成
- 降级DACL并写入恶意内容
- 高优先级线程监控
-
符号链接处理:
- 创建
::$INDEX_ALLOCATION流关联 - 通过
DeleteFileW实现文件夹删除
- 创建
CVE-2023-21752案例分析
漏洞本质
Windows Backup Service中的条件竞争漏洞,源于:
sdengin2.dll中IsWritable和CSdCommonImpl::_IsValidStagingArea函数修改- 将
GetTempFileNameW改为CheckDevicePathIsWritable - 删除文件操作(
SxDeleteFile)的校验不严
利用特点
- 高频率尝试获取文件句柄
- 结合Oplock控制操作时机
- 需要多次运行提高成功率("大力出奇迹"法)
优化技巧
- 避免二次监控直接释放锁
- 快速文件创建循环
- 使用
cmd.rbs实现回滚命令执行
防御建议
- 加强
Config.Msi目录权限 - 监控异常的文件删除操作
- 限制符号链接创建权限
- 及时安装相关补丁
参考工具
- symboliclink-testing-tools
- CVE-2023-21752 PoC
- Process Monitor用于行为分析
总结
Windows任意文件删除到提权的技术核心在于滥用Windows Installer的回滚机制,通过精心控制的文件操作时机和符号链接重定向,将简单的删除操作转化为权限提升漏洞。理解这一技术有助于更好地防御类似攻击,同时也展示了Windows安全机制中一些微妙的交互可能带来的风险。