NTLM 挑战与响应机制全拆解:adsec 带你吃透 Pass-the-Hash 与 NTLM Relay 攻击链

📅 2026/8/27 16:07:41
NTLM 挑战与响应机制全拆解:adsec 带你吃透 Pass-the-Hash 与 NTLM Relay 攻击链
NTLM 挑战与响应机制全拆解adsec 带你吃透 Pass-the-Hash 与 NTLM Relay 攻击链【免费下载链接】adsecAn introduction to Active Directory security项目地址: https://gitcode.com/gh_mirrors/ad/adsecAD 域里的横向移动几乎绕不开 NTLM。本文用开源课程 adsec 讲透 NTLM 挑战与响应机制推演 Pass-the-Hash 与 NTLM Relay 两条经典攻击链并带你搭好实验环境把攻击一步步亲手复现。NTLM 到底在认证什么一次密码不出网的验证Windows 客户端访问域资源时明文密码从不离开机器网络上流转的永远是哈希派生出来的运算结果。这就是质询-应答Challenge-Response的设计思路。它就像老师随机抽同学验算作业公式密码从不当众念出来老师只抛出一道随机题答案对得上就算通过。adsec 是一套 Active Directory 安全入门课程包含理论课件slides/AD-Security-101.pdf、实验环境搭建指南lab-setup/README.md和 8 个动手练习exercises/目录其中第 2、3 个练习正好聚焦 NTLM 的两大攻击。这套老协议为什么还值得死磕明文口令不出网参与验证的始终是哈希抓包嗅探只能看到无意义的字节哈希即凭证拿到 NTHash 就能冒充用户认证无需破解出明文密码认证可被转发NTLM 不绑定目标服务身份截获的认证能中继到更值钱的服务上NTLM 三步认证挑战与响应怎么完成一次验证把一次 NTLM 认证拆成报文看永远是三步固定流程客户端、服务器和密码哈希各演好角色。第一步协商——双方声明按什么规则玩客户端先发送协商消息声明支持的版本NTLMv1 还是 NTLMv2和签名、加密等能力选项。它决定了后续交互的规则双方能力谈不拢时会向保守一侧降级认证流程可能就此缩水。第二步挑战——服务器抛出随机数服务器收到协商消息后生成一个随机数发回客户端NTLMv1 用 8 字节NTLMv2 用 16 字节。随机数每次认证都不同攻击者即使截获本轮认证数据下一轮也无法重放——答案只对当次的问题有效。第三步响应与验证——用 NTHash 作答客户端用该用户的 NTHash 对挑战值加密运算生成 Response连同用户名发回服务器。服务器在域数据库里找到对应用户的哈希做同样运算。结果一致即认证成功哈希对不上则整体失败。NTLMv1 与 NTLMv2 差在哪8 字节换来的安全鸿沟响应消息的计算方式直接决定 NTLM 安不安全这是两个版本最大的分界线。NTHash MD4(密码的 UTF-16LE 编码)对比项NTLMv1NTLMv2响应算法基于 DES 加密挑战值基于 HMAC-MD5 的密钥散列服务器挑战8 字节16 字节上下文信息不含含时间戳与目标信息离线破解容易可上彩虹表较难但仍是诟病对象NTHash 本身则存在两个位置本地机器的 SAM 数据库以及域控制器的 NTDS.dit。v1 的响应像只回答42没有题号也没有时间截获后就能离线爆破v2 像回答周一 3 点第 7 题我算出 42上下文绑死重放就失效。所以任何场景下都应禁用 NTLMv1强制 NTLMv2。从机制到攻击两条经典 NTLM 攻击链理解了哈希怎么存就能理解攻击——因为验证全程只用哈希而哈希本身可以被拿走。Pass-the-Hash把哈希当门票使 adsec 项目第 2 个练习exercises/2-NTLM.md就是标准 PTH。先在已攻陷的机器上用 Mimikatz 提取本地账户哈希privilege::debug token::elevate lsadump::sam再把哈希直接塞进认证流程换回一个以该用户身份运行的 Shellsekurlsa::pth /user:Administrator /ntlm:hash /domain:doesnotmatter接着用 PsExec 连到另一台机器完成横向移动.\PsExec64.exe \\adsec-01 cmd这个练习藏着一个刻意设计的细节两台机器设置了相同的本地管理员密码NTLM 哈希因此完全一致——这正是企业里本地管理员密码不统一管理的典型隐患。NTLM Relay把钥匙转借给更值钱的大门 Relay 与 PTH 的区别在用人身份前者用自己偷来的哈希后者不动声色直接把受害者主动发起的认证转发到更值钱的服务。adsec 第 3 个练习exercises/3-NTLM-Relay.md演示完整链条用 Powermad 创建新计算机账户evilpc计算机账户自带 SPN为 Kerberos 委派做准备用 impacket 的ntlmrelayx.py启动中继目标指向域控的 LDAP用 SpoolSample 利用 MS-RPRN 的设计缺陷逼 adsec-01 主动发起认证中继成功后向受害者计算机对象写入msds-allowedtoactonbehalfofotheridentity属性evilpc$从此可借 S4U2Proxy 在该机器上冒充任意用户为第 6 个练习的 RBCD 铺路中继服务器把目标锚定在域控 LDAP 上ntlmrelayx.py --no-smb-server --delegate-access --escalate-user evilpc$ -t ldap://adsec-dc.contoso.com另一条命令则诱骗 adsec-01 向攻击者的打印服务发起认证.\SpoolSample.exe adsec-01 adsec-0080/foobar强制认证最难的一环为什么难 这条链每一步都依赖一个前提受害者必须主动向攻击者发起认证。攻击者不持有任何账户只负责埋陷阱。手段包括 MS-RPRN打印服务、MS-EFSRPCPetitPotam、WebDAV 等——只要有一个服务会由受害者主动连接就能当诱饵。这也是为什么哪怕只握着一个低权限域账户仍可能借 NTLM Relay 拿下整个域。防御 NTLM按优先级排好的五道闸门攻击链推得越透防御清单越好写。好消息是手段都很成熟工程上顺序比清单更重要——先上收益最大的。先部署 LAPS→ 每台机器使用独立的随机本地管理员密码 → PTH 横向移动依赖同一个哈希到处通用断根就断在这里强制 NTLMv2 并开启 SMB 签名→ 组策略把 LAN 管理器身份验证级别设为仅发送 NTLMv2 响应 → 挡住协议降级签名让中继请求无法落地对支持的服务启用 EPA 扩展保护→ 把认证绑定到具体 TLS 通道 → 认证无法在别的服务上重放打补丁并过滤高危 RPC 协议→ 在防火墙上封 MS-RPRN/MS-EFSRPC 的入口练习 3 的思考题就让你亲手写这个 RPC 过滤器评估能否彻底禁用 NTLM→ 用微软限制 NTLM策略按审计、限流入站出站、禁用的节奏走域里若还有老应用依赖 NTLM一刀切会断业务合理路线是逐步把认证迁到 Kerberos动手落地搭一套自己的 AD 攻击靶场光看文字容易懂把环境搭起来才真上手。adsec 的lab-setup/README.md提供两种建站方式本地手动搭三台 Windows Server 2019 虚拟机域控 ADSEC-DC 成员服务器 ADSEC-00/01或用 Terraform 一键部署到 Azure。在域控上执行create-domain.ps1建域再用这条命令一次生成用户、组和 OUcat -raw .\domainprepare.ps1 | iex环境就绪后按这条路线走序号主题文件路径1信息收集与侦察exercises/1-Reconnaissance.md2NTLM 与 Pass-the-Hashexercises/2-NTLM.md3强制认证与 NTLM Relayexercises/3-NTLM-Relay.md4Kerberos Roastingexercises/4-Kerberos-Roasting.md5Kerberos 经典委派exercises/5-Kerberos-Delegation.md6Kerberos RBCDexercises/6-Kerberos-RBCD.md7ACL 攻击exercises/7-ACL.md8权限持久化exercises/8-Persistence.md攻击工具打包在exercises/attacker-tools/下的两个 ZIP 里Mimikatz、PsExec、impacket、SpoolSample 都在解压密码 infected不用再到处找。做完这 8 个练习你不仅能复现每次攻击还能为它写出一条对应的防御配置——这才是能动手的标准。总结协议就是攻击面NTLM 的挑战与响应机制只有三步但背后牵着哈希存储、协议降级、认证中继、委派滥用四条线。从听说过 PTH到搭得起靶场、复现得了攻击、写得出现场防御配置认知差就在这一套闭环里。下一步不妨从第 3 个练习开始亲自走一遍完整的 NTLM Relay 攻击链你会真正体会到认证协议即攻击面这句话的分量 【免费下载链接】adsecAn introduction to Active Directory security项目地址: https://gitcode.com/gh_mirrors/ad/adsec创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考