Almost all notes are from hackndo
https://en.hackndo.com/ntlm-relay/
NTLM(新技术局域网管理器)是一种用于在使用 Windows 服务时确认用户身份的协议。 身份验证通过客户端和目标服务器之间的直接通信进行,通常称为 NTLM 质询/响应。 NTLM 协议包含在大多数常用协议中,例如 HTTP、SMB、FTP、SQL、LDAP……
而NTLM Relay扮演着中间人(MiTM)的角色,可以拦截并重放客户端和服务器之间的所有通信。
在本文中,我将介绍 NTLM Relay 的工作原理以及在攻防中的对抗。
NTLM身份验证基于零知识证明。它涉及三条消息:协商、质询和身份验证。
显然,在这个流程中,中间人中继攻击很容易发生。攻击者只需在客户端和服务器之间来回中继 NTLM 消息,直到服务器为客户端建立会话,从而允许攻击者执行客户端可以在服务器上执行的任何操作。
SSPI 接口(即安全支持提供程序接口)是由 Microsoft 提出的一种接口,用于标准化身份验证,无论使用哪种身份验证类型。不同的软件包可以连接到此接口来处理不同类型的身份验证。 SSPI 接口提供了多个函数,包括 AcquireCredentialsHandle、InitializeSecurityContext 和 AcceptSecurityContext。 在 NTLM 身份验证期间,客户端和服务器都将使用这些函数。
由于API的存在,windows实际上并不关心传递的三条信息,整个过程允许这种不透明的结构(NEGOTIATE、CHALLENGE、RESONSE)以某种方式传递,且无论以什么协议他们都可以正常工作。
这一点表明应用层(HTTP、SMB、SQL 等)与身份验证层(NTLM、Kerberos 等)完全独立,也就是身份验证过程并不会在意数据包的应用层协议,这也就导致了跨协议中继的可能,如HTTP→SMB。
基础HTTP请求像这样