配置

GUI

执行secpol.msc -> 本地策略 -> 安全选项 -> 网络安全:LAN Manager 身份验证级别。有 6 个级别(从 0 到 5)

NTLM - 图1

注册表

这将设置级别 5:

  1. reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t REG_DWORD /d 5 /f

解释:

  • 0 - 发送LM和NTLM响应
  • 1 - 发送LM和NTLM响应,如果协商后使用NTLMv2会话安全
  • 2 - 只发送NTLM响应
  • 3 - 只发送NTLMv2响应
  • 4 - 只发送NTLMv2响应,拒绝LM
  • 5 - 只发送NTLMv2响应,拒绝LM和NTLM

Windows 如何存储密码

要想了解 Windows 如何存储密码,我们需要先知道什么是 LM、NTLM v1、NTLM v2、Kerberos

LM

已经被淘汰,只是提一下

LM 身份验证时 IBM 为 Windows 操作系统开发,现在已经可以破解。

LM Hash 计算:

  1. 用户密码转换为大写,密码转换为 16 进制字符串,不足 14 字节使用 0 补全
  2. 密码的 16 进制字符串被分成两个7byte部分。每部分转换成比特流,并且长度位56bit,长度不足使用0在左边补齐长度
  3. 再分 7bit 为一组,每组末尾加 0,再组成一组
  4. 上步骤得到的二组,分别作为key 为 KGS!@#$%进行DES加密。
  5. 将加密后的两组拼接在一起,得到最终LM HASH值。
  1. 将所有小写字母转换为大写字母
  2. >123ABC // 未达到7个字符
  3. 将密码转化为16进制,分两组,填充为14个字符,空余位使用0x00字符填补
  4. >31323341424300000000000000
  5. 将密码分割为两组7个字节的块
  6. >31323341424300 00000000000000 // 16进制
  7. 将每组转化为比特流,不足56Bit则在左边加0
  8. >31323341424300 ->(转换为二进制) 110001001100100011001101000001010000100100001100000000-> (补 56Bit) 00110001001100100011001101000001010000100100001100000000
  9. 将比特流按照7比特一组,分出8组,末尾加0
  10. 由于后者都为0,结果可想而知,那就都是0;
  11. 将每组比特流转换为16进制作为被加密的值,使用DES加密,字符串 KGS!@#$%”为Key(0x4B47532140232425),得到8个结果 ,每个 结果转换为16进制。
  12. -> 00110000100110001000110001101000000101000001001000001100 00000000
  13. ->30988C6814120C00 -> DES(30988C6814120C00) -> 48-D7-EB-91- 2F-5E-69-7C
  14. 由于我们的密码不超过7字节,所以后面的一半是固定的:
  15. AA-D3-B4-35-B5-14-04-EE
  16. 连接两个DES加密字符串。这是LM哈希。
  17. 48-D7-EB-91-2F-5E-69-7C-AA-D3-B4-35-B5-14-04-EE

在上面的产生过程中,脆弱点就在于DES的Key(KGS!@#$%)是固定的,也就是说,有了Key就能够解出原文。

并且根据LM Hash特征,也能够判断用户的密码是否是大于等于7位。

NTLM Hash

  • 这是目前 Windows 中使用的密码 Hash 算法, MTLM 全称: “NT LAN Manager”
  • NTLM 是一种网络认证协议, 与 “NTLM Hash” 的关系: NTLM 网络认证协议是以 “NTLM Hash” 作为根本凭证进行认证的协议

NTLM Hash 产生过程

假设我的密码是 admin , 那么操作系统会将 admin 转换为十六机制,经过 Unicode 转换后,在使用 MD4 加密算法加密,这个加密的结果的十六进制就是 NTLM Hash

  1. admin -> hex(16进制编码) = 61646d696e
  2. 61646d696e -> Unicode = 610064006d0069006e00
  3. 610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634

本地认证流程

  1. winlogon.exe -> 接收用户输入 -> lsass.exe -> (认证)

用户注销、重启、锁屏后,操作系统会让winlogon显示登录界面,也就是输入框,接收输入后,将密码交给lsass进程,这个进程中会存一份明文密码,将明文密码加密成NTLM Hash,对SAM数据库比较认证。

  • Windows Logon Process(即 winlogon.exe),是Windows NT 用户登 陆程序,用于管理用户登录和退出。
  • LSASS用于微软Windows系统的安全机 制。它用于本地安全和登陆策略。

网络认证流程

NTLM 是一种网络认证协议,是一种基于 挑战(Chalenge)/响应(Response) 的认证机制

只支持 Windows

NetNTLM 验证

NTLM V2

NTLM V1 和 NTLM V2 显著区别在于 Challenge 和加密算法不同,共同点就是加密的原料都是 “NTLM Hash”

  • Challenge: NTLM v1 的 Challenge 有 8 位, NTLM v2 的Challenge 为 16 位
  • Net-NTLM Hash:NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5

攻击

注意: 微软改变了 Windows 10 v1607 上的算法,将 RC4 密码替换为 AES。此更改使得所有直接访问 SAM 以转储哈希的提取工具都已过时。一些工具已更新并正确处理新的加密方法。但其他人无法跟上。这并不意味着它们不能再使用了。这只是意味着,如果我们面对最新的 Windows 10,我们宁愿使用更新工具。

Windows 7

名称 介绍
PwDump7 从系统中提取 SAM 文件并转储其凭据
samdump2 转储哈希值
Invoke-Powerdump.ps1 转储哈希值
Get-PassHashes.ps1 转储哈希值

Windows 10

名称 介绍
mimikatz 转储 SAM 文件的哈希值
secretsdump.py 转储 SAM 文件的哈希值
MSF: HashDump
MSF: credential_collector
MSF: load kiwi
Koadic : hashdump_sam
Empire: mimikatz/sam
LaZage
CrackMapExec