萬盛學電腦網

 萬盛學電腦網 >> 系統工具 >> 安全科普:詳解Windows Hash

安全科普:詳解Windows Hash

   概述

  1.1 hash

  Hash,一般翻譯做“散列”,也有直接音譯為“哈希”的,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,所以不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。

  常用hash算法的介紹:

  (1)MD4

  MD4(RFC 1320)是 MIT 的Ronald L. Rivest在 1990 年設計的,MD 是 Message Digest(消息摘要) 的縮寫。它適用在32位字長的處理器上用高速軟件實現——它是基於 32位操作數的位操作來實現的。

  (2)MD5

  MD5(RFC 1321)是 Rivest 於1991年對MD4的改進版本。它對輸入仍以512位分組,其輸出是4個32位字的級聯,與 MD4 相同。MD5比MD4來得復雜,並且速度較之要慢一點,但更安全,在抗分析和抗差分方面表現更好。

  (3)SHA-1及其他

  SHA1是由NIST NSA設計為同DSA一起使用的,它對長度小於264的輸入,產生長度為160bit的散列值,因此抗窮舉(brute-force)性更好。SHA-1 設計時基於和MD4相同原理,並且模仿了該算法。

  Hash算法在信息安全方面的應用主要體現在以下的3個方面:

  (1)文件校驗

  我們比較熟悉的校驗算法有奇偶校驗和CRC校驗,這2種校驗並沒有抗數據篡改的能力,它們一定程度上能檢測並糾正數據傳輸中的信道誤碼,但卻不能防止對數據的惡意破壞。

  MD5 Hash算法的"數字指紋"特性,使它成為目前應用最廣泛的一種文件完整性校驗和(Checksum)算法,不少Unix系統有提供計算md5 checksum的命令。

  (2)數字簽名

  Hash 算法也是現代密碼體系中的一個重要組成部分。由於非對稱算法的運算速度較慢,所以在數字簽名協議中,單向散列函數扮演了一個重要的角色。對 Hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對文件本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。

  (3) 鑒權協議

  如下的鑒權協議又被稱作挑戰–認證模式:在傳輸信道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。以上就是一些關於hash以及其相關的一些基本預備知識。

  windows hash

  Windows hash由二部分組成,分別是LM HASH&NT HASH。Windows系統關於hash的組成如下:

  用戶名稱:RID:LM-HASH值:NT-HASH值

  2.1 Windows下LM HASH生成原理

  LM HASH生成規則如下:

  1.用戶的密碼被限制為最多14個字符。

  2.用戶的密碼轉換為大寫。

  3.系統中用戶的密碼編碼使用了OEM內碼頁

  4.密碼不足14字節將會用0來補全。

  5.固定長度的密碼被分成兩個7byte部分。每部分轉換成比特流,在分7bit為一組末尾加0,組成新的編碼

  6.上步驟得到的8byte二組,分別作為DES key為“KGS!@#$%”進行加密。

  7.將二組DES加密後的編碼拼接,得到最終LM HASH值。

  實例演示:· 假設明文口令是“admin”,首先全部轉換成大寫“ADMIN”,· 密碼字符串大寫後變換成十六進制串:41444D494E· 轉換後的十六進制字符串按照二進制計算只有40bit,為了滿足14字節的要求,所以需要補全72bit的二進制0,得最終補全後十六進制為:41444D494E000000000000000000· 將上述編碼(41444D494E000000000000000000)分成2組7byte的數據,分別為:41444D494E000000000000000000· 將每一組7byte的十六進制轉換為二進制,每7bit一組末尾加0,在轉換成十六進制組成得到2組8byte的編碼:41444D494E0000—>40A212A89470000000000000000000—>0000000000000000· 利用上面計算出來的2組編碼,作為DES加密key分別對“KGS!@#$%”(換算成十六進制:4B47532140232425)字符,進行DES加密,如下:40A212A894700000—-DES加密—-F0D412BD764FFE810000000000000000—-DES加密—-AAD3B435B51404EE

 

 

  · 將二組值拼接,最終得到LM HASH值為:F0D412BD764FFE81 AAD3B435B51404EE驗證如下圖:

 

  2.2 Windows下NTLM Hash生成原理IBM設計的LM Hash算法存在幾個弱點,微軟在保持向後兼容性的同時提出了自己的挑戰響應機制,NTLM Hash便應運而生。假設明文口令是"123456",首先轉換成Unicode字符串,與LM Hash算法不同,這次不需要添加0補足14字節"123456"->310032003300340035003600。從ASCII串轉換成Unicode串時,使用little-endian序,微軟在設計整個SMB協議時就沒考慮過big-endian 序,ntoh*()、hton*()函數不宜用在SMB報文解碼中。0×80之前的標准ASCII碼轉換成Unicode碼,就是簡單地從0x??變成 0×00??。此類標准ASCII串按little-endian序轉換成Unicode串,就是簡單地在原有每個字節之後添加0×00。對所獲取的 Unicode串進行標准MD4單向哈希,無論數據源有多少字節,MD4固定產生128-bit的哈希值,16字節 310032003300340035003600-進行標准MD4單向哈希->32ED87BDB5FDC5E9 CBA88547376818D4,就得到了最後的NTLM HashNTLM Hash:32ED87BDB5FDC5E9CBA88547376818D4。與LM Hash算法相比,明文口令大小寫敏感,無法根據NTLM Hash判斷原始明文口令是否小於8字節,擺脫了魔術字符串"KGS!@#$%"。MD4是真正的單向哈希函數,窮舉作為數據源出現的明文,難度較大。驗證如下:

 

  開始破解3.1 抓取windows hash在windows中分別用了LM HASH和NTLM HASH對密碼進行了加密,所以抓取任意一個HASH都可以破解密碼,只不過如果二個HASH都可以抓到,密碼的破譯成功率會大大提升。經常使用抓windows hash的工具很多,像SAMInside,gethash等等。個人比較傾向於使用SAMinside工具,該工具不僅可以在線抓取windows hash 還可以導入存儲windows hash的 sam等文件獲取hash值。文件位置:C:windowssystem32configSAM在windows xp,server2003之前包括xp&2003的系統都可以通過工具抓取到完整的LM HASH&NT HASH的。這樣就可以直接通過在線的破譯網站進行密碼破解。但是之後的系統可以改變一些設置讓操作系統存儲LM HASH值到SAM文件中。方便我們的抓取。3.1.1 xp下hash抓取及破解(略) 3.1.2 win 7下hash抓取及破解步驟一:導入本地的用戶hash值

 

 

  看不清圖片,用戶名為nic的NT HASH為:209C6174DA490CAEB422F3FA5A7AE634可以看到只能抓取到NT HASH值,我們也可以通過NT HASH去破解windows密碼的,因為LM HASH和NT HASH只是二種不同的加密方式,針對同一個密碼。

 

  看到了吧,沒有LM HASH照樣可以破密碼的喲。只是有了LM HASH破解成功率會多點。但是當通過NT HASH無法破譯密碼的時候,我們就要想辦法把LM HASH給搞出來,通過更改本地安全策略設置,具體步驟如下:

 

 

 

  但是這個法子有點局限就是,必須下一次更改密碼後才生效。唉~改完密碼後再抓:

 

  LMHASH:A0A9F8A5B5510FFDE72C57EF50F76A05NT HASH: 6097374CDF87C142A7F98798EBF4B402我們先針對每一個生成的HASH進行破解:LM HASH破解:

 

  只有LM,破解出來的是大寫,我的是小寫的。不知道是那裡的問題。NT HASH破解:(ps: 換個長一點的密碼就付費了)

copyright © 萬盛學電腦網 all rights reserved