|Windows身份认证及利用思路( 二 )


SAM 是用来存储 windows 操作系统密码的数据库文件为了避免明文密码泄漏SAM 文件中保存的是明文密码在经过一系列算法处理过的 Hash 值被保存的 Hash 分为 LM Hash 、 NTLM Hash。 当用户进行身份认证时会将输入的 Hash 值与 SAM 文件中保存的 Hash 值进行对比 。 在域控制器上 SAM 文件相当于活动目录数据库文件 ntds.dit 。
值得注意的是 ntds.dit 并不等于 SAM 文件虽然在服务器升级为域控时会默认将 SAM 中的本地用户升级为对应级别的域用户或域管理员 。 但需要注意的是 SAM 文件依旧存在依旧可以配置本地管理员的设置 。
SAM 文件保存于%SystemRoot%system32configsam中
在注册表中SAM 保存于
HKEY_LOCAL_MACHINESAMSAM HKEY_LOCAL_MACHINESECURITYSAM在正常情况下 SAM 文件处于锁定状态不可直接访问、复制、移动仅有 system 用户权限才可以读写该文件 。
出于安全性的考虑在后期的 windows 系统中 SAM 文件中被 bootkey 加密 , 而 bootkey 则保存在这个SYSTEM 文件下 。 因此单独的 SAM 文件是无法正常解读的如果需要解密则还需要加载对应系统的 system 文件 。
SAM 文件中内容存储类似于 Unix/Linux 系统中的 passwd 和 shadow 文件的结合 , 区别在于没有这么直观明 。
SAM 中 hash 密码存储格式为用户名称:RID:LM-HASH值:NT-HASH值例如
Administrator:500:aad3b435b51404eeaad3b435b51404ee:732ca7a7e650537443ccacae4d2f7 1f5:::这一串内容表示
用户名为Administrator
RID为500
LM-HASH值为:aad3b435b51404eeaad3b435b51404ee
NT-HASH值为:732ca7a7e650537443ccacae4d2f71f5
3.本地认证讲完看一下网络认证
NTLM 协议
NTLM 是一种网络认证协议它是基于挑战Chalenge/响应Response认证机制的一种认证模式 。 这个协议只支持 windows 操作系统 。
需要注意的是 NTLM 协议是一个嵌入式的协议很重要消息的传输依赖于使用ntlm的上层协议比如SMBLDAPHTTP等 。 需要注意的是NTLM 不像 kerbreos既可以镶嵌在上层协议里面也可以作为独立的应用层协议 。 NTLM 是只能镶嵌在上层协议里面消息的传输依赖于使用 ntlm 的上层协议 。
a、认证过程
1.三种重要消息
NTLM 验证主要由三种消息组成
type 1协商
type 2质询
type 3验证
协商主要用于确认双方协议版本 。
质询就是挑战Chalenge/响应Response认证机制起作用的范畴本小节主要讨论这个机制的运作流程 。
验证主要是在质询完成后验证结果是认证的最后一步 。
2.完整验证流程
|Windows身份认证及利用思路
本文插图


1.首先用户客户端向服务器发送 type 1 消息协商它主要包含客户端支持和服务器请求的功能列表 。
2.服务器在接收到用户发来的请求后用 type 2 消息质询消息进行响应这个响应中不仅包含有服务器支持和同意的功能列表最重要的是包含服务器产生的Challenge 。
3.用户客户端在收到服务器的响应后用 type 3 消息验证回复质询 。 用户客户端接收到 challenge 之后使用用户 hash 与 challenge 进行加密运算得到 response然后将 response、username、challeng 发给服务器 。 消息中的 response 是最关键的部分因为它们向服务器证明客户端用户已经知道帐户密码 。
该服务器拿到用户客户端发送的 type 3 消息之后使用 challenge 和用户 hash 进行加密得到 response2 与 type 3 发来的 response 进行比较 。
1.如果用户 hash 是存储在域控里面的话那么没有用户 hash也就没办法计算 response2也就无法验证 。 这个时候服务器就会通过 netlogon 协议联系域控建立一个安全通道,然后将 type 1,type 2type3 全部发给域控(这个过程也叫作Pass Through Authentication认证流程)


推荐阅读