沒有答案:)但沒關係,因爲我做了一點研究,找到了答案。目前無法將NetNTLMv2轉換爲NTLM。實際上NTLM哈希是生成NetNTLMv2的第一個關鍵。我決定解釋它是如何工作的。
計算和比較的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,因爲散列函數是單向函數。