内网攻防:LM 与 NTLM认证以及NTLM中继攻击与反射
字数 2369 2025-08-12 11:33:38
Windows认证机制与NTLM中继攻击技术详解
一、Windows认证机制概述
Windows系统主要使用两种密码哈希算法进行用户认证:
- LM Hash (LAN Manager Hash) - Windows早期使用的密码哈希算法
- NTLM Hash (NT LAN Manager Hash) - 现代Windows系统默认使用的密码哈希算法
从Windows Vista和Windows Server 2008开始,系统默认只存储NTLM Hash,LM Hash将不再存在。如果密码为空或不存储LM Hash,抓取到的LM Hash值固定为:AAD3B435B51404EEAAD3B435B51404EE
二、LM Hash详解
2.1 LM Hash生成原理
- 用户密码转换为大写,最大长度限制为14个字符
- 密码转换为16进制字符串,不足14字节用0补全
- 16进制字符串分成两个7字节部分
- 每部分转换为56位比特流,不足左边补0
- 每7bit为一组,每组末尾加0,组成新的8字节编码
- 两组8字节编码分别作为DES密钥,加密魔术字符串"KGS!@#$%"
- 将两组加密结果拼接,得到最终的LM Hash
2.2 LM Hash的缺陷
- 密码长度最大只能为14个字符
- 密码不区分大小写,生成哈希前都会转换为大写
- 密码强度小于7位时,第二个分组加密结果固定为
aad3b435b51404ee - 使用DES加密,安全性较低
三、NTLM Hash详解
3.1 NTLM Hash生成原理
- 将用户密码转换为十六进制
- 在每个字节后添加0x00进行Unicode编码
- 使用MD4算法对Unicode编码数据进行哈希计算
示例(密码"123456"):
31 32 33 34 35 36 → 310032003300340035003600 → MD4 → 32ed87bdb5fdc5e9cba88547376818d4
四、NTLM认证协议
4.1 NTLM认证类型
- 本地认证:通过比对SAM数据库中的NTLM Hash进行认证
- 网络认证:用于域内或工作组环境,分为三个版本:
- NTLMv1
- NTLMv2
- NTLM Session v2
4.2 NTLM网络认证流程
NTLM网络认证采用挑战/响应机制,包含三种消息:
- Type 1(协商):客户端发送支持的功能列表
- Type 2(质询):服务器返回16位随机Challenge
- Type 3(认证):客户端用用户Hash加密Challenge生成Response返回
详细流程:
- 用户登录客户端
- 客户端发送Type1消息
- 服务器返回Type2消息(包含Challenge)
- 客户端用用户Hash加密Challenge生成Response(Net-NTLM Hash)
- 服务器用本地缓存的Challenge和用户Hash生成Response2进行比对
4.3 Net-NTLM Hash
Net-NTLM Hash是在Type3消息中生成的,不同于NTLM Hash:
-
Net-NTLM Hash v1格式:
username::hostname:LM response:NTLM response:challenge -
Net-NTLM Hash v2格式:
username::domain:challenge:HMAC-MD5:blob
五、NTLM中继攻击
5.1 攻击原理
攻击者截获Net-NTLM Hash后,将其重放到其他机器进行认证。由于MS08-068补丁修复,无法将Hash重放回发起请求的机器,但可以重放到其他机器。
5.2 攻击条件
- 目标机器禁用SMB签名(除域控外默认禁用)
- 获取到有效的Net-NTLM Hash
5.3 获取Net-NTLM Hash的方法
-
LLMNR/NBNS欺骗:
- 利用Windows名称解析顺序(hosts→DNS缓存→LLMNR/NBNS)
- 当用户访问不存在的主机时,通过LLMNR/NBNS投毒获取Hash
-
WPAD劫持:
- 利用Web代理自动发现协议(WPAD)
- 通过DHCP/DNS/LLMNR/NBNS欺骗让客户端从攻击者获取PAC文件
- 使客户端流量经过攻击者机器
5.4 攻击工具
-
Responder:
- 包含MultiRelay.py可实现NTLM中继
- 命令示例:
responder -I eth0 -r on -v -F on -w on
-
Impacket工具集:
- smbrelayx.py:SMB中继攻击
python3 smbrelayx.py -h 目标IP -e 木马路径 - ntlmrelayx.py:更灵活的中继工具
ntlmrelayx.py -t smb://目标IP -c "命令" -smb2support
- smbrelayx.py:SMB中继攻击
-
Metasploit:
- exploit/windows/smb/smb_relay(仅支持NTLMv1)
5.5 防御措施
- 完全禁用NTLM,改用Kerberos认证
- 启用SMB签名(防止中继到SMB)
- 禁用LLMNR和NBNS
- 配置WPAD使用固定代理
六、NTLM反射攻击
6.1 原理
将客户端发送的凭证反射回客户端自身进行攻击,利用SeImpersonatePrivilege或SeAssignPrimaryTokenPrivilege权限提升至SYSTEM。
6.2 利用条件
需要以下权限之一:
- SeImpersonatePrivilege
- SeAssignPrimaryTokenPrivilege
拥有这些权限的账户包括:
- 本地管理员账户
- 本地服务账户
- SYSTEM、Network Service、Local Service账户
6.3 利用工具
- Potato系列工具(如Juicy Potato、Rotten Potato等)
- 利用CreateProcessWithTokenW或CreateProcessAsUserW API
七、总结
Windows认证机制中,NTLM协议存在中继和反射攻击风险。攻击者可以通过多种方式获取Net-NTLM Hash,并利用中继攻击获取系统权限。防御此类攻击的关键在于禁用不安全的协议、启用SMB签名,以及最小化特权账户的使用。