内网渗透学习--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 - 计算过程:
- 将所有小写字母转换为大写
- 转换为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计算示例:
import hashlib,binascii hash = hashlib.new('md4', "password".encode('utf-16le')).digest() print(binascii.hexlify(hash))
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 | 旧系统 | 新系统默认 |