1、hash存放
C:\Windows\NTDS\Ntds.dit存放包括但不限于有关域用户、域组、用户hash等信息。其中域用户的密码hash由存储在system注册表配置单元中的密钥进行二次加密。
而在工作组环境下用户密码等信息存储在SAM文件中,想要破解SAM文件与Ntds.dit文件都需要拥有一个System文件。和SAM文件一样,Ntds.dit是默认被Windows系统锁定的。
2、ntds.dit获取
上文知ntds.dit文件被Windows锁定,必须要利用卷影拷贝服务*(Volume Shadow Copy Service,VSS)*才能获取该文件的副本。VSS本质上是属于快照技术的一种,主要用于备份和恢复,即使目标文件被处于锁定状态。
获取ntds.dit副本步骤如下:
- 创建目标主机的卷影拷贝(包含Windows上的全部文件)
- 然后在创建的卷影拷贝中将ntds.dit复制出来
- 最后将当菜创建的卷影拷贝删除
windows原生vssadmin工具
vssadmin是Windows上的一个卷影拷贝服务的命令行管理工具,可用于创建和删除卷影拷贝。*(适用范围Windows 10,Windows 8.1,Windows Server 2016,Windows Server 2012 R2,Windows Server 2012,Windows Server 2008 R2,Windows Server 2008)*
以下操作需要域管权限:
1)首先创建C盘的卷影副本
vssadmin create shadow /for=C:
2)将ntds.dit文件从卷影副本中拷贝出来,而后删除卷影副本即可
通过vbs脚本
脚本地址:https://raw.githubusercontent.com/borigue/ptscripts/master/windows/vssown.vbs
该脚本本质上通过wmi对shadowcopy进行操作的,与vssadmin类似,命令的流程:启动-创建卷影副本-拷贝ntds.dit-根据ID删除卷影副本
cscript Desktop\vssown.vbs /start
同样使用wmi实现vss(卷影拷贝服务)还有powershell脚本:https://github.com/samratashok/nishang/blob/master/Gather/Copy-VSS.ps1
原生工具Ntdsutil.exe创建快照
Ntdsutil.exe 是一个为 Active Directory 提供管理设施的命令行工具,该工具被默认安装在了域控制器上,不仅可以本地操作域控主机,还可以通过域内主机在域控上远程操作(需要域管权限)
以下操作需要域管权限:
1)为主机创建一个包含所有文件的快照,该快照中的文件在复制时同样不受windows锁定机制的影响。创建之后需要通过ID将快照挂在在磁盘中
ntdsutil snapshot "activate instance ntds" create quit quit
ntdsutil snapshot "mount <ID>" quit quit
2)复制出ntds.dit后,取消快照挂载并删除快照
创建IFM提取Ntds.dit文件
在使用ntdsutil创建创建媒体安装集(IFM)时,会自动进行生成快照、加载、将ntds.dit、计算机的SAM和SYSTEM文件复制到目标文件夹中等操作,我们可以利用该过程获取NTDS.dit文件,需要管理员权限。
创建ifm,目录名为test,创建后访问test目录能看到ntds.dit和SYSTEM文件,复制出来后删除test目录即可
ntdsutil "ac i ntds" "ifm" "create full c:/test" q q
PowerSploit中的Invoke-NinjaCopy脚本
地址:https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-NinjaCopy.ps1
该脚本用于“万能复制”,像windows主机里SAM文件、域控中的Ntds.dit,里面数据很多有价值的信息,普通的COPY命令是无法复制的,使用万能复制可以复制这类文件。
该脚本通过读取原始卷并解析NTFS结构,从NTFS分区卷复制文件。
使用方法:
Import-Module .\Invoke-NinjaCopy.ps1
Invoke-NinjaCopy -Path "C:\windows\ntds\ntds.dit" -LocalDestination "C:\ntds.dit"
Invoke-NinjaCopy -Path "C:\Windows\System32\config\SYSTEM" -LocalDestination "C:\system.hive"
★★★ 这种方法没有调用Volume Shadow Copy服务,所以不会产生系统日志文件7036(卷影拷贝服务进入运行状态的标志)。
3、SYSTEM文件获取
SYSTEM中保存ntds.dit的加密密钥,且同样需要绕过windows锁对其读写
获取ntds.dit文件的相关方法同样适用于此,也可以使用reg命令提取:
reg save hklm\system c:\system.hive
4、导出ntds.dit中的hash
Impacket中的secretsdump
该脚本可远程dump出域控主机的ntds.dit文件中的hash,也可以本地使用
PS:该脚本默认使用的是drsuapi,此类api实现目录复制服务远程协议Directory Replication Service (DRS) Remote Protocol
本地导出system.hive和ntds.dit文件进行测试如下:
python3 examples/secretsdump.py -system winhash/system.hive -ntds winhash/ntds.dit LOCAL
secretsdump.py默认使用的drsuapi导出,设置选项也支持vss方式导出
DSInternals PowerShell模块
powershell 5版本以上的直接使用命令安装
Install-Module DSInternals -Force
5以下版本的下载release通过import-module使用
Ps: powershell一般有执行策略限制,如果导入报警需要使用命令设置策略宽松,如下
Set-ExecutionPolicy unRestricted
而后就可以导入模块,跑出SYSTEM中的密钥,而后跑出用户hash
Get-Bootkey -SystemHivePath "C:\Users\xxx\Desktop\fotest\SYSTEM"
Get-ADDBAccount -All -DBPath 'C:\Users\xxx\Desktop\fotest\ntds.dit' -Bootkey <KEY>
mimikatz在线提取
mimikatz中利用dcsync可提取域控上Ntds.dit中的hash,该方法需要域管权限,在任意域内机器上使用。
在域中,不同的DC之间,每隔15分钟会进行一次域数据的同步。当一个DC(辅助DC)想从其他DC(主DC)获取数据时,辅助DC会向主DC发起一个GetNCChanges请求。请求的数据包括需要同步的数据,如果需要同步的数据比较多,则会重复上述过程。DCSync就是利用的这个原理,模仿一个域控,从真实的域控中请求数据,通过Directory Replication Service(DRS)服务的GetNCChanges接口向域控发起数据同步请求。
使用命令:
lsadump::dcsync /domain:xxx.com (/user:administrator) /all /csv
End
写完啦,东拼西凑做了个小总结,算是一个复现吧,由于刚刚学习网知识,有不正确的地方请指正
reference
https://3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-DCSync