windows认证包括本地认证、网络认证和域认证三个部分windows认证和密码的抓取可以说是内网渗透的第一步。
1、window认证流程
Windows的登陆密码是储存在系统本地的SAM文件中的,在登陆Windows的时候,系统会将用户输入的密码与 SAM文件中的密码进行对比,如果相同,则认证成功
SAM文件是位于 %SystemRoot%\system32\config\ 目录下的,用于储存本地所有用户的凭证信息,但当我们去进行点击的时候我们会发现无法直接查看。
简单来讲本地认证的流程可以分为五步:
winlogon.exe ——用户输入账号密码——lsass.exe——转换为NTLM Hash和SAM文件中的值相比——登录成功或失败。
用户注销、重启、锁屏后,操作系统会让winlogon.exe显示登陆界面,也就是输入框界面,接收用户的输入信息后,将密码交给lsass进程,这个过程中会存一份明文密码,将明文密码加密成NTLM Hash,对SAM数据库进行比较认证 。
Windows Logon Process(即winlogon.exe):是Windows NT 用户登陆程序,用于管理用户登陆和退出
LSASS:用于微软Windows系统的安全机制,它用于本地安全和登陆策略
本地认证中用来处理用户输入密码的进程即lsass.exe,密码会在这个进程中明文保存,供该进程将密码计算成NTLM 。Hash与sam进行比对,我们使用mimikatz来获取明文密码,便是在这个进程中读取到的。
2、LM Hash和NTLMHash
Windows操作系统通常使用两种方法对用户的明文密码进行加密处理。在域环境中,用户信息存储在ntds.dit中,加 密后为散列值。 Windows操作系统中的密码一般由两部分组成,一部分为 LM Hash,另一部分为NTLMHash。在Windows操作系统中,Hash的结构通常如:username:RID:LM‐HASH:NT‐HASH
2.1LM Hash原理
a、将明文口令转换为其大写形式 假设这里以明文Admin@123为例,转换为大写格式为:ADMIN@123
b、 将字符串大写后转换为16进制字符串转换后为 41 44 4D 49 4E 40 31 32 33
c、密码不足14字节要求用0补全, 并分成2组7字节
1Byte=8bit,上面的16进制字符串共9个字节,差5个字节 ,使用 00 00 00 00 00 补全为
41 44 4D 49 4E 40 31
32 33 00 00 00 00 00
d、将每一组7字节的十六进制转换为二进制,每7bit一组末尾加0,再转换成十六进制组成得到2组8字节的编码
第一组
e、将以上步骤得到的两组8字节编码,分别作为DES密钥,为魔术字符串 KGS!@#$% 进行加密 KGS!@#$%的16进制为 4B47532140232425
f、最终结果拼接即可。
2.2、NTLM Hash原理
a、将明文口令转换成十六进制的格式 如:Admin@123 转换成Unicode格式,即在每个字节之后添加0x00
如:
Admin@123转16进制 41646D696E40313233
添加00:410064006D0069006E004000310032003300
b、对Unicode字符串作MD4加密,生成32位的十六进制数字串