Windows NT/NTLM 加密

來源:互聯網
上載者:User

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


       一、MD5 和 SHA1 可以說是目前應用最廣泛的Hash演算法,而它們都是以 MD4 為基礎設計的。那麼他們都是什麼意思呢?這裡簡單說一下:

    (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)SHA1 及其他

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

 

       二、Windows系統下的hash密碼格式

       Windows系統下的hash密碼格式為:使用者名稱稱:RID:LM-HASH值:NT-HASH值,例如:Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC:::表示

  使用者名稱稱為:Administrator

    RID為:500

    LM-HASH值為:C8825DB10F2590EAAAD3B435B51404EE
    NT-HASH值為:683020925C5D8569C23AA724774CE6CC

    (1)Windows下LM Hash值產生原理

    假設明文口令是“Welcome”,首先全部轉換成大寫“WELCOME”,再做將口令字串大寫轉後後的字串變換成二進位串: “WELCOME” -> 57454C434F4D4500000000000000

       技巧:可以將明文口令複製到UltraEdit編輯器中使用二進位方式查看即可擷取口令的二進位串。

       說明:如果明文口令經過大寫變換後的二進位字串不足14位元組,則需要在其後添加0x00補足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

    LM Hash: C23413A8A1E7665FAAD3B435B51404EE

    (2) Windows下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

        NTLM Hash: 32ED87BDB5FDC5E9CBA88547376818D4

        與LM Hash演算法相比,明文口令大小寫敏感,無法根據NTLM Hash判斷原始明文口令是否小於8位元組,擺脫了魔術字串"KGS!@#$%"。MD4是真正的單向雜湊函數,窮舉作為資料來源出現的明文,難度較大。


      三、總結一下:

      兩種密碼編譯演算法分別是LanManager(LM)和NTLM,LM只能儲存小於等於14個字元的密碼hash,如果密碼大於14個,windows就自動使用NTLM對其進行加密了,(這個在LC5裡有兩種破解方式,所以破解不出來的時候可以換種思路,基本是NTLM的)一般情況下使用PwDump或其他一些hash匯出工具(如Cain)匯出的hash都有對應的LM和NTLM值,也就是說這個密碼位元<=14,如果大於14位那麼就只有對應的NTLM hash可用了,這時LM也會有值,但對我們來說沒用,不能靠他來查LM彩虹表。 
      作業系統:對於XP、win2k和win2k3來說,系統預設使用LM進行加密(也可人為設定成NTLM),之後的win2008、win7和Vista禁用了LM,預設使用NTLM,所以不要拿著LM產生的rainbow table去找NTLM的hash值,但是反過來卻可以,因為使用LM方式的加密往往會存在一個對應的NTLM hash(如果密碼位元<=14的話,系統同時對這個密碼使用NTLM加密並儲存了NTLM的hash),這時候使用ophcrack的NTLM表尋找的就是這個NTLM的hash了,而不是LM的hash。 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.