Windows SeBackupPrivilege 与 SeRestorePrivilege 特权利用

在 Windows 操作系统中,SeBackupPrivilege (备份文件和目录)和 SeRestorePrivilege (还原文件和目录)是两个极其强大的用户权限(Privilege),它们允许持有者在备份/还原语义下绕过 NTFS 文件系统的标准访问控制列表(DACL/ACL),从而读取或写入几乎任意文件,包括那些被 SYSTEM、TrustedInstaller 或高保护级别文件所守护的敏感资源(如 SAM、SYSTEM、NTDS.dit 等)。

这两个特权通常授予 AdministratorsBackup Operators 组成员,但默认情况下处于 Present(存在)但 Disabled(未启用) 状态。Microsoft 的设计原则是"最小特权"(Least Privilege):特权必须显式启用才能生效,以防止意外或恶意滥用。

一、核心原理:Privilege 的 Present vs Enabled 状态

Windows Token(访问令牌)中的每个特权都有两种主要状态(通过 whoami /priv 查看):

  • Present(存在):用户/组被授予该特权,但进程启动时默认 Disabled。
  • Enabled (启用):进程通过 AdjustTokenPrivileges API 主动启用后,系统才会真正允许绕过 ACL 检查。

Microsoft 官方文档强调 :SeBackupPrivilege 和 SeRestorePrivilege 在使用时必须 Enabled,否则系统仍会执行标准 ACL 检查。

关键机制

  • 当进程以 FILE_FLAG_BACKUP_SEMANTICS 标志调用 CreateFile 时,系统会检查调用者 Token 是否拥有并已启用 SeBackupPrivilege(读)或 SeRestorePrivilege(写)。
  • 如果特权仅 Present 但 Disabled ,即使指定备份标志,CreateFile 也会失败(Access Denied),除非工具内部自动调用启用 API。

SeBackupPrivilege 具体赋予的访问权(当启用时):

  • READ_CONTROL、ACCESS_SYSTEM_SECURITY、FILE_GENERIC_READ、FILE_TRAVERSE 等。
  • 完全绕过读 ACL 检查,但写/其他操作仍受 ACL 限制。

SeRestorePrivilege 具体赋予的访问权(当启用时):

  • WRITE_DAC、WRITE_OWNER、ACCESS_SYSTEM_SECURITY、FILE_GENERIC_WRITE、FILE_ADD_FILE、FILE_ADD_SUBDIRECTORY、DELETE 等。
  • 完全绕过写 ACL 检查,甚至允许设置任意所有者(包括修改 TrustedInstaller 保护文件的所有权)。

二、几种打法对比

以下四种最经典手法,基于内核行为、API 调用链和社区/红队多年实测。

打法序号 手法名称 读/写类型 所需特权(必须拥有) 是否必须手动启用(Enabled)? 内部机制与自动启用说明 典型场景 & 风险
1 reg save HKLM\SAM / SYSTEM 纯读 SeBackupPrivilege 不需要 RegSaveKey API 内部自动调用 AdjustTokenPrivileges 启用特权,只要特权 Present 且进程 Elevated 即可成功 本地/域成员机 hash dump,最低噪音
2 robocopy /b + diskshadow 影子拷贝 读+写 SeBackup + SeRestore 不需要 robocopy.exe 内部在 /b 模式下自动启用两者(BackupRead + BackupWrite API) 域控 NTDS.dit / locked 文件
3 粘连键(sethc.exe)/Utilman.exe 替换 纯写 SeRestorePrivilege 需要 普通 copy/rename 不带备份语义,必须手动启用 SeRestore 才能覆盖受保护文件(无自动机制) 登录屏 SYSTEM cmd 提权
4 Copy-FileSeBackupPrivilege (DLL) 纯读 SeBackupPrivilege 需要 自定义 .NET 代码使用 CreateFile + FILE_FLAG_BACKUP_SEMANTICS,必须显式调用 Set-SeBackupPrivilege 任意文件读取,最灵活 PoC
打法1:reg save
  • API 调用链RegSaveKey → 内核以备份模式打开 registry hive 文件(本质是文件读操作)。
  • 为什么不需要手动启用reg.exe 作为系统内置工具,在检测到需要备份语义时,会自动对当前 Token 执行 AdjustTokenPrivileges 启用 SeBackupPrivilege。
  • 前提 :必须在 Elevated(管理员权限)cmd/PowerShell 中运行,否则 UAC 会阻挡。即使特权 Present,在非提升上下文中也可能失败。

