Windows server 2012用戶hash抓取方法研究(本地+域)
為避免文章過長,這里就不貼出詳細測試過程了。經(jīng)過我的測試,發(fā)現(xiàn)本地用戶hash抓取的方法中,以下幾種方式是可行的:
注冊表導出+cain
Pwdump7.exe
QuarksPwDump.exe
mimikatz.exe
這幾種方式都可以抓到本地用戶hash,其中mimikatz.exe只能抓到登陸過的賬戶的hash值,已經(jīng)抓取不到明文的密碼了,但是,有一些有意思的東西,直接上圖:
仔細看圖,可以發(fā)現(xiàn),wdigest的內容為n.a. ,也就是沒有抓取到明文密碼。看來微軟還是有一點改進的,注入lsass.exe進程已經(jīng)抓不到明文了。
但是,重點是?。?!LM hash被抓出來了,而且完全是正確的?。?!
當密碼長度小于等于14位,只要有l(wèi)m hash基本上都是秒破,我見過很多管理員的密碼根本沒有14位長。從vista開始就已經(jīng)不保存lm hash了,但是沒想到2012里還能抓到lm
然后wce.exe gethashes.exe gsecdump.exe抓取本地用戶hash都失敗了,其中wce更讓人無語
全執(zhí)行后會導致服務器直接重啟
不過我倒是順帶發(fā)現(xiàn)psexec啟用system權限的方法對于2012還是適用的
域用戶hash抓取測試
在虛擬機中搭建好域,域控制器就是這臺windows server 2012,另外再加入一臺windows server 2003的成員機器作為測試。
域中添加AdminUser, User1用戶,其中AdminUser是域管理員,再加上本地用戶Administrator在安裝域時會自動添加成域管理員,所以總共是3個有效用戶,2個域管理員。
首先測試在2003的成員機器上登陸域用戶時的情況,可以用mimikatz和各種工具直接抓取明文,這個和以前的情況一樣,就不貼圖了。
在windows server 2012上用mimikatz直接抓取域登陸用戶hash,測試成功。
接下來是重頭戲,如何抓取所有域用戶的hashwww.t00ls.net5 v1 s4 P, J, E& {
gethashes.exe 和gsecdump.exe都直接悲劇,這意味著想要輕量級的抓取所有域用戶hash已經(jīng)很難了。
在線抓取失敗,沒辦法只能祭出終極武器:離線抓?。?/p>
第一種辦法: vssown.vbs + libesedb + NtdsXtract
詳細出處參考這里:http://pauldotcom.com/2011/11/safely-dumping-hashes-from-liv.html
首先用vssown.vbs把域數(shù)據(jù)庫ntds.dit和SYSTEM文件復制一份,然后把復制文件下載回本地,再利用libesedb分解ntds.dit文件,最后用NtdsXtract分析出用戶hash信息,這種方法除了能獲取用戶當前密碼hash外,還能獲取歷史密碼hash值,能給社工帶來更多的幫助。除此之外還能獲取很多其他的信息,比如所有計算機列表,操作系統(tǒng)等等保存在域數(shù)據(jù)庫中的數(shù)據(jù)。
具體的操作過程就直接上圖了,不懂得可以去看那篇英文的文章
不過有一點需要注意,那篇文章過后vssown.vbs有更新過,在創(chuàng)建shadow copy時需要指定盤符,不然會有個下標越界的錯誤,這是為了方便當域數(shù)據(jù)庫保存在D盤時的情況。
然后把ntds.dit和SYSTEM這兩個文件下載回本地,放到BT5里面提取hash:
可以看到成功的提取了域里面所有用戶的密碼hash
在實際滲透時需要注意的問題:
域的數(shù)據(jù)庫根據(jù)域的規(guī)模大小不一,我見過最大的有5G,所以下載回本地時推薦壓縮后再下載
提取hash時最好導出到文件中,直接在后面加 >filename.txt
第二種辦法:ntdsutil.exe + QuarksPwDump.exe
Ntdsutil.exe 是域控制器自帶的域數(shù)據(jù)庫管理工具。從windows server 2008 開始就有了。
這個方法在QuarksPwDump.exe程序的Readme.txt里面有詳細的講解(windows 2008那個,適用于windows server 2012)。按順序運行下列命令,不用帶#號
#ntdsutil
#snapshot
#activate instance ntds
#create
#mount {GUID}
#copy c:\MOUNT_POINT\WINDOWS\NTDS\NTDS.dit c:\NTDS_saved.dit
#unmount {GUID}
#quit
#quit
上圖:
然后用QuarksPwDump.exe導出hash值,運行命令:
QuarksPwDump.exe --dump-hash-domain --ntds-file c:\ntds.dit
注意:我發(fā)現(xiàn)其實作者忘了一個步驟,是刪除快照信息,如果域管理員是利用這個工具進行管理的話,會很容易發(fā)現(xiàn)有人創(chuàng)建過快照,所以在quit之前應該執(zhí)行delete {GUID}命令
以上就是兩種比較重量級的抓取hash的方法了。第一種方法我經(jīng)常用,從2003-2012通殺,有時候會遇到vssown.vbs出錯,
一般是在windows 2008 R2上面出錯比較多,這時候改用vssadmin.exe就OK的,vssadmin.exe的用法、功能和vssown.vbs差不多,vssadmin.exe在2008 R2中自帶。
具體使用方法參考:http://technet.microsoft.com/en-us/library/cc754968%28v=ws.10%29.aspx
第二種也可以通殺2003到2012,但是2003里面比較麻煩,需要在圖形界面中手動備份數(shù)據(jù)庫才行,2008 和 2012則可以在命令行下搞定。另外用vssown.vbs復制出來的ntds.dit數(shù)據(jù)庫不能用QuarksPwDump抓取。
補充:cmd shell下的抓取方式
前面講了兩種抓取所有域用戶hash的方法,但是都是在交互的圖形化界面中進行的。實際的滲透中,最好不要用mstsc登錄域控制器,
很可能上面裝有監(jiān)控遠程桌面登錄信息的各種工具。更實際的情況應該是我們從一臺成員服務器上通過遠程的cmd shell抓取域用戶信息。我一般用psexec開啟一個遠程cmdshell,如果沒有域管理員密碼明文,就用wce進行hash注入,再用psexec就可以了。
第一種方法主要是vssown.vbs的操作,沒有任何交互式的命令需要執(zhí)行,所以沒有什么特別的,在psexec下面直接操作即可
第二種方法中ntdsutil.exe的命令是交互式的,需要一步步輸入,而psexec開啟的shell是沒辦法這么做的,會直接卡死在那。于是我嘗試了下把命令寫在一起,就像用netsh配置網(wǎng)絡信息時一樣,發(fā)現(xiàn)是可以用的,只不過有空格的地方用引號就行了。
所以ntdsutil的命令就可以寫成
ntdsutil snapshot "activate instance ntds" create quit quit
ntdsutil snapshot "mount {GUID}" quit quit
copy MOUNT_POINT\windows\NTDS\ntds.dit c:\ntds.dit
ntdsutil snapshot "unmount {GUID}" quit quit2 v- p5 I2 O E
ntdsutil snapshot "delete {GUID}" quit quit
接下來就是導出hash,執(zhí)行: QuarksPwDump.exe --dump-hash-domain --ntds-file c:\ntds.dit
具體的過程如下:
總結:
測試了這么多,最大的收獲應該是mimikatz還能抓到lm hash。其實還是有很多工具可以抓到hash的,期待wce的更新,他的hash注入功能還是很實用的。
另外我發(fā)現(xiàn)有時候psexec在退出后,遠程服務器的psexec的服務并沒有被刪除,這點相當危險,而且psexec會安裝服務,很容易被管理員發(fā)現(xiàn)。
理論上psexec可以用wmi遠程執(zhí)行命令代替,但是一直沒有去研究那個,如果哪位大牛了解,望不吝賜教。
最后,吐槽下windows server 2012爛到掉渣的用戶體驗,用起來跟翔一樣……