什么是SAM

SAM:

  安全帐户管理器(Security Accounts Manager), SAM 是Windows操作系统管理用户帐户的安全所使用的一种机制。用来存储 Windows 操作系统密码的数据库文件,为了避免明文密码泄漏SAM文件中保存的是明文密码在经过一系列算法处理过的Hash值被保存的Hash分为LMHash、NTLMHash。当用户进行身份认证时会将输入的Hash值与SAM文件中保存的Hash值进行对比。

  SAM文件保存于 %SystemRoot%\system32\config\sam 中,在注册表中保存在 HKEY_ LOCAL_MACHINE\SAM\SAM,HKEY_ LOCAL _MACHINE\SECURITY\SAM 。在正常情况下SAM文件处于锁定状态不可直接访问、复制、移动,仅有system用户权限才可以读写该文件。

windows本地认证: 

本地用户认证

  Windows在进行本地登录认证时操作系统会使用用户输入的密码作为凭证去与系统中的密码进行对比验证。通过 winlogon.exe 接收用户输入传递至 lsass.exe 进行认证。

  winlogon.exe用于在用户注销、重启、锁屏后显示登录界面。 Isass.exe 用于将明文密码变成NTLM Hash的形式与SAM数据库比较认证。

  Windows本身不保存明文密码,只保留密码的Hash。

LM Hash

  全称是 LAN Manager Hash,windows 最早用的加密算法,由 IBM 设计。

  目前大多数的Windows都采用NTLM协议认证,LM协议已经基本淘汰了。LM协议的脆弱之处在于:

  1.des的key是固定的,有了Key就能够解出原文。

  2.可以根据 hash 判断密码长度是否大于7位,如果密码强度是小于7位,那么第二个分组加密后的结果肯定是aad3b435b51404ee

  3.密码不区分大小写并且长度最大为14位

  4.7+7字符分开加密明显复杂度降低14个字符整体加密  957+957<9514

NTLM Hash与NTLM

  在Windows中,密码Hash目前称之为NTLM Hash,其中NTLM全称是:“NT LAN Manager”。

  这个NTLM是一种网络认证协议,与NTLM Hash的关系就是:NTLM 网络认证协议是以 NTLM Hash 作为根本凭证进行认证的协议。也就是说,NTLM与NTLM Hash 相互对应。在本地认证的过程中,其实就是将用户输入的密码转换为 NTLM Hash 与 SAM 中的 NTLM Hash 进行比较。

NTLM Hash的产生

  1.先将用户的密码转化为十六进制格式。

  2.将十六进制格式的密码进行 Unicode 编码。

  3.使用 MD4 摘要算法对 Unicode 编码数据进行 Hash 计算。

  假设我的密码是admin,那么操作系统会将admin转换为十六进制,经过Unicode转换后,再调用MD4加密算法加密,这个加密结果的十六进制就是NTLM Hash。

1 admin -> hex(16进制编码) = 61646d696e 
2 61646d696e -> Unicode = 610064006d0069006e00
3 610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634

本地认证流程

  winlogon.exe -> 接收用户输入 -> lsass.exe -> (认证)

  首先,用户注销、重启、锁屏后,操作系统会让winlogon显示登录界面,也就是输入框,winlogon接收输入后,将密码交给lsass进程,这个进程中会存一份明文密码,将明文密码加密成NTLM Hash,对SAM数据库比较认证。

网络认证

  在内网渗透中,经常遇到工作组环境,而工作组环境是一个逻辑 上的网络环境(工作区),隶属于工作组的机器之间无法互相建 立一个完美的信任机制,只能点对点,是比较落后的认证方式, 没有信托机构。

  假设A主机与B主机属于同一个工作组环境,A想访问B主机上的资料,需要将一个存在于B主机上的账户凭证发送至B主机,经过认证才能够访问B主机上的资源。

  这是我们接触比较多的SMB共享文件的案例,SMB的默认端口是445。

  早期SMB协议在网络上传输明文口令。后来出现 LAN Manager Challenge/Response 验证机制,简称LM,它是如此简单以至很容易就被破解,现在又有了NTLM以及Kerberos。

  NTLM是一种网络认证协议,它是基于挑战(Chalenge)/响应(Response)认证机制的一种认证模式。

  这个协议只支持Windows。

Challenge/Response

  NTLM的认证过程分为三步:type1(协商),type2(质询),type3(身份验证)

  1、用户登录客户端电脑

  2、(type 1)客户端向服务器发送type 1(协商)消息,它主要包含客户端支持和服务器请求的功能列表。

  3、(type 2)服务器用type 2消息(质询)进行响应,这包含服务器支持和同意的功能列表。但是,最重要的是,它包含服务器产生的Challenge。  

  4、(type 3)客户端用type 3消息(身份验证)回复质询。用户接收到步骤3中的challenge之后,使用用户的 NTLM hash对challenge进行加密运算得到response,将response,username,challeng发给服务器。消息中的response是最关键的部分,因为它们向服务器证明客户端用户已经知道帐户密码。

  5、服务器拿到type 3之后,使用用户 hash 加密 challenge 得到response2,与 type 3发来的 response 进行比较。如果用户hash是存储在域控里面的话,那么没有用户hash,也就没办法计算response2。也就没法验证。这个时候用户服务器就会 通过netlogon协议联系域控,建立-个安全通道然后将type 1,type 2,type3 全部 发给域控(这个过程也叫作Pass Through Authentication认证流程)

  6、域控使用challenge和用户hash进行加密得到response2,与type 3的response进行比较。

注意:

  1.Chanllenge是Server产生的一个16字节的随机数,每次认证都不同

  2.Response的表现形式是Net-NTLM Hash,它是由客户端 提供的密码Hash加密Server返回的Chanllenge产生的结果。

NTLM V2协议

  NTLM v1与NTLM v2最显著的区别就是 Challenge 与加密算法不同,共同点就是加密的原料都是NTLM Hash。

  下面细说一下有什么不同:

    Challage:NTLM v1的Challenge有8位,NTLM v2的Challenge为16位。

    Net-NTLM Hash:NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。