示例

cmd 复制代码
reg save HKLM\SAM C:\temp\sam.hive
reg save HKLM\SYSTEM C:\temp\system.hive
打法2:robocopy /b
  • API 调用链CreateFile(带 FILE_FLAG_BACKUP_SEMANTICS)→ BackupRead(源) + BackupWrite(目标)。
  • 为什么不需要手动启用:robocopy.exe 是专为备份设计的内置工具,在解析到 /b 参数时,会主动启用 SeBackupPrivilege 和 SeRestorePrivilege。
  • 影子拷贝配合:diskshadow 创建 Volume Shadow Copy(VSS),robocopy 从影子卷读取锁定文件(如 NTDS.dit)。

示例

cmd 复制代码
diskshadow /s shadow.txt
robocopy /b Z:\Windows\NTDS C:\temp ntds.dit
打法3:Utilman.exe / sethc.exe 替换
  • 为什么必须手动启用 :普通 copyxcopymoverename 不指定 FILE_FLAG_BACKUP_SEMANTICS,因此不触发备份/还原语义检查。系统严格执行目标文件的写 ACL(通常 TrustedInstaller:Full + Administrators:RX)。
  • 启用后效果:SeRestorePrivilege 赋予 WRITE_DAC / WRITE_OWNER / DELETE 等,允许覆盖 System32 下受保护 exe。
  • 触发:锁屏后 Win+U → SYSTEM 权限 cmd。

示例(需先启用):

powershell 复制代码
# 使用 gtworek/PSBits 的脚本
. .\Enable-SeRestorePrivilege.ps1
Enable-SeRestorePrivilege

copy /Y C:\Windows\System32\cmd.exe C:\Windows\System32\utilman.exe
打法4:Copy-FileSeBackupPrivilege
  • 项目来源:giuliano108/SeBackupPrivilege(开源 PoC)。
  • 为什么必须手动启用 :这是自定义 .NET 代码,使用 CreateFile + FILE_FLAG_BACKUP_SEMANTICS + BackupRead API。不像内置工具,它不会自动启用特权
  • 使用步骤
    1. 上传 SeBackupPrivilegeUtils.dll 和 SeBackupPrivilegeCmdLets.dll。
    2. Set-SeBackupPrivilege(内部调用 AdjustTokenPrivileges)。
    3. Copy-FileSeBackupPrivilege <源> <目标>
  • 优势:支持 UNC 路径(\dc\c$...),无需影子卷。

三、总结

  1. whoami /priv → 检查 Backup 和 Restore 是否 Present(即使 Disabled 也极大概率可用)。
  2. 首选 reg save → 自动、无需额外代码、最低检测风险。
  3. 域控 → robocopy /b → 自动双特权,获取域 hash 的核武器。
  4. 快速 shell → Utilman 替换 → 需手动启用 SeRestore,但成功后直接 SYSTEM。
  5. 灵活读取 → DLL PoC → 需手动启用,但支持任意路径。
相关推荐
佑白雪乐2 小时前
<Python基础第2集>速通list+tuple+string+序列+set+dict容器
windows·python·list
悾说3 小时前
xRDP实现Linux图形化通过Windows RDP访问Linux远程桌面
linux·运维·windows
LeetCode天天刷3 小时前
1348 推文计数【区间】
java·服务器·windows
wregjru4 小时前
【C++】2.8C++11特性
windows
鸠摩智首席音效师4 小时前
如何查看 Windows 上安装的 .NET Framework 版本 ?
windows·.net
不染尘.4 小时前
Linux的基本管理及命令(下)
linux·windows·ssh
wgl6665205 小时前
自主Shell命令行解释器
linux·运维·windows
xuyuan19985 小时前
超越Selenium:自动化测试框架Cypress在现代前端测试中的卓越实践(windows版本)环境搭建
前端·windows·cypress
猫头虎14 小时前
如何在浏览器里体验 Windows在线模拟器:2026最新在线windows模拟器资源合集与技术揭秘
运维·网络·windows·系统架构·开源·运维开发·开源软件