NTLM认证主要有本地认证和网络认证两种方式NTLM认证。
本地登录时用户密码储存在SAM文件中,可以把它当作一个储存密码的数据库,所有的操作都在本地进行的。它将用户输入的密码转换为NTLM hash,然后与SAM中的NTLM hash进行比较。
网络认证则是基于一种Challenge/Response认证机制的认证模式。
在本地登陆的情况下,操作系统会使用用户输入的密码作为凭据去与系统中的密码进行校验,如果成功的话表名验证通过。操作系统的密码储存在C盘的目录下:C:/windows/system32/config/SAM。
SAM是系统安全账号管理,是微软设计的一个安全机制,为了保护账号以及密码的安全性,该文件是无法修改和删除的,它一直和系统内存交互,里面的用户密码都是加密处理,加密算法有两类,LMhash和NThash,前者已经废除,不再使用,现在系统(>=windows7&&>=window server 2008)中主要使用的是NThash。
SM用于储存本地所有用户的凭证信息,但是这不代表可以随意查看系统密码,我们登录系统的时候,系统会读取SM文件中的密码与我们输入的密码进行比对,如果认证相同,则可以使用该机器。
1.LM Hash的规则
密码转换为16进制字符串,不足14字节的则会用0补全,共计14*8位,14*2个16进制数;
密码的16进制字符串被分为两个7字节的部分,即7*8位,7*2个16进制数;
将14个16进制数转换为2进制,即14*4位,每7位一组,分成8组,每组在最后一位加0,再转换为8个16进制数,得到两组8字节16进制编码;
这两组8字节数据库将作为DESKEY对魔术字符串“KGS!@#&%”进行标准的DES加密;
将加密后的这两组数据简单拼接,就得到了最后的LM Hash。
admin -> 转换为大写 ->ADMINADMIN -> 转成16进制并补足14字节 ->41444d494e00000000000000000041444d494e000000000000000000 -> 分成两部分 ->41444d494e0000和00000000000000两部分分别转换为2进制,每7位一组并补0,再转换为16进制数->40a212a894700000和0000000000000000
![浅谈NTLM认证 浅谈NTLM认证]()
40a212a894700000 ->作为key对KGS!@
![浅谈NTLM认证 浅谈NTLM认证]()
0000000000000000 ->作为key对KGS!@
![浅谈NTLM认证 浅谈NTLM认证]()
进行简单拼接后为F0D412BD764FFE81AAD3B435B51404EE,与实际生成的LMhash做对比:
![浅谈NTLM认证 浅谈NTLM认证]()
2.NTLM Hash的规则
Windows本身不会存储明文密码,在SAM文件中存储的是HASH值,在登录对比的时候,也是先将用户的输入转换为HASH值,才进行对比的。
目前在Windows中所使用的密码hash被称为NTLM hash,全称为NT LAN Manager,它是一个由数字字母组成的32位的值,是经过hex、unicode、MD4三层加密后得到的。
首先用户登录、注销、重启、锁屏后,操作系统会让winlogon.exe显示登录界面,让用户输入账号密码之后转交给lsass.exe,让这个进程中保存一份明文密码,将明文密码加密成NTLM hash,与SAM数据库进行比对,相同则将user SID跟group SID发送给winlogon.exe,不相同则登录失败。
winlogon.exe是windowsNT用户的登录程序,用于管理用户登录和退出。
lsass.exe是windows的安全机制,它用于本地安全和登录策略。
比如当用户密码为admin时,操作系统会将admin转换为16进制,经过Unicode转换后,再调用MD4加密算法加密,这个加密结果的16进制就是NTLM Hash。
admin -> hex(16进制编码) = 61646d696e61646d696e -> Unicode = 610064006d0069006e00610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
本地认证的流程:
![浅谈NTLM认证 浅谈NTLM认证]()
windows网络认证:
在工作组中,无论是局域网中的一台机器还是很多机器,它们能够通信的话都无法相互建立一个完美的信任机制,只要有一个可以信任的中间机构,对双方进行认证,这样就有第三方来证实双方的可信任性。
SMB协议:
SMB(ServerMessage Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。SMB使用了NetBIOS的应用程序接口 (Application Program Interface,简称API),一般端口使用为139,445。另外,它是一个开放性的协议,允许了协议扩展——使得它变得更大而且复杂;大约有65个最上层的作业,而每个作业都超过120个函数,甚至Windows NT也没有全部支持到,最近微软又把 SMB 改名为 CIFS(CommonInternet File System),并且加入了许多新的特色。
早期SMB协议在网络上传输的是明文口令。后来出现LAN Manager ChallengeReponse 验证机制,简称LM。
微软提出了windowsNT挑战/响应验证机制,简称MTLM。现在已经更新到了V2版本以及加入了Kerberos验证体系。
NTLM协议:
NTLM是一种网络认证协议,它是基于挑战(Chalenge)/响应(Response)认证机制的一种认证模式(这个协议只支持Windows)。
NTLM协议的认证共需要三个消息完成:协商 --> 挑战 --> 认证。
挑战:服务器在收到客户端的协商消息之后, 会读取其中的内容,并从中选择出自己所能接受的服务内容,加密等级,安全服务等等。并生成一个随机数challenge, 然后生成challenge消息返回给客户端。该消息就是挑战/响应认证机制的主要功能体现。
认证:验证主要是在挑战完成后,验证结果,是认证的最后一步。
网络认证的流程:
![浅谈NTLM认证 浅谈NTLM认证]()
NTLM v1与NTLM v2最显著的区别就是Challenge与加密算法不同,共同点就是加密的原料都是NTLM Hash。
Challage:NTLM v1的Challenge有8位,NTLM v2的Challenge为16位。
Net-NTLM Hash:NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。
原文始发于微信公众号(银河护卫队super):浅谈NTLM认证
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
https://cn-sec.com/archives/906358.html
复制链接
复制链接
-
左青龙
- 微信扫一扫
-
-
右白虎
- 微信扫一扫
-
评论