windows的登陆密码存储在系统本地的sam文件中,登陆时,系统会将用户输入的密码与sam文件中的密码进行对比,如果匹配,则认证成功。
SAM文件位于%SystemRoot%\system32\config\目录下,用于存储本地所有用户的凭证信息,但这并不意味着你可以随意查看系统密码。
Windows不会以明文形式存储密码,SAM文件中存储的是密码的hash值,登陆时,系统会先将用户输入转换为hash值,然后进行对比。
目前Windows使用的密码hash称为NTLM hash,全称为NT LAN Manager,是一个由数字和字母组成的32位值,通过hex、Unicode、MD4三层加密生成。
因此,登陆的整体流程如下:
注:winlogon负责管理用户登陆和登出,lsass用于本地安全和登陆策略。
除了NTLM hash,还有LM hash,它是NTLM hash的前身,非常脆弱。LM hash的生成规则如下:
从中可以看出,LM hash加密时使用固定值KGS!@#$%作为key,这使得它容易被暴力破解。此外,LM hash的生成机制显示,如果密码长度不足7位,会用0补全,因此密码长度小于7位时,LM hash的末尾字符恒定为AA-D3-B4-35-B5-14-04-EE。
目前,大多数Windows系统使用NTLM hash,Windows Vista和Windows Server 2008之前的系统还会使用LM hash,自Windows Vista和Windows Server 2008起,Windows取消了LM hash。
由于密码存储在SAM文件中,各种方法可以线上或线下提取SAM文件中的hash值。SAM文件不允许直接拷贝和访问,需要通过其他方法提取,然后使用彩虹表等工具破解以获得明文密码。也可以通过Mimikatz读取lsass.exe进程来获取已登录用户的NTLM hash,相关资料在网络上已有大量介绍,感兴趣的可以自行查阅。










