NTLM协议
LM 加密算法
LM Hash 的明文密码被限制在14位以内。如果LM Hash 的值为 aad3b435b51404eeaad3b435b51404ee,说明 LM Hasg 为空或者被禁用了。
加密流程
以 P@ss1234 来演示 LM Hash 的加密流程:
1)将用户的明文口令转化为大写,并转化为16进制字符串。
2)如果转化后的16进制字符串长度不足14B(长度28),用0来填充。
3)将14B分为两组,每组7B,然后转换为2进制,每组二进制长度为56bit。
4)将每组二进制数据按7bit为一组,分为8组,每组末尾加0,在转化为16进制,这样就成了8B长度的16进制数据了。
5)将上面生成的两组8B的16进制数据,分别作为DES加密秘钥对字符串 "KGS!@#$%" 进行加密。然后将DES加密后的两组密文进行拼接,得到最后的 LM Hash值。
NTLM Hash
LM Hash 过于不安全,微软从 Windows Vista 和 Windows Server 2008开始,默认禁用了 LM Hash ,只存储 NTLM Hash,而 LM Hash 的位置为空:aad3b435b51404eeaad3b435b51404ee。
NTLM Hash 是基于 MD4 加密算法进行加密的。
加密流程
以P@ss1234为例演示:
1)将用户密码转化为16进制。
2)将 ASCII 编码的16进制格式的字符串转化为 Unicode 编码。
3)对 Unicode 编码的16进制字符串进行标准的 MD4 单向 Hash 加密。
Windows 系统存储 NTLM Hash
用户的密码经过加密后存储在 C:\\Windows\\system32\\config\\SAM 文件中。
用户输入密码进行认证的过程中,都是在本地进行的。系统将用户输入的密码转化为NTLM Hash ,然后与 SAM 文件中的 NTLM Hash 进行比较。
当用户进行注销、重启、锁屏后,操作系统会让winlogon.exe 显示登录界面,也就是输入框。当 winlogon.exe 接受输入后,将密码交给 lsass.exe 进程,lsass.exe 进程会存一份明文几码,将明文密码加密成 NTLM Hash ,与 SAM 数据库进行比较和认证。
Kerberos
在 Kerberos 协议中,主要有一下三个用户:
- 访问服务的客户端
- 提供服务的服务端
- 提供认证服务的KDC(密钥分发中心):KDC 是一种网络服务,它向活动目录内的用户和计算机提供会话票据和零时会话密钥,其服务账户为 krbtgt。 KDC 作为活动目录域服务的一部分运行在每个域控制服务器上。
krbtgt 是创建活动目录时系统自动创建的一个账户,其作用是 KDC 的服务账户。密码是系统随机生成的,无法正常登录主机。
是基于票据(Ticket)认证的。客户端想要访问服务端的某个服务,需要购买服务端认可的ST(Server Ticket)。也就是说,客户端访问服务之前先要买好票,等待服务验票之后才能访问。但是票不能直接购买,需要先有 TGT(Ticket Granting Ticket) 才能购买。也就是说客户端买票之前先要一张 TGT。 TGT 和 ST 都是由 KDC 签发的,因为 KDC 运行在域控上,所以 TGT 和 ST 都是域控发放的。
Kerberos 使用 88 端口, 密码重置使用 464 端口。。。
Kerberos 协议的认证流程:
1)当用户想访问某个服务时,输入用户名和密码,本机就会向 KDC 的 AS 发送一个 AS-REQ 认证请求。
AS-REQ 认证请求的其中一个字段 PA-DATA-pA-TIMESTAMP:预认证,就是使用用户 Hash 加密时间戳作为 value 发送 KDC 的AS。然后 AS 从活动目录中查询用户的 Hash 来解密时间戳,如果能解密,并且在一定的时间方位内,则通过认证。但是使用的是用户的 Hash 来加密,所以导致了哈希传递攻击(PTH)。
2)KDC 接受到 AS-REQ 请求后,AS 会从活动目录中查询用户的 Hash 来解密时间戳,如果能解密,并且在一定的时间方位内,则通过认证。然后发送 AS-REP 包给客户端,其中最重要的是 TGT 和 Logon Session Key。TGT 中加密的部分是使用 kbrtgt 密钥加密的。而 Logon Session Key 是使用用户密钥加密的。
3)客户端收到 AS-REP 包后,使用用户密钥解密 enc_Login Session Key(也是最外层加密的部分),得到 Login Session Key ,并且获得了 TGT。之后再本地缓存 TGT 和 Login Session Key。此时客户端就可以凭借这张 TGT 向 KDC 购买相应的 ST。ST 是 KDC 的 TGS 授权发放的。
4)TGS 接收到客户端的 ST-REQ 请求后,会使用 krbtgt 密钥解密 TGT 中加密的部分,得到 Login Session Key 和 PAC 等信息,加解密成功则说明该 TGT 是 KDC 颁发的。然后验证 PAC 签名,签名正确表示未被篡改。最后使用 Login Session Key 解密 时间戳等信息,验证时间戳是否在一定时间范围内。如果验证成功,则发放 ST。
5)客户端收到 ST 后,使用缓存的 Login Session Key 解密 enc_Server Session Key 部分,得到 Server Session Key这是这一阶段的认证密钥,同时也拿到 ST。客户端同样会缓存这两样。客户端访问服务是发起 AP-REQ 请求,其中包含 ST 和 使用 Server Session Key 加密的时间戳。
标签:Hash,TGT,Windows,基础,KDC,Session,Key,加密 From: https://www.cnblogs.com/qianyuzz/p/18050144