渗透测试之Windows本地认证浅析

渗透测试之Windows本地认证浅析

本地认证流程

众所周知在本地登陆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

image-20211017215342356

破解前可以使用tspkg,wdigest,kerberos模块提供的密码进行尝试

对NTLM Hash进行破解

hash,译作哈希或者散列,是指将任意长度的输入,经过散列算法生成固定长度的密文,也就是散列值。目前来说,hash函数主要有MD5、SHA1、NTLM等算法。 散列过程是不可逆的,并且可能存在多个输入对应着同一个散列值(哈希碰撞)。破解hash算法有字典攻击、查表法、反向查表法、彩虹表等多种方式。

在线破解网站推荐使用:cmd5、ophcrack

离线破解工具推荐使用:hashcat、john

以下以cmd5举例;

image-20211017215508558

猜你喜欢

转载自blog.csdn.net/CoreNote/article/details/120817024