内网渗透|Windows认证机制剖析

内网渗透|Windows认证机制剖析

Windows认证机制剖析:本地,工作组,域环境。

本地认证(User Login)

概念

在本地登录Windows的情况下,操作系统会使用用户输入的密码作为凭证去与系统中的密码进行验证,操作系统中的密码存储在

1
%SystemRoot%\system32\config\sam

登录系统的时候,系统会自动地读取SAM文件中的“密码”与我们输入的“密码”进行比对,如果相同,证明认证成功!

这个SAM文件中保留了计算机本地所有用户的凭证信息,可以理解为是一个数据库。

※注意:Windows本身不保存明文密码,只保留密码的Hash

NTLM Hash的产生

NTLM Hash的前身是LM Hash,由于存在安全缺陷已经被淘汰,无需做过多的了解,知道有这个东西即可

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

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

本地认证流程

1
2
3
4
5
6
winlogon.exe -> 接收用户输入 -> lsass.exe -> (认证)

1.用户注销、重启、锁屏后
2.操作系统会让winlogon显示登录界面,也就是输入框
3.接收输入后,将密码交给lsass进程,这个进程中会存一份明文密码
4.将明文密码加密成NTLM Hash,对SAM数据库比较认证
  • Windows Logon Process(即 winlogon.exe),是Windows NT 用户登 陆程序,用于管理用户登录和退出。
  • LSASS用于微软Windows系统的安全机 制。它用于本地安全和登陆策略。

网络认证(Net NTLM)

工作组环境和域环境下Net NTLM认证过程因为有DC(域控制器)的参与流程略有差异,不过不影响我们进行哈希传递攻击,这里分开讲一下。

NTLM 协议概念

这个协议只支持Windows

NTLM是一种网络认证协议,全称是:NT LAN Manager,它是基于挑战(Challenge)/响应(Response)认证机制的一种认证模式。

NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议,消息的传输依赖于使用NTLM的上层协议,比如SMBLDAPHTTP等。

工作组

NTLM协议认证过程

  • 协商:主要用于确认双方协议版本,NTLM存在V1和V2两个版本,具体区别就是加密方式不同,这个一般不用管。

  • 质询:就是挑战(Challenge)/响应(Response)认证机制起作用的范畴,也是认证机制的核心。

  • 验证:验证主要是在质询完成后验证结果,是认证的最后一步。

协商

img

质询

  • 1.ClientServer发送用户信息(用户名)请求。
  • 2.Server收到用户信息后判断该本地账户列表是否存在(不存在就返回认证失败),存在则生成一个16位的随机数(Challenge), 然后使用登录用户名对应的NTLM Hash加密Challenge(16位随机字符), 生成一个Challenge1(Net-NTLM Hash)存在内存中。同时,将Challenge(16位随机字符)发送给Client
  • 3.Client接受到服务器发送的Challenge后,使用将要登录到账户对应的NTLM Hash加密Challenge生成ResponseNet-NTLM Hash),然后将Response发送至Server

这里引入了Net NTLM Hash:经过NTLM Hash加密Challenge的结果在网络协议中称之为Net NTLM Hash(不能直接用来进行哈希传递攻击,但可以通过暴力破解来获取明文密码)。

详细介绍:https://daiker.gitbook.io/windows-protocol/ntlm-pian/4#0x03-net-ntlm-hash

验证

Server收到Client发送的ResponseNet-NTLM Hash)后,与之前保存在内存中的Challenge1(Net-NTLM Hash)比较,如果相等则认证通过。

现在再来看一下这个认证过程,是不是清晰了很多

作者倾旋

域环境

NTLM协议认证过程

域环境下Net NTLM认证过程因为有DC(域控制器)的参与工作组下的流程略有差异。

作者daiker

①用户登录客户端电脑。

ClientServer发送协商消息,它主要包含客户端支持和服务器请求的功能列表。

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

Client身份验证消息(Response)回复质询。用户接收到步骤③中的Challenge之后,使用用户hash与challenge进行加密运算得到Response,将responseusernamechalleng发给Server。消息中的response(Net-NTLM Hash)是最关键的部分,因为它们向服务器证明客户端用户已经知道帐户密码。

Server拿到身份验证消息(Response)后,使用challenge和用户hash进行加密得到response2与步骤③发来的response进行比较。

这时候,如果认证用户hash是存储在域控里面的话,那么本地没有认证用户hash,也就没办法计算response2,所以也就没法验证完成步骤⑤。所以Server就会通过netlogon协议联系域控,建立一个安全通道,然后将 协商消息质询消息(Challenge)身份验证消息(Response) 全部发给域控(这个过程也叫作Pass Through Authentication认证流程)。

⑥域控使用challenge和认证用户的hash进行加密得到response2,与type 3的response进行比较,判断是否一致。

⑦完成认证过程。

参考文章

https://daiker.gitbook.io/windows-protocol/ntlm-pian/4#0x02-ntlm-shen-fen-yan-zheng

https://payloads.online/archivers/2018-11-30/1/

https://ares-x.com/2020/03/16/%E5%9F%9F%E6%B8%97%E9%80%8F%E5%AD%A6%E4%B9%A0%EF%BC%88%E4%B8%80%EF%BC%89Windows%E8%AE%A4%E8%AF%81%E6%9C%BA%E5%88%B6/

作者

Se7en

发布于

2021-10-19

更新于

2022-03-31

许可协议

评论