内网渗透学习--Windows认证
字数 1933 2025-08-12 11:34:05

Windows认证机制详解:从本地认证到网络认证

1. 本地认证机制

1.1 SAM文件与密码存储

  • SAM文件位置%SystemRoot%\system32\config\SAM
  • 功能:Windows的用户账号数据库,存储所有用户的用户名和密码哈希
  • 特点
    • 不存储明文密码
    • 系统运行时被锁定,无法直接访问
    • 类似于Linux系统的/etc/shadow文件

1.2 密码哈希类型

1.2.1 LM Hash (已淘汰)

  • 格式示例AAD3B435B51404EEAAD3B435B51404EE
  • 计算过程
    1. 将所有小写字母转换为大写
    2. 转换为16进制,不足14字节用0x00填充
    3. 分成两部分(各7字节)
    4. 每部分转换为二进制,不足56位左边补0
    5. 按7比特分组,末尾加0
    6. 分别与固定KEY("KGS!@#$%")进行DES加密
    7. 拼接结果得到LM Hash
  • 缺陷
    • 密码最大14字符
    • 不区分大小写
    • 密码<6位时后半部分固定

1.2.2 NTLM Hash

  • 格式示例31D6CFE0D16AE931B73C59D7E0C089C0
  • 计算过程
    1. 密码转换为16进制
    2. 进行Unicode编码
    3. 进行MD4加密
  • Python计算示例
    import hashlib,binascii
    hash = hashlib.new('md4', "password".encode('utf-16le')).digest()
    print(binascii.hexlify(hash))
    

1.3 本地认证流程

  • 涉及进程
    • winlogon.exe:管理用户登录和退出
    • lsass.exe:本地安全和登录策略,缓存密码并转换为NTLM Hash
  • 认证过程
    1. 用户输入密码
    2. 系统计算输入密码的NTLM Hash
    3. 与SAM文件中存储的NTLM Hash比对
    4. 匹配则认证成功

2. 网络认证机制

2.1 NTLM协议概述

  • 发展历史
    • 早期SMB传输明文
    • LM挑战/响应机制
    • NTLM (v1/v2)
    • Kerberos
  • 术语区分
    • NTLM Hash:存储在SAM中的密码哈希
    • Net-NTLM Hash:网络认证中使用的哈希
    • NTLM v1对应Net-NTLMv1
    • NTLM v2对应Net-NTLMv2

2.2 挑战/响应认证流程

2.2.1 NTLM v2流程

  1. 协商:确定认证版本
  2. 质询
    • 客户端发送请求
    • 服务端验证用户名存在后生成16位随机Challenge
    • 服务端用NTLM Hash加密Challenge得到Challenge1(Net-NTLM Hash)
    • 客户端用密码NTLM Hash加密Challenge得到Challenge2(Response)
    • 服务端比对Challenge1和Response
  3. 认证:验证结果

2.2.2 NTLM v1流程

  • 与v2类似,但:
    • 使用8位Challenge
    • 主要加密算法为DES

2.3 抓包分析

  • 数据包流程
    1. 客户端请求(不含明文凭据)
    2. 服务端返回Challenge
    3. 客户端返回包含LM Response和NTLMv2 Response
    4. 服务端验证

3. 安全相关

3.1 攻击面

  • SAM文件:攻击者获取后可离线破解
  • lsass.exe:Mimikatz等工具可提取内存中的凭据
  • 网络认证
    • 可捕获Net-NTLM Hash进行破解
    • 哈希传递攻击(Pass the Hash)

3.2 防御措施

  • 禁用LM Hash
  • 使用NTLMv2而非v1
  • 启用SMB签名
  • 限制敏感账户的网络登录
  • 定期监控异常认证活动

4. 关键区别总结

特性 LM Hash NTLM Hash Net-NTLMv1 Net-NTLMv2
存储位置 SAM文件 SAM文件 网络传输 网络传输
算法 DES MD4 DES HMAC-MD5
Challenge 8字节 - 8字节 16字节
安全性 低(已淘汰) 中等 较高
兼容性 旧系统 所有Windows 旧系统 新系统默认

