配置
GUI
执行secpol.msc -> 本地策略 -> 安全选项 -> 网络安全:LAN Manager 身份验证级别。有 6 个级别(从 0 到 5)
注册表
这将设置级别 5:
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 计算:
- 用户密码转换为大写,密码转换为 16 进制字符串,不足 14 字节使用 0 补全
- 密码的 16 进制字符串被分成两个7byte部分。每部分转换成比特流,并且长度位56bit,长度不足使用0在左边补齐长度
- 再分 7bit 为一组,每组末尾加 0,再组成一组
- 上步骤得到的二组,分别作为key 为
KGS!@#$%
进行DES加密。 - 将加密后的两组拼接在一起,得到最终LM HASH值。
将所有小写字母转换为大写字母
• >123ABC // 未达到7个字符
• 将密码转化为16进制,分两组,填充为14个字符,空余位使用0x00字符填补
• >31323341424300000000000000
• 将密码分割为两组7个字节的块
• >31323341424300 00000000000000 // 16进制
• 将每组转化为比特流,不足56Bit则在左边加0
• >31323341424300 ->(转换为二进制) 110001001100100011001101000001010000100100001100000000-> (补 足56Bit) 00110001001100100011001101000001010000100100001100000000
• 将比特流按照7比特一组,分出8组,末尾加0
由于后者都为0,结果可想而知,那就都是0;
• 将每组比特流转换为16进制作为被加密的值,使用DES加密,字符串 “KGS!@#$%”为Key(0x4B47532140232425),得到8个结果 ,每个 结果转换为16进制。
• -> 00110000100110001000110001101000000101000001001000001100 00000000
• ->30988C6814120C00 -> DES(30988C6814120C00) -> 48-D7-EB-91- 2F-5E-69-7C
• 由于我们的密码不超过7字节,所以后面的一半是固定的:
• AA-D3-B4-35-B5-14-04-EE
• 连接两个DES加密字符串。这是LM哈希。
• 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
admin -> hex(16进制编码) = 61646d696e
61646d696e -> Unicode = 610064006d0069006e00
610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
本地认证流程
winlogon.exe -> 接收用户输入 -> lsass.exe -> (认证)
用户注销、重启、锁屏后,操作系统会让winlogon显示登录界面,也就是输入框,接收输入后,将密码交给lsass进程,这个进程中会存一份明文密码,将明文密码加密成NTLM Hash,对SAM数据库比较认证。
- Windows Logon Process(即 winlogon.exe),是Windows NT 用户登 陆程序,用于管理用户登录和退出。
- LSASS用于微软Windows系统的安全机 制。它用于本地安全和登陆策略。
网络认证流程
NTLM 是一种网络认证协议,是一种基于 挑战(Chalenge)/响应(Response) 的认证机制
只支持 Windows
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 |