Windows本地认证之LM-Hash&NTLM-Hash

Windows认证

认证流程

电脑开机后,会运行一个名叫 winlogon.exe 的进程,它会调用电脑的登录界面并显示给用户,用户输入密码后,winlogon.exe 进程会把密码发送给 lsass.exe 进程,将用户的密码跟SAM文件的LM-HASH或者NTLM-HASH做对比,对比成功即登录成功。

winlogon.exe

该进程主要就是负责把登录界面显示给用户,让用户登录使用。

lsass.exe

Lsass.exe进程主要负责管理本地安全策略和认证机制,这些策略包
括密码策略、账户策略、用户权限、域策略等等。同时,它还负责对用户进行身份验证,以确保只有授权的用户才能访问系统资源。

  • 该进程会把winlogon.exe进程发送来的密码进行加密(LM-Hash、NTLM-Hash),跟SAM文件中的密码做对比;
  • 同时将收到的明文账号密码在本地内存中保留一份用作备用。

SAM文件

该文件在C:\Windows\System32\config目录下,是用来存储用户账号密码的,该文件中的密码是经过加密的(LM-Hash、NTLM-Hash)。
大概格式如下:

用户名:RID:LM-Hash:NTLM-Hash

Administrator:500:64822E174CBB6CD287916C896CBF48D9:C7C654DA31CE51CBEECFEF99E637BE15

LM-HASH

LM-HASH 要点

采用DES加密,易被破解,从Windows vista系统开始被禁用。LM-Hash如果是AAD3B435B51404EEAAD3B435B51404EE,则表示LM-Hash被禁用或值为空。

LM-HASH加密算法

假设明文密码为Admin@666 :

1.密码转换为大写

Admin@666    ->    ADMIN@666
  1. 转为16进制
    转换地址:https://www.sojson.com/hexadecimal.html
ADMIN@666    ->    41444d494e40363636
  1. 长度补全(如果密码的十六进制不足14个字节,也就是28位十六进制,则会自动在最后用0字节也就是十六进制00补全)
41444d494e40363636    ->   41444d494e403636360000000000 
  1. 41444d494e403636360000000000编码分成2组7字节,把分好的两组十六进制字符串转换为二进制
41444d494e4036    ->    0100 0001 0100 0100 0100 1101 0100 1001 0100 1110 0100 0000 0011 0110

36360000000000    ->    0011 0110 0011 0110 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
图片.png
图片.png
  1. 每7位二进制为一组,在每组最后加0,然后再转换成十六进制

第一组:

01000001010001000100110101001001010011100100000000110110

分组    -> 
0100000
1010001
0001001
1010100
1001010
0111001
0000000
0110110

加0    -> 
01000000
10100010
00010010
10101000
10010100
01110010
00000000
01101100


合并    -> 
0100000010100010000100101010100010010100011100100000000001101100

转换成十六进制    ->

40A212A89472006C
图片.png

第二组:

00110110001101100000000000000000000000000000000000000000

分组    -> 
0011011
0001101
1000000
0000000
0000000
0000000
0000000
0000000

加0    -> 
00110110
00011010
10000000
00000000
00000000
00000000
00000000
00000000

合并    -> 
0011011000011010100000000000000000000000000000000000000000000000

转换成十六进制    ->

361A800000000000
图片.png
  1. 把每组十六进制作为DES加密的密钥,对KGS!@#%也需要是十六进制

KGS!@#$%的16进制为4B47532140232425

第一组


内容为:4B47532140232425

密钥为:40A212A89472006C

结果为:64822E174CBB6CD2

64822E174CBB6CD2

图片.png

第二组


内容为:4B47532140232425

密钥为:361A800000000000

结果为:87916C896CBF48D9

87916C896CBF48D9


图片.png

最终拼接结果:64822E174CBB6CD287916C896CBF48D9

https://www.toolkk.com/tools/lm-hash

图片.png

LM hash加密缺点

  • 密码长度最大只能为14个字符
  • 密码不区分大小写
  • 如果明文密码长度小于7个,第二个分组的加密结果一定是aad3b435b51404ee
  • DES容易被破解 密码强度不高

NTLM-HASH

NTLM-HASH 简介

NTLM-Hash是微软为了在提高安全性的同时保证兼容性而设计的散列加密算法。NTLM Hash是基于MD4加密算法进行加密的。Windows操作系统个人版从Windows vista之后,服务器版从Windows Server2003之后, 认证方式均为NTLM-Hash。

NTLM-HASH加密算法

假设明文密码为Admin@666 :

  1. 将明文口令转换成十六进制的格式
Admin@666    ->    41646d696e40363636

转换地址:https://www.sojson.com/hexadecimal.html

  1. 将16进制转换成Unicode格式,即在每个字节 之后添加0x00
41646d696e40363636    ->    410064006d0069006e004000360036003600
  1. 使用MD4摘要算法对Unicode编码数据进行Hash计算,结果即为NTLM-HASH值
410064006d0069006e004000360036003600    ->    c7c654da31ce51cbeecfef99e637be15
image.png

验证:
https://www.toolkk.com/tools/ntlm-hash

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容