5. 参考资源

  1. Practical Guide to NTLM Relaying
  2. Net-NTLMv1介绍
Windows认证机制详解:从本地认证到网络认证 1. 本地认证机制 1.1 SAM文件与密码存储 SAM文件位置 : %SystemRoot%\system32\config\SAM 功能 :Windows的用户账号数据库,存储所有用户的用户名和密码哈希 特点 : 不存储明文密码 系统运行时被锁定,无法直接访问 类似于Linux系统的 /etc/shadow 文件 1.2 密码哈希类型 1.2.1 LM Hash (已淘汰) 格式示例 : AAD3B435B51404EEAAD3B435B51404EE 计算过程 : 将所有小写字母转换为大写 转换为16进制,不足14字节用0x00填充 分成两部分(各7字节) 每部分转换为二进制,不足56位左边补0 按7比特分组,末尾加0 分别与固定KEY("KGS !@#$%")进行DES加密 拼接结果得到LM Hash 缺陷 : 密码最大14字符 不区分大小写 密码 <6位时后半部分固定 1.2.2 NTLM Hash 格式示例 : 31D6CFE0D16AE931B73C59D7E0C089C0 计算过程 : 密码转换为16进制 进行Unicode编码 进行MD4加密 Python计算示例 : 1.3 本地认证流程 涉及进程 : winlogon.exe :管理用户登录和退出 lsass.exe :本地安全和登录策略,缓存密码并转换为NTLM Hash 认证过程 : 用户输入密码 系统计算输入密码的NTLM Hash 与SAM文件中存储的NTLM Hash比对 匹配则认证成功 2. 网络认证机制 2.1 NTLM协议概述 发展历史 : 早期SMB传输明文 LM挑战/响应机制 NTLM (v1/v2) Kerberos 术语区分 : NTLM Hash:存储在SAM中的密码哈希 Net-NTLM Hash:网络认证中使用的哈希 NTLM v1对应Net-NTLMv1 NTLM v2对应Net-NTLMv2 2.2 挑战/响应认证流程 2.2.1 NTLM v2流程 协商 :确定认证版本 质询 : 客户端发送请求 服务端验证用户名存在后生成16位随机Challenge 服务端用NTLM Hash加密Challenge得到Challenge1(Net-NTLM Hash) 客户端用密码NTLM Hash加密Challenge得到Challenge2(Response) 服务端比对Challenge1和Response 认证 :验证结果 2.2.2 NTLM v1流程 与v2类似,但: 使用8位Challenge 主要加密算法为DES 2.3 抓包分析 数据包流程 : 客户端请求(不含明文凭据) 服务端返回Challenge 客户端返回包含LM Response和NTLMv2 Response 服务端验证 3. 安全相关 3.1 攻击面 SAM文件 :攻击者获取后可离线破解 lsass.exe :Mimikatz等工具可提取内存中的凭据 网络认证 : 可捕获Net-NTLM Hash进行破解 哈希传递攻击(Pass the Hash) 3.2 防御措施 禁用LM Hash 使用NTLMv2而非v1 启用SMB签名 限制敏感账户的网络登录 定期监控异常认证活动 4. 关键区别总结 | 特性 | LM Hash | NTLM Hash | Net-NTLMv1 | Net-NTLMv2 | |------------|--------------|--------------|--------------|--------------| | 存储位置 | SAM文件 | SAM文件 | 网络传输 | 网络传输 | | 算法 | DES | MD4 | DES | HMAC-MD5 | | Challenge | 8字节 | - | 8字节 | 16字节 | | 安全性 | 低(已淘汰) | 中等 | 低 | 较高 | | 兼容性 | 旧系统 | 所有Windows | 旧系统 | 新系统默认 | 5. 参考资源 Practical Guide to NTLM Relaying Net-NTLMv1介绍