windows登录时密码的存储和验证过程:
windows进行本地登录时,使用NTLM协议或者Kerberos协议进行身份验证,需要用户输入的密码来参与。因此下面介绍本地登录时密码的验证和存储过程。
本地登录授权用户访问本地计算机上Windows资源的权限。本地登录要求用户在本地计算机的安全账户管理器(SAM)中具有用户账号。安全账户管理器(SAM)是存储本地用户账户和组的数据库。该数据库文件位于C:\Windows\System32\config\sam,同时挂载在注册表中的HKLM\SAM项上。正常情况下,这个SAM文件在正常情况下是不可打开的,除非通过一些特殊手段,但是不建议,这可能会导致里面的内容被更改,影响后面登陆的问题。
SAM以存储在本地计算机注册表中的安全账户来保护和管理用户和组信息。
本地登录时账号密码经过编码后以LM Hash或NT Hash的形式保存在SAM数据库中。用户在电脑的登录界面输入密码,通过WinLogon.exe把密码提交给本地安全机构(Local Security Authority)来编译处理。LSA验证密码是否和SAM中该账户的密码一致,如果一致则登录成功。
hashdump抓取密文的模块分析:
我们通过hashdump 抓取出所有用户的密文,分为两个模块,分别是LMhash和NThash
LM Hash全名为“LAN Manager Hash”,是微软为了提高Windows操作系统的安全性而采用的散列加密算法,其本质是DES加密。尽管LM Hash较容易被破解,但是为了保证系统的兼容性,Windows只是将LM Hash禁用了(从Windows Vista和Windows Server 2008版本开始,Windows操作系统默认禁用LM Hash),LM Hash明文密码被限制在14位以内,也就是说,如果要停止使用LM Hash,将用户的密码设置为14位以上就好了。如果LM Hash被禁用了,攻击者提高工具抓取的LM Hash通常为"aad3b435b51404eeaad3b435b51404ee"。
NTLMHash是微软为了在提高安全性的同时保证兼容性而设计的散列加者算法,NTLMHash是基于MD4加密算法进行加密的。个人版从Windows Vista以后,服务器版从Wndows Sever2003以后,Windows 操作系统的认证方式均为NTLM Hash.
为了保证系统的兼容性,Windows只是将LM hash禁用了,但仍然会生成LMhash并且是固定值aad3b435b51404eeaad3b435b51404ee,所以在hashdump抓取结果可以看见两个密文模块。
使用密文登陆:
如果我们拿到了密码的密文,这个密文也是可以用来登陆别人的设备或者账户的,用impacket工具中的横向渗透工具,比如psexec、smbexec等工具都支持使用hash值登录,或则使用kali自带的脚本工具/usr/share/doc/python3-impacket/examples下的psexec.py: