2015-08-28 166 views
2

有什麼辦法可以將NetNTLMv2轉換爲ntlm哈希? 對於123的實例NTLM值是否可以將NetMTLMv2哈希轉換爲NTLM哈希?

3DBDE697D71690A769204BEB12283678 

用戶使用同一密碼「嘗試」計算機「PC」,它具有私有IP地址192.168.73.130 NetNTLMv2值

try::PC:d158262017948de9:91642a8388d64d40f6c31b694e79363e:010100000000000058b2da67cbe0d001c575cfa48d38bec50000000002001600450047004900540049004d002d00500043003100340001001600450047004900540049004d002d00500043003100340004001600650067006900740069006d002d00500043003100340003001600650067006900740069006d002d0050004300310034000700080058b2da67cbe0d0010600040002000000080030003000000000000000000000000030000065d85a4000a167cdbbf6eff657941f52bc9ee2745e11f10c61bb24db541165800a001000000000000000000000000000000000000900240063006900660073002f003100390032002e003100360038002e0031002e00310030003700000000000000000000000000 

我們可以轉換這個NetNTLMv2到NTLM(3DBDE697D71690A769204BEB12283678)不知道任何憑據?

回答

2

沒有答案:)但沒關係,因爲我做了一點研究,找到了答案。目前無法將NetNTLMv2轉換爲NTLM。實際上NTLM哈希是生成NetNTLMv2的第一個關鍵。我決定解釋它是如何工作的。

Simple Mechanism of NetNTLMv2 Response

計算和比較的NTLMv2你應該首先計算這是123在這種情況下,密碼的NTLM值。爲了演示它,我將使用python 2.7。開始之前,您應該導入這些模塊hashlib, binascii, hmac。用蟒像這樣計算出的123

NTLM值:

_ntlm = hashlib.new("md4", "123".encode("utf-16-le")).digest() 
ntlm = binascii.hexlify(_ntlm) 

結果是3dbde697d71690a769204beb12283678並且這個值將被用作用於第一HMAC_MD5計算密鑰。

要做到這一點,我們應該連接用戶名和域名。如果您不在域上工作,則會使用您的計算機名稱。在這種情況下,我的用戶名是try和我的計算機名稱是PC。 當我們連接時,它會變成tryPC。然後這個值以小尾數格式轉換成unicode大寫。我們將使用NTLM 123作爲關鍵字來生成此值的HMAC_MD5散列。

"tryPC"==> "TRYPC" ==> '54005200590050004300' (UTF-16-le in hexadecimal) 

我們計算這就像pyhton:

"tryPC".upper().encode("utf-16-le").encode("hex") 

然後我們計算HMAC_MD5(54005200590050004300)與關鍵3dbde697d71690a769204beb12283678

在蟒蛇它計算如下:

firstHMAC = hmac.new("3dbde697d71690a769204beb12283678".decode("hex"),"54005200590050004300".decode("hex"),hashlib.md5).hexdigest() 
firstHMAC ==> 2381ca3f5e9c4534722cd511f6a4c983 

之後,我們將使用firstHMAC作爲密鑰來計算Type2 challange的HMAC_MD5值。

Type2 challange與服務器challange和blob結合在一起。對於NetNTLMv2

網絡響應是這樣的:

try::PC:d158262017948de9:91642a8388d64d40f6c31b694e79363e:010100000000000058b2da67cbe0d001c575cfa48d38bec50000000002001600450047004900540049004d002d00500043003100340001001600450047004900540049004d002d00500043003100340004001600650067006900740069006d002d00500043003100340003001600650067006900740069006d002d0050004300310034000700080058b2da67cbe0d0010600040002000000080030003000000000000000000000000030000065d85a4000a167cdbbf6eff657941f52bc9ee2745e11f10c61bb24db541165800a001000000000000000000000000000000000000900240063006900660073002f003100390032002e003100360038002e0031002e00310030003700000000000000000000000000 

當我們根據:指數3分割該響應是服務器challange是d158262017948de9 索引5,它啓動類似於"01010000..."表示團塊值。 Blob值也由blob siganture,保留字段,時間戳,隨機客戶端隨機數和目標信息組成。我不詳細說明這個blob。

要計算的NTLMv2我們應該級聯服務器challange和BLOB使用firstHMAC作爲重點來計算這個HMAC_MD5值。

在Python,我們是這樣做的:

firstHMAC = "2381ca3f5e9c4534722cd511f6a4c983" 
type2Challange = "d158262017948de9010100000000000058b2da67cbe0d001c575cfa48d38bec50000000002001600450047004900540049004d002d00500043003100340001001600450047004900540049004d002d00500043003100340004001600650067006900740069006d002d00500043003100340003001600650067006900740069006d002d0050004300310034000700080058b2da67cbe0d0010600040002000000080030003000000000000000000000000030000065d85a4000a167cdbbf6eff657941f52bc9ee2745e11f10c61bb24db541165800a001000000000000000000000000000000000000900240063006900660073002f003100390032002e003100360038002e0031002e00310030003700000000000000000000000000" 
ntlmv2 = hmac.new(firstHMAC.decode("hex"),type2Challange.decode("hex"),hashlib.md5).hexdigest() 
ntlmv2 ==> 91642a8388d64d40f6c31b694e79363e 

如果該值等於NetNTLMv2響應第四屆指數,你會得到驗證。在這種情況下,第四個索引等於91642a8388d64d40f6c31b694e79363e並且這意味着您擁有正確的密碼。

根據服務器challange和blob值,您將始終獲得不同的NTLMv2值,如果您擁有正確的密碼,則只能計算此值。

換句話說,我們可以用NTLM生成NetNTLMv2。但是我們不能將NetNTLMv2轉換回NTLM,因爲散列函數是單向函數。