WINDOWS系統密碼破解全攻略

題目:Windows系統密碼破解全攻略
做者:hackest [H.S.T.]
來源:hackest's blog

此文章已發表在《黑客X檔案》2009年第6期雜誌上
後經做者發佈在博客上,如轉載請務必保留此信息!php

背景

要破解一個程序的密碼,要先了解它的一些背景知識。先來簡單說一下Windows系統密碼的加密算法。早期SMB協議在網絡上傳輸明文口令。後來出現"LAN Manager Challenge/Response"驗證機制,簡稱LM,它是如此簡單以致很容易被破解。微軟提出了WindowsNT挑戰/響應驗證機制,稱之爲NTLM。如今已經有了更新的NTLMv2以及Kerberos驗證體系。Windows加密過的密碼口令,咱們稱之爲hash(中文:哈希),Windows的系統密碼hash默認狀況下通常由兩部分組成:第一部分是LM-hash,第二部分是NTLM-hash。如下內容摘選自安全焦點:

--------------------------------------引文開始----------------------------------------------

1、如何從明文口令生成LM-Hash?

一、假設明文口令是"Welcome",首先所有轉換成大寫WELCOME,再作以下變換:
"WELCOME" -> 57454C434F4D4500000000000000
先把WELCOME轉換成十六進制形式,在明文口令不足14字節的狀況下,後面添加0x00補足14字節。有些書上介紹添加空格(0x20)補足14字節,這是錯誤的,我不清楚是原做者寫錯了,仍是譯者的問題。

二、而後切割成兩組7字節的數據,分別經str_to_key()函數(代碼已附光盤)處理獲得兩組8字節數據:
57454C434F4D45 -str_to_key()-> 56A25288347A348A
00000000000000 -str_to_key()-> 0000000000000000

三、這兩組8字節數據將作爲DESKEY對魔術字符串"KGS!@#$%"進行標準DES加密(代碼已附光盤):

"KGS!@#$%" -> 4B47532140232425

56A25288347A348A -對4B47532140232425進行標準DES加密-> C23413A8A1E7665F
0000000000000000 -對4B47532140232425進行標準DES加密-> AAD3B435B51404EE

四、將加密後的這兩組數據簡單拼接,就獲得了最後的LM-Hash

Welcome的LM-Hash: C23413A8A1E7665FAAD3B435B51404EE。

顯然,因爲明文口令一開始就所有轉換成大寫,致使多個明文口令對應一個LM-Hash。反過來,在窮舉破解LM-Hash時,獲得的有可能不是原始口令,由於不可能肯定大小寫。仔細觀察前述SMB身份驗證過程,即便這裏獲得的不是原始口令(大小寫有差異),一樣能夠經過SMB身份驗證。這種轉換成大寫的行爲減少了窮舉破解難度。

另外一個弱點,當明文口令小於8字節時,LM-Hash後8字節的計算過程老是這樣的:

00000000000000 -str_to_key()-> 0000000000000000

對4B47532140232425進行標準DES加密-> AAD3B435B51404EE

這也將減少窮舉破解難度。

IBM設計了這個LM-Hash算法,魔術字符串"KGS!@#$%"的意義無從考證。這個算法稱之爲"哈希"不怎麼穩當,因爲是標準DES加密,徹底是可逆的。固然,因爲要窮舉的是DESKEY自己,與傳統所說的可逆有區別。

2、如何從明文口令生成NTLM-Hash?

IBM設計的LM-Hash算法存在幾個弱點,微軟在保持向後兼容性的同時提出了本身的挑戰響應機制,因此,NTLM-Hash應運而生。

一、假設明文口令是"123456",首先轉換成Unicode字符串,與LM-Hash算法不一樣,此次不須要添加0x00補足14字節:

"123456" -> 310032003300340035003600

從ASCII串轉換成Unicode串時,使用little-endian序,微軟在設計整個SMB協議時就沒考慮過big-endian序,ntoh*()、hton*()函數不宜用在SMB報文解碼中。0x80以前的標準ASCII碼轉換成Unicode碼,就是簡單地從0x??變成0x00??。此類標準ASCII串按little-endian序轉換成Unicode串,就是簡單地在原有每一個字節以後添加0x00。

二、對所獲取的Unicode串進行標準MD4單向哈希(代碼已附光盤),不管數據源有多少字節,MD4固定產生128-bit的哈希值,16字節:

310032003300340035003600 -進行標準MD4單向哈希-> 32ED87BDB5FDC5E9CBA88547376818D4

三、就獲得了最後的NTLM-Hash

123456的NTLM-Hash: 32ED87BDB5FDC5E9CBA88547376818D4。

NTLM-Hash與LM-Hash算法相比,明文口令大小寫敏感,但沒法根據NTLM-Hash判斷原始明文口令是否小於8字節,擺脫了魔術字符串"KGS!@#$%"。

MD4是真正的單向哈希函數,窮舉作爲數據源出現的明文,難度較大。問題在於,微軟一味強調NTLM-Hash的強度高,卻避而不談一個事實,爲了保持向後兼容性,NTLM-Hash缺省老是與LM-Hash一塊兒使用的。這意味着NTLM-Hash強調再高也是無助於安全的,相反潛在損害着安全性。增長NTLM-Hash後,首先利用LM-Hash的弱點窮舉出原始明文口令的大小寫不敏感版本,再利用NTLM-Hash修正出原始明文口令的大小寫敏感版本。

--------------------------------------引文結束----------------------------------------------

實戰

理論準備得差很少了,進入實戰階段。當你已經獲得Windows的系統權限後,如何才能得到管理員的密碼hash呢?不一樣版本的Windows的hash獲取方法不同。用到的工具備pwdump7.exe、GetHashes.exe、SAMInside.exe、LC五、Cain、Proactive Password Auditor、Ophcrack。下面將會詳細介紹如何抓取各Windows版本的系統密碼hash。算法

都是工具的使用,想了解的看原文,略過。安全

vista、200八、win7下,pwdump7.exe,SAMInside.exe,Cain、PPA能夠抓取Hash。網絡

在線查詢

若是你以爲上面提到的這麼多東西都太麻煩,有沒有在線查詢hash的網站呢?答案是確定的!國外有一個在線查詢hash的網站:http://www.objectif-securite.ch/en/products.php,和Ophcrack的官方有點關係的哦,嘿嘿……不過在線查詢只容許查tables XP free的表,有點惋惜……同時特別要指出的是,在線查詢的時候須要注意hash的格式。好比用戶名和密碼都是hackest的hash爲:
hackest:1011:7831A0FFABEE5FB3AAD3B435B51404EE:D78DF6E868E606E442313C5DF93216F1:::
咱們只須要把7831A0FFABEE5FB3AAD3B435B51404EE:D78DF6E868E606E442313C5DF93216F1複製填入hash後面的框,再點擊submit hash便可進行查詢,同時也支持輸入密碼返回hash值,如圖33。



Vista之後系統若是開啓BitLocker則以上方法均無效,根本沒法抓取到hash,不過好在BitLocker默認是關閉的,不是特別須要的用戶通常不會開啓它。ide