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保护

漏洞利用核心思路

  1. 初始条件:获取任意文件/文件夹删除能力
  2. 目标:破坏Config.Msi的安全机制
  3. 步骤
    • 在Windows Installer创建Config.Msi后立即删除它
    • 用弱DACL重新创建Config.Msi
    • 篡改其中的.rbs/.rbf文件
    • 利用回滚机制执行恶意操作

技术实现细节

关键组件

  1. 符号链接工具:用于创建文件关联
  2. Oplock(机会锁):控制文件访问时机
  3. 线程优先级控制:提高竞争成功率

典型利用流程(CVE-2022-21838)

  1. 准备阶段

    • 创建临时文件夹结构(temp\folder1)
    • 在目标文件(file1.txt)上设置Oplock
    • 等待服务进程枚举并尝试删除文件
  2. 触发阶段

    • Oplock触发时移动文件,使文件夹为空
    • 删除空文件夹
    • 维持Oplock状态不释放
  3. 重定向阶段

    • 创建\RPC Control\file1.txt符号链接
    • 指向C:\Config.Msi::$INDEX_ALLOCATION
    • 释放Oplock导致"删除"实际指向Config.Msi
  4. 提权阶段

    • 弱DACL重建Config.Msi
    • 注入恶意回滚脚本
    • 触发回滚执行系统命令

代码分析关键函数

  1. bitnessCheck()

    • 检测系统架构(x64/x86)
    • 确保加载正确的动态链接库
  2. install()

    • 处理MSI安装包
    • 设置INSTALLUILEVEL_NONE关闭界面
    • 执行安装/卸载操作
  3. 监控循环

    • 高优先级线程监控Config.Msi创建/删除
    • 检测.rbs文件生成
    • 降级DACL并写入恶意内容
  4. 符号链接处理

    • 创建::$INDEX_ALLOCATION流关联
    • 通过DeleteFileW实现文件夹删除

CVE-2023-21752案例分析

漏洞本质

Windows Backup Service中的条件竞争漏洞,源于:

  • sdengin2.dllIsWritableCSdCommonImpl::_IsValidStagingArea函数修改
  • GetTempFileNameW改为CheckDevicePathIsWritable
  • 删除文件操作(SxDeleteFile)的校验不严

利用特点

  1. 高频率尝试获取文件句柄
  2. 结合Oplock控制操作时机
  3. 需要多次运行提高成功率("大力出奇迹"法)

优化技巧

  • 避免二次监控直接释放锁
  • 快速文件创建循环
  • 使用cmd.rbs实现回滚命令执行

防御建议

  1. 加强Config.Msi目录权限
  2. 监控异常的文件删除操作
  3. 限制符号链接创建权限
  4. 及时安装相关补丁

参考工具

  1. symboliclink-testing-tools
  2. CVE-2023-21752 PoC
  3. Process Monitor用于行为分析

总结

Windows任意文件删除到提权的技术核心在于滥用Windows Installer的回滚机制,通过精心控制的文件操作时机和符号链接重定向,将简单的删除操作转化为权限提升漏洞。理解这一技术有助于更好地防御类似攻击,同时也展示了Windows安全机制中一些微妙的交互可能带来的风险。

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文件 利用回滚机制执行恶意操作 技术实现细节 关键组件 符号链接工具 :用于创建文件关联 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 注入恶意回滚脚本 触发回滚执行系统命令 代码分析关键函数 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安全机制中一些微妙的交互可能带来的风险。