0x06 Windows 认证

Windows分为本地认证和网络认证

本地认证

本地认证由Lsass.exe 提供认证,用户从winlogon.exe进程输入密码,密码提交给lsass.exe用于认证(保留明文,如果打了2871997补丁后默认不保存,需要修改注册表重新登录,并将明文密码通过LM和NTLM生成算法处理后得到用户Hash与SAM数据库中保存密码进行对比)

local

1
%SystemRoot%\system32\config\sam  本地数据库文件

其中LM hash为DES加密

1
2
3
4
密码转换为大写,处理密码为16进制字符串,不足14字节的末尾添0补齐
分为7字节一组,每组再以7bit分隔 每组末尾添0 补齐8bit
使用key KGS!@#$% DES加密
将结果拼接

(03之后默认不使用,密码最大长度为14位,超过14位后不使用,由于加密前有转换操作,大小写不敏感,密码长度小于7字节,后面添0补齐的7字节加密结果固定,可以判断密码长度,高版本为AAD3B435B51404EEAAD3B435B51404EE 表示空)

NTLM hash为MD4加密

1
2
密码转换为16进制格式,进行Unicode编码
编码厚的内容使用MD4计算得到Hash

网络认证

网络认证分为NTLM和Kerberos协议的认证

NTLM认证采取质询响应的方式,由客户端发送协商请求,指定自身允许的方法,被访问服务器对协商进行筛选并生成Challenge返回给客户端,客户端按照被请求服务器的功能列表要求,以NTLM hash作为密钥对Challenge以协商的算法加密生成Net-hash,将Net-hash,访问用户以及Challenge发送给被访问服务器,被访问服务器读取对应访问用户的NTLM hash 同样对Challenge进行加密比对。 有效防止了通信信道上的监听问题。

Negotiate Link Docs

Challenge Link Docs

Authenticate Link Docs

image-20210103140320827

如果请求用户的Hash不在本地,则服务器会通过NetLogon 与域控建立安全通道,发送所有认证涉及的流量包,由域控对客户端Challenge进行加密比较 (Pass Through Authentication认证流程)

img

其中认证响应有6种类型 LmCompatibilityLevel(本地组策略)设置决定

image-20210103152806557

1
2
3
Windows 2000 以及 Windows XP: 发送 LM & NTLM 响应
Windows Server 2003: 仅发送 NTLM 响应
Windows Vista、Windows Server 2008、Windows 7 以及 Windows Server 2008 R2及以上: 仅发送 NTLMv2 响应
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LM
LM V2 NTLM版本系统上的LM响应
NTLM v1 windows xp和2000 5.1
NTLM V2
NTLM2 会话响应 无ntlm2时响应ntlm2协商
匿名响应 无实际身份认证

NTLM v1 和NTLM v2差异
Challenge V1为8字节 v2为16字节

V1
将16字节的NTLM Hash 填充为21字节并分为3组 作为密钥使用3des算法加密Challenge
V2
将用户名大写后与请求目标Unicode编码后拼接在一起,使用NTLM hash作为密钥加密得到值
利用加密值构建Blob信息,使用NTLM Hash作为密钥,HMAC-MD5消息代码认证加密(服务端返回Challenge和Blob) 得到16字节的NTProofStr(等于签名)
拼接NTSproofStr和Blob得到Response
1
2
3
4
5
格式
net-ntlm v1 hash
username::hostname:LM response:NTLM response:challenge
net-ntlm v2 hash
username::domain:challenge:HMAC-MD5:blob

Kerberos域认证