登录过程
基础知识
Windows Logon Process(即 winlogon.exe),是Windows NT 用户登陆程序,用于管理用户登录和退出。
LSASS用于微软Windows系统的安全机制,也是由很多组件组成的,其中一部分组件提供了身份认证的组件。
登录流程:
在登陆Windows操作系统时 winlogon.exe 会提示我们需要输入用户名和密码才能进入系统,winlogon.exe会将我们输入的内容发送给 lsass.exe ,此程序会将明文密码计算后得到的NT Hash 并去SAM( %SystemRoot%\system32\config\sam )数据库中进行查找, Windows本身不保存明文密码,只保留密码的Hash或加密密码。
- winlogon.exe程序运行。
- 用户输入密码
- lsass.exe
- 转化成NTLM HASH与sam文件对比
- 如果相同,则将user SID与 group SID发送给winlogon.exe,成功登录。
Windows Hash
LM HASH
Windows使用的最古老的密码存储,很容易破解,从Windows Vista和Windows Server 2008开始,LM已关闭(可以在SAM或者NTDS中找到它)。
生成规则
- 密码最多14个字符,如123456
- 密码转化为大写
- 转换为16进制字符串后,结果为313233343536
- 不足14字节采用0进行补全,补全结果为3132333435360000000000000000
- 分成两个7bytes部分,为31323334353600和00000000000000
- 先把31323334353600转换为比特流,比特流为110001001100100011001100110100001101010011011000000000 ,长度不足56bit使用0在左边补齐长度,补齐后为00110001001100100011001100110100001101010011011000000000
- 再分7bit为一组末尾加0,组成新的编码
- 对应的8字节16进制编码:30988C6692C8D000 (二进制直接转16进制结果)
- 将以上步骤得到的两组16进制字符串分别进行DES的ECB模式加密,key为魔术字符串 “KGS!@#$%”进行加密
可以发现,其最大长度为14,而且key值是一个固定值KGS!@#$%,所以容易被暴力破解,而且通过LM hash的生成机制,还能很清楚的看出来如果密码是否大于等于7位,因为当位数不足时,后面会用0来补全,所以当我们的密码位数小于7时,最终生成的LM hash的末尾字符是一个恒定不变的值:AA-D3-B4-35-B5-14-04-EE。
NTLM HASH (NT LAN Manager)
通常是指Windows系统下Security Account Manager中保存的用户密码hash。这类Hash可以直接用于PtH,并且通常存在于lsass进程中,便于SSP使用。由数字与字母组合的32位的值。
加密流程
先后经过hex–>unicode–>md4加密便可得到NTLM HASH,依照该流程,可写如下脚本:
1 | # NTLM hash |