内网攻防:LM 与 NTLM认证以及NTLM中继攻击与反射
字数 2369 2025-08-12 11:33:38

Windows认证机制与NTLM中继攻击技术详解

一、Windows认证机制概述

Windows系统主要使用两种密码哈希算法进行用户认证:

  1. LM Hash (LAN Manager Hash) - Windows早期使用的密码哈希算法
  2. 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生成原理

  1. 用户密码转换为大写,最大长度限制为14个字符
  2. 密码转换为16进制字符串,不足14字节用0补全
  3. 16进制字符串分成两个7字节部分
  4. 每部分转换为56位比特流,不足左边补0
  5. 每7bit为一组,每组末尾加0,组成新的8字节编码
  6. 两组8字节编码分别作为DES密钥,加密魔术字符串"KGS!@#$%"
  7. 将两组加密结果拼接,得到最终的LM Hash

2.2 LM Hash的缺陷

  1. 密码长度最大只能为14个字符
  2. 密码不区分大小写,生成哈希前都会转换为大写
  3. 密码强度小于7位时,第二个分组加密结果固定为aad3b435b51404ee
  4. 使用DES加密,安全性较低

三、NTLM Hash详解

3.1 NTLM Hash生成原理

  1. 将用户密码转换为十六进制
  2. 在每个字节后添加0x00进行Unicode编码
  3. 使用MD4算法对Unicode编码数据进行哈希计算

示例(密码"123456"):

31 32 33 34 35 36 → 310032003300340035003600 → MD4 → 32ed87bdb5fdc5e9cba88547376818d4

四、NTLM认证协议

4.1 NTLM认证类型

  1. 本地认证:通过比对SAM数据库中的NTLM Hash进行认证
  2. 网络认证:用于域内或工作组环境,分为三个版本:
    • NTLMv1
    • NTLMv2
    • NTLM Session v2

4.2 NTLM网络认证流程

NTLM网络认证采用挑战/响应机制,包含三种消息:

  1. Type 1(协商):客户端发送支持的功能列表
  2. Type 2(质询):服务器返回16位随机Challenge
  3. Type 3(认证):客户端用用户Hash加密Challenge生成Response返回

详细流程:

  1. 用户登录客户端
  2. 客户端发送Type1消息
  3. 服务器返回Type2消息(包含Challenge)
  4. 客户端用用户Hash加密Challenge生成Response(Net-NTLM Hash)
  5. 服务器用本地缓存的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 攻击条件

  1. 目标机器禁用SMB签名(除域控外默认禁用)
  2. 获取到有效的Net-NTLM Hash

5.3 获取Net-NTLM Hash的方法

  1. LLMNR/NBNS欺骗

    • 利用Windows名称解析顺序(hosts→DNS缓存→LLMNR/NBNS)
    • 当用户访问不存在的主机时,通过LLMNR/NBNS投毒获取Hash
  2. WPAD劫持

    • 利用Web代理自动发现协议(WPAD)
    • 通过DHCP/DNS/LLMNR/NBNS欺骗让客户端从攻击者获取PAC文件
    • 使客户端流量经过攻击者机器

5.4 攻击工具

  1. Responder

    • 包含MultiRelay.py可实现NTLM中继
    • 命令示例:
      responder -I eth0 -r on -v -F on -w on
      
  2. Impacket工具集

    • smbrelayx.py:SMB中继攻击
      python3 smbrelayx.py -h 目标IP -e 木马路径
      
    • ntlmrelayx.py:更灵活的中继工具
      ntlmrelayx.py -t smb://目标IP -c "命令" -smb2support
      
  3. Metasploit

    • exploit/windows/smb/smb_relay(仅支持NTLMv1)

5.5 防御措施

  1. 完全禁用NTLM,改用Kerberos认证
  2. 启用SMB签名(防止中继到SMB)
  3. 禁用LLMNR和NBNS
  4. 配置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签名,以及最小化特权账户的使用。

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"): 四、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中继 命令示例: Impacket工具集 : smbrelayx.py:SMB中继攻击 ntlmrelayx.py:更灵活的中继工具 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签名,以及最小化特权账户的使用。