NTLM认证原理
什么是SAM
SAM:
安全帐户管理器(Security Accounts Manager), SAM 是Windows操作系统管理用户帐户的安全所使用的一种机制。用来存储 Windows 操作系统密码的数据库文件,为了避免明文密码泄漏SAM文件中保存的是明文密码在经过一系列算法处理过的Hash值被保存的Hash分为LMHash、NTLMHash。当用户进行身份认证时会将输入的Hash值与SAM文件中保存的Hash值进行对比。
SAM文件保存于 %SystemRoot%\system32\config\sam 中,在注册表中保存在 HKEY_ LOCAL_MACHINE\SAM\SAM,HKEY_ LOCAL _MACHINE\SECURITY\SAM 。在正常情况下SAM文件处于锁定状态不可直接访问、复制、移动,仅有system用户权限才可以读写该文件。
windows本地认证:
本地用户认证
Windows在进行本地登录认证时操作系统会使用用户输入的密码作为凭证去与系统中的密码进行对比验证。通过 winlogon.exe 接收用户输入传递至 lsass.exe 进行认证。
winlogon.exe用于在用户注销、重启、锁屏后显示登录界面。 Isass.exe 用于将明文密码变成NTLM Hash的形式与SAM数据库比较认证。
LM Hash
全称是 LAN Manager Hash,windows 最早用的加密算法,由 IBM 设计。
目前大多数的Windows都采用NTLM协议认证,LM协议已经基本淘汰了。LM协议的脆弱之处在于:
1.des的key是固定的,有了Key就能够解出原文。
2.可以根据 hash 判断密码长度是否大于7位,如果密码强度是小于7位,那么第二个分组加密后的结果肯定是aad3b435b51404ee
3.密码不区分大小写并且长度最大为14位
4.7+7字符分开加密明显复杂度降低14个字符整体加密 957+957<9514
NTLM Hash与NTLM
在Windows中,密码Hash目前称之为NTLM Hash,其中NTLM全称是:“NT LAN Manager”。
NTLM Hash的产生
1.先将用户的密码转化为十六进制格式。
2.将十六进制格式的密码进行 Unicode 编码。
3.使用 MD4 摘要算法对 Unicode 编码数据进行 Hash 计算。
假设我的密码是admin,那么操作系统会将admin转换为十六进制,经过Unicode转换后,再调用MD4加密算法加密,这个加密结果的十六进制就是NTLM Hash。
1 admin -> hex(16进制编码) = 61646d696e 2 61646d696e -> Unicode = 610064006d0069006e00 3 610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
本地认证流程
winlogon.exe -> 接收用户输入 -> lsass.exe -> (认证)
首先,用户注销、重启、锁屏后,操作系统会让winlogon显示登录界面,也就是输入框,winlogon接收输入后,将密码交给lsass进程,这个进程中会存一份明文密码,将明文密码加密成NTLM Hash,对SAM数据库比较认证。
网络认证
在内网渗透中,经常遇到工作组环境,而工作组环境是一个逻辑 上的网络环境(工作区),隶属于工作组的机器之间无法互相建 立一个完美的信任机制,只能点对点,是比较落后的认证方式, 没有信托机构。
假设A主机与B主机属于同一个工作组环境,A想访问B主机上的资料,需要将一个存在于B主机上的账户凭证发送至B主机,经过认证才能够访问B主机上的资源。
这是我们接触比较多的SMB共享文件的案例,SMB的默认端口是445。
早期SMB协议在网络上传输明文口令。后来出现 LAN Manager Challenge/Response 验证机制,简称LM,它是如此简单以至很容易就被破解,现在又有了NTLM以及Kerberos。
这个协议只支持Windows。
Challenge/Response
NTLM的认证过程分为三步:type1(协商),type2(质询),type3(身份验证)
1、用户登录客户端电脑
2、(type 1)客户端向服务器发送type 1(协商)消息,它主要包含客户端支持和服务器请求的功能列表。
3、(type 2)服务器用type 2消息(质询)进行响应,这包含服务器支持和同意的功能列表。但是,最重要的是,它包含服务器产生的Challenge。
4、(type 3)客户端用type 3消息(身份验证)回复质询。用户接收到步骤3中的challenge之后,使用用户的 NTLM hash对challenge进行加密运算得到response,将response,username,challeng发给服务器。消息中的response是最关键的部分,因为它们向服务器证明客户端用户已经知道帐户密码。
5、服务器拿到type 3之后,使用用户 hash 加密 challenge 得到response2,与 type 3发来的 response 进行比较。如果用户hash是存储在域控里面的话,那么没有用户hash,也就没办法计算response2。也就没法验证。这个时候用户服务器就会 通过netlogon协议联系域控,建立-个安全通道然后将type 1,type 2,type3 全部 发给域控(这个过程也叫作Pass Through Authentication认证流程)
6、域控使用challenge和用户hash进行加密得到response2,与type 3的response进行比较。
注意:
NTLM V2协议
NTLM v1与NTLM v2最显著的区别就是 Challenge 与加密算法不同,共同点就是加密的原料都是NTLM Hash。
下面细说一下有什么不同:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了