本地认证流程
众所周知在本地登陆Windows的情况下,人们通常会输入用户名和密码,如果用户名密码正确那么可以正常桌面,如果错误则无法进入桌面,那么操作系统是如何完成认证的过程的呢?
Windows的本地认证流程大致可以抽象为以下三个步骤;
1、由 winlogon.exe进程接受用户输入的密码
2、调用lsass.exe进程对用户输入的密码进行加密,将其转换为NTLM Hash
3、将有密码转换成的NTLM Hash与SAM文件中存储的NTLM Hash进行比较,如相同,将GroupSid与UserSid发送给winlogon.exe准备登陆,如不同则登陆失败
-
winlogon.exe即 Windows Logon Process,是Windows NT用户登陆程序,用于管理用户登录和退出。
-
lsass.exe即Local Security Authority Service,是Windows系统的安全机制。它用于本地安全和登陆策略。
-
SAM即Security Account Manager,是Windows对用户账户的安全管理使用的安全账号管理器,SAM文件即账号密码数据库文件。
- SAM文件的默认存储路径为:%SystemRoot%\system32\config\sam
-
NTLM Hash是Windows所采用的一种加密算法,其流程如下;
-
明文转换为16进制ASCII码
-
使用little-endian(小端)序将其在转换为Unicode格式
-
对所获取的 Unicode串进行标准MD4单向哈希,无论数据源有多少字节,MD4固定产生128-bit的哈希值
例如: admin -> ASCII = 61646d696e 61646d696e -> Unicode = 610064006d0069006e00 610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
-
本地密码的获取
本地密码的获取主要分为两个步骤;
1、获取lsass中的NTLM Hash
2、对NTLM Hash进行破解
- 如无法破解也可以利用Pass The Hash完成不需要输入密码的NTLM协议认证流程,具体利用方法详见浅析Windows网络认证
获取lsass中的NTLM Hash
获取lsass中的NTLM Hash常用工具为mimikatz
mimikatz是法国人Gentil Kiwi编写的一款windows平台下的渗透测试神器,mimikatz可以从内存中提取明文密码、哈希、PIN 码和 kerberos 票证。mimikatz还可以执行哈希传递、票证传递或构建黄金票证。
具体操作步骤为:
1、使用管理员权限启动mimikatz.exe
2、获取调试权限
mimikatz # privilege::debug
3、获取登陆名与密码
mimikatz # sekurlsa::logonpasswords
如图获取管理员的HTLM为:de26cce0356891a4a020e7c4957afc72
破解前可以使用tspkg,wdigest,kerberos模块提供的密码进行尝试
对NTLM Hash进行破解
hash,译作哈希或者散列,是指将任意长度的输入,经过散列算法生成固定长度的密文,也就是散列值。目前来说,hash函数主要有MD5、SHA1、NTLM等算法。 散列过程是不可逆的,并且可能存在多个输入对应着同一个散列值(哈希碰撞)。破解hash算法有字典攻击、查表法、反向查表法、彩虹表等多种方式。
在线破解网站推荐使用:cmd5、ophcrack
离线破解工具推荐使用:hashcat、john
以下以cmd5举例;