“解密“Windows NTLM Hash

本文介绍从hashcat 3.30起在虚拟机运行常报错,故使用2.0版本。详细说明了提取Windows密码哈希、识别哈希类型的方法,还介绍用hashcat和john the ripper配合字典破解Windows NT哈希,最后给出相关练习及参考资源。

从hashcat 3.30开始,在虚拟机中运行hashcat经常会报错,提示GPU错误。这是由于从该版本开始,hashcat对于Intel CPU会自动检测Intel OpenCL运行时,即是否支持GPU破解。如果不支持,就会停止运行。为了便于实验,我们使用2.0版本的hashcat
安装:
wget https://hashcat.net/files/hashcat-2.00.7z
7z e hashcat-2.00.7z
./hashcat-cli64.bin -V
回显为2.0即可

首先需要提取windows密码的hash
新建一个账户进行测试
需要以管理员身份运行
在这里插入图片描述
上面的命令是创建了一个demo用户,密码为pass1234

启动Cain,以管理员身份运行
在这里插入图片描述
选中cracker选项卡,右键add to list
在这里插入图片描述
选中从本地系统导入hash,next即可

在这里插入图片描述在这里插入图片描述
这里需要注意的是,LM哈希的历史可以追溯到20世纪80年代,微软不再使用它们了。 Cain显示的LM哈希值只是虚拟填充值,不再包含任何有关真实密码的信息。
NT哈希是微软的“更安全”哈希,由Windows NT在1993年使用,并且从未以任何方式更新。接下里的破解也是针对NT哈希进行的
选中后将其导出
在这里插入图片描述
生成demo.lc文件
在这里插入图片描述
可以使用记事本打开
在这里插入图片描述
拿到hash后可以去搜索引擎找明文
在这里插入图片描述
这一串hash是如何生成的呢?

明文为pass1234,通过文本转16进制的网站转换后为
在这里插入图片描述
将得到的16进制转成unicode格式后在hashcalc中计算md4
在这里插入图片描述
由此得到了hash,可以和我们从cain中得到的比对,是完全一致的。

如果我们只是拿到hash,但是不知道类型的情况下,可以使用kali自带的hash-identifier识别
在这里插入图片描述
输入我们从win上拿到的hash即可
它会列出最可能的hash以及可能性极小的hash
在这里插入图片描述

知道了类型之后就可以使用hashcat
我们将NT Hash复制到kali中新建的一个文件命名为demo.hash
在这里插入图片描述
为了破解hash,需要足够强大的字典
Kali Linux包含来自RockYou的大约500,000个常用密码的列表。
在终端窗口中,执行以下命令以解压缩它们:
在这里插入图片描述
由于文件本身很大,我们可以使用head、tail、sed等方式有选择性的查看
在这里插入图片描述

5.3 实验任务三
接下来我们就使用这个字典配合hashcat来破解win的hash
在这里插入图片描述
-m 1000指破解windows NT Hash,-a 0指使用字典破解,接着指定输出文件、Hash文件、字典

结果很快就出来了
在这里插入图片描述
破解过程会显示“[s]tatus[p]ause [r]esume [b]ypass [q]uit =>”,键盘输入“s”显示破解状态,输入“p”暂停破解,输入“r”继续破解,输入“b”表示忽略破解,输入“q”表示退出

可以在输出文件demopass.txt查看
在这里插入图片描述
破解了,明文为pass1234正是我们创建用户时的密码。

除了hashcat意外,john the ripper也常用
同样新建一个demo.txt,里面输入从win下复制的hash
john的全部参数用法可以-h查看
在这里插入图片描述
可以
我们这里直接开始
在这里插入图片描述
我们在上面只指定了字典和hash文件
从回显中可以看出john判断出hash的类型为LM或NT,并建议我们加上format参数进行破解
在这里插入图片描述
加上format参数NT后可以看到破解后的明文pass1234
而指定format为LM则无法破解出正确的明文
在这里插入图片描述

彩蛋:
从上面破解win的hash的时候已经可以看出john的优点:
如果你不指定目标的hash类型它会给出判断并自动匹配
可以使用下面的命令查看john支持的所有散列类型
在这里插入图片描述

5.3.1. 练习
以下说法不是正确的是:【单选题】
【A】在NTLM认证中,NTLM响应分为NTLM v1,NTLMv2,NTLM session v2三种协议,不同协议使用相同同格式的Challenge和加密算法。
【B】hashcat支持的hash算法包括NetNTLMv1、NetNTLMv1+ESS、NetNTLMv2和NTLM。
【C】head 与 tail用来显示开头或结尾某个数量的文字区块
正确答案:A。

8 参考资源
1.jhon使用指导1:
https://countuponsecurity.files.wordpress.com/2016/09/jtr-cheat-sheet.pdf
2.John使用指导2http://msu-nftc.org/courses/intro/material/9%20Password%20Cracking/Tools/John%20the%20Ripper.pdf
3.hashcat指导:https://klionsec.github.io/2017/04/26/use-hashcat-crack-hash/
4.LM、NTLM、Net-NTLMv2介绍https://medium.com/@petergombos/lm-ntlm-net-ntlmv2-oh-my-a9b235c58ed4

<think>好的,用户之前问了关于SAM文件结构的问题,现在又接着问NTLM hash的格式。这说明用户可能是在深入研究Windows安全机制,特别是身份验证相关的部分。用户可能是安全研究人员、渗透测试人员,或者是系统管理员想要更好地保护系统。 我需要先回忆NTLM hash的基本知识。NTLMWindows使用的认证协议,而NTLM hash是存储用户密码哈希值。用户可能想知道这个哈希的具体格式,比如长度、编码方式,以及它是如何生成的。此外,用户可能还关心不同版本NTLM哈希的区别,比如NTLMv1和NTLMv2,或者与LM hash的对比。 在之前的回答中,我已经提到SAM文件中存储了NTLM hash和LM hash,其中LM hash较旧且安全性低,而NTLM hash更安全。现在用户专门询问NTLM hash的格式,可能需要详细的结构信息,比如哈希值的长度、字符集、存储方式,以及生成过程。 需要注意的是,用户可能混淆了NTLM hashNTLM响应的区别。NTLM hash是存储在SAM中的静态哈希,而NTLM认证过程中会生成挑战-响应结构。这里用户明确问的是hash的格式,所以应专注于存储的哈希本身,而不是认证过程中的数据。 另外,用户可能对实际应用场景感兴趣,比如如何提取NTLM hash,或者如何利用它进行攻击(如Pass-the-Hash)。不过根据问题,应集中在格式上,而不是使用方式。但可能需要简要提及相关安全措施,比如为什么微软推荐使用更强的算法替代NTLM。 还要考虑用户的潜在深层需求,比如他们可能在分析安全事件,或试图加固系统,因此需要准确的信息来识别或防御相关攻击。因此,回答中应包含足够的技术细节,如哈希的生成步骤、存储位置、示例格式,以及安全建议。 需要确保回答准确无误,比如NTLM hash的长度是128位(16字节),通常用32位十六进制字符串表示。同时,提到不同版本(如NTLMv1和v2)是否影响哈希本身的格式,实际上NTLMv1和v2是认证协议的不同版本,而哈希本身可能不变,但响应结构不同。这里要避免混淆。 最后,结构化的回答会更清晰,分点说明格式特点、生成步骤、存储示例、与LM的对比以及安全建议。这样用户能够逐步理解,并找到他们需要的信息。</think>在 Windows 身份认证体系中,**NTLM Hash** 是用户密码经过 **NTLMNT LAN Manager)哈希算法**生成的固定长度字符串,用于验证用户身份。以下是其格式及核心特性的详细分析: --- ### **1. NTLM Hash 的生成原理** - **输入**:用户的明文密码(UTF-16LE 编码)。 - **算法**:MD4(Message Digest 4)单向哈希函数。 - **输出**:128 位(16 字节)二进制数据,通常以 **32 位十六进制字符串**表示。 **生成公式**: ``` NTLM_Hash = MD4(UTF-16LE(Password)) ``` **示例**: - 密码 `Password123` → 生成哈希 `8846F7EAEE8FB117AD06BDD830B7586C` --- ### **2. NTLM Hash 的存储格式** #### **(1) 在 SAM 文件中的存储** - **位置**:注册表项 `HKLM\SAM\Domains\Account\Users\<RID>\V` 的二进制数据中。 - **偏移量**:固定偏移 `0x9C` 处存储 16 字节的 NTLM Hash(具体偏移可能因系统版本微调)。 - **加密保护**:通过 `SYSKEY` 加密存储,需结合 `SYSTEM` 文件解密才能获取明文哈希。 #### **(2) 哈希的字符串表示** - **原始格式**:16 字节二进制数据,例如 `B4B9B02E6F09A9BD760F388B67351E2B`。 - **常见工具输出**: 使用 `mimikatz` 或 `secretsdump.py` 提取时,哈希通常显示为以下格式: ```plaintext Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:8846F7EAEE8FB117AD06BDD830B7586C::: ``` - 第 4 段为 LM Hash(可能为空),第 5 段为 NTLM Hash。 --- ### **3. NTLM Hash 的特点** #### **(1) 与 LM Hash 的对比** | 特性 | NTLM Hash | LM Hash(已淘汰) | |--------|------------------------------| | **密码长度支持** | 支持任意长度(最长 256 字符) | 仅支持 14 字符(7+7 分组) | | **大小写敏感** | 是 | 否(密码统一转为大写) | | **哈希算法** | MD4 | DES | | **安全性** | 较高(但仍可被彩虹表破解) | 极低(易被暴力破解) | #### **(2) 限制与缺陷** - **无盐(Salt)**:相同密码生成相同哈希,易受彩虹表攻击。 - **静态性**:密码修改前哈希不变,无法抵御重放攻击。 - **协议依赖**:NTLM 认证协议本身存在漏洞(如响应可预测性)。 --- ### **4. NTLM Hash 的认证流程** 在 NTLM 认证中,哈希并非直接传输,而是用于生成 **挑战-响应(Challenge-Response)**: 1. 客户端发送用户名至服务端。 2. 服务端返回随机 **Challenge**(8 字节)。 3. 客户端使用 NTLM Hash 加密 Challenge,生成 **Response**。 4. 服务端验证 Response 是否与本地计算的哈希匹配。 **响应生成公式**: ``` Response = HMAC_MD5(NTLM_Hash, Challenge) ``` --- ### **5. 安全增强与替代方案** - **禁用 NTLM**:优先使用 **Kerberos** 协议(支持 AES 加密和双向认证)。 - **启用 NTLMv2**:通过组策略强制使用更安全的 NTLMv2 响应(抵御中间人攻击)。 - **哈希传递防御**: - 启用 Credential Guard(虚拟化保护)。 - 限制本地管理员权限,监控 `lsass.exe` 访问。 --- ### **6. 实际示例分析** **从 SAM 中提取的 NTLM Hash 片段**: ```plaintext 0000009C: B4 B9 B0 2E 6F 09 A9 BD 76 0F 38 8B 67 35 1E 2B ....o...v.8.g5.+ ``` - 转换为十六进制字符串:`B4B9B02E6F09A9BD760F388B67351E2B` - 使用 Hashcat 破解的命令示例: ```bash hashcat -m 1000 -a 0 B4B9B02E6F09A9BD760F388B67351E2B rockyou.txt ``` --- ### **总结** NTLM HashWindows 身份认证的核心凭据,但其静态性和协议缺陷使其成为攻击者重点目标。理解其格式和生成逻辑有助于设计防御策略(如禁用 LM Hash、升级至 Kerberos)。若需进一步探讨破解或防护技术,可继续交流!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值