域渗透学习笔记二:Windows认证机制Net-NTLM刨析

基础知识

1.Windows本地认证:

认证的密码储存在SAM文件中,其位置为C:/Windows/system32/config/sam,词组security account manager,意思是安全账号管理器,其作用是对windows账户安全管理,类似于linux系统中的/etc/passwd文件,删除该文件即可删除账号密码。这也是PE破解系统密码的原理。

登录认证是会从该文件读取里面的加密后的密码(NTLM hash)和用户输入的密码进行对比。

NTLM hash生成流程如下:

  • 将明文口令转换成十六进制的格式

  • 转换成Unicode格式,即在每个字节之后添加0x00

  • 对Unicode字符串作MD4加密,生成32位的十六进制数字串

    NTLM hash支持Net NTLM认证协议以及本地认证协议。其前身为LM Hash(LM算法脆弱,响应存在一些缺陷。主要出现在xp,03之下的系统)

Net-NTLM认证流程:

  • 协商:主要用于确认双方协议版本
  • 质询:就是挑战(Chalenge)/响应(Response)认证机制起作用的范畴。
  • 验证:验证主要是在质询完成后,验证结果,是认证的最后一步。

质询的完整过程:

  • 1.客户端向服务器端发送用户信息(用户名)请求
  • 2.服务器接受到请求,生成一个16位的随机数,被称之为“Challenge”, 使用登录用户名对应的NTLM Hash加密Challenge(16位随机字符), 生成Challenge1。生成一 个Net-NTLM Hash存在内存中,同时,生成Challenge1后,将Challenge(16位随机 字符)发送给客户端。
  • 3.客户端接受到Challenge后,使用将要登录到账户对应的NTLM Hash加密Challenge生成Response,然后将Response发送至服务器端。

其中,经过NTLM Hash加密Challenge的结果在网络协议中称之为Net NTLM Hash。

验证: 服务器端收到客户端的Response后,比对Chanllenge1与Response是否相等,若相等,则认证通过。

注意:

1.Chanllenge是Server产生的一个16字节的随机数,每次认证都不同
2.Response的表现形式是Net-NTLM Hash,它是由客户端 提供的密码Hash加密Server返回的Chanllenge产生的结果。
3.SMB走的也是Net-NTLM协议。

以上属于Net-NTLM v2协议的详细流程
Net-NTLMv1的加密流程如下:

  • 1.客户端向服务器发送一个请求
  • 2.服务器接收到请求后,生成一个8位的Challenge,发送回客户端
  • 3.客户端接收到Challenge后,使用登录用户的密码hash对Challenge加密,作为response发送给服务器
  • 4.服务器校验response
    两者的流程可以说是相同的,但加密算法不同,后者Net-NTLMv1相对脆弱

质询抓包分析

使用域户向域控共享目录发起请求,

在域用户机器上Wireshark抓包如下:

步骤上质询有四步,可以将其看为一发一收两个来回

第一发:基础信息发送

第一收:获取对方生成并发过来的Challenge

第二发:将要登录到账户对应的NTLM Hash加密Challenge生成Response并发给服务器

第二收:服务器校验response并返回结果


(登录成功)

(登录失败)

至此Net-NTLM协议通讯过程分析完成,也可以看到文章NTLM hash和Net-NTLM hash介绍0x03 Net-NTLM hash中的分析是错误的。

有个非常值得关注的点:

  • 当用户进行涉及Net-NTLM认证的访问时系统默认会先将本地NTLM hash去走一遍Net-NTLM验证。

NTLM本地认证流程:

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


工作组认证和域环境认证的区别:

工作组:点对点交易,无法相互信任。
域环境:有信托机构(域),相当于闲鱼卖东西需要闲鱼官方担保。

参考资料:

彻底理解Windows认证
NTLM hash和Net-NTLM hash介绍

一个热爱域渗透/WAF绕过/免杀/代码审计/工具开发的憨批