01
前言
Hacker Fantastic 发布的报告揭示,Microsoft Telnet Server 存在严重的零点击远程身份验证绕过漏洞。该漏洞利用 Microsoft Telnet 身份验证协议(MS-TNAP)的缺陷,允许远程攻击者绕过身份验证机制,在无有效凭据的情况下直接获取管理员权限,对传统 Windows 系统构成重大安全威胁。
02
受影响的系统
安装 Microsoft Telnet 客户端时的所有 Windows 版本:
WindowsNT4.0Windows2000WindowsXPWindowsServer2003 Windows服务器2003WindowsServer2003 R2WindowsVistaWindowsServer2008 Windows服务器2008WindowsServer2008 R2Windows7WindowsServer2012 Windows服务器2012WindowsServer2012 R2Windows8Windows8.1Windows10WindowsServer2016 Windows服务器2016WindowsServer2019 Windows服务器2019WindowsServer2022Windows11WindowsServer2025
03
漏洞利用机制与攻击路径解析
03
漏洞利用机制与攻击路径解析
该漏洞的根源在于 Microsoft Telnet 客户端所采用的 MS-TNAP 身份验证协议。当 Windows 用户连接恶意 Telnet 服务器时,无论是手动建立连接,还是点击嵌入在电子邮件、网页或文档中的特制 telnet:// 超链接,客户端都会触发身份验证流程。
在安全策略配置层面,若服务器处于 Intranet 或受信任区域,或者系统策略启用静默身份验证,Windows 系统会在无任何提示或用户确认的情况下,自动传输用户的 NTLM 身份验证数据。而处于 Internet 区域时,系统会在发送凭据前向用户发出提示;处于内联网 / 受信任站点区域,凭据则可能直接自动发送,用户对此毫无察觉。比如,输入 “192.168.1.1” 这类未指定协议头(http://)的 IP 地址,意味着主机默认信任 Telnet 等所有协议,而非仅针对 Web 流量,这无疑为攻击者提供了可乘之机。
攻击者可按以下步骤利用该漏洞:
-
1. 搭建恶意 Telnet 服务器:构建用于截获用户身份验证数据的恶意服务器。 -
2. 实施钓鱼诱骗:通过网络钓鱼邮件、恶意网页等方式,诱使用户点击特制的 telnet:// 链接。 -
3. 捕获 NTLM 哈希:在用户连接服务器触发身份验证时,获取客户端传输的 NTLM 哈希值。 -
4. 破解与入侵:利用捕获的哈希值,实施 NTLM 中继攻击,或使用 Hashcat 等工具进行离线破解,进而访问敏感系统和数据。 -
04
概念验证和漏洞代码
在https://github.com/hackerhouse-opensource/telnetclientpoc中,提供了一个概念验证(PoC)项目,它揭示了 Microsoft Telnet 客户端所采用的 MS-TNAP 身份验证协议存在的严重漏洞。
工具编译
下载工具源码
https://github.com/hackerhouse-opensource/telnetclientpoc.git
使用 Visual Studio C++ 编译器手动进行编译,或者使用带有“nmake”、“nmake static”和“nmake clean”的 Makefile。
cl telnetclientpoc.cpp getopt.cpp stdafx.cpp /EHsc /MT ws2_32.lib secur32.lib
命令行选项
telnetclientpoc.exe [-d domain] [-s server] [-c challenge] [-o logfile]
- -d domain: Set the domain name (default: WIN2K3)-d domain :设置域名(默认:WIN2K3)
- -s server: Set the server name (default: WIN2K3)-s server :设置服务器名称(默认:WIN2K3)
- -c challenge: Set a custom NTLM challenge (8 bytes as hex string)-c challenge :设置自定义 NTLM 挑战(8 个字节的十六进制字符串)
- -o logfile: Set a custom log file path (default: telnetclientpoc.log)-o logfile :设置自定义日志文件路径(默认值:telnetclientpoc.log)
漏洞复现步骤
第一步,在完成工具编译后,执行该工具并使其监听 23 端口。在命令行中输入以下指令:
C:> telnetclientpoc.exe
此时,会显示 “Server listening on port 23...”,表示工具已成功启动并监听 23 端口。
第二步,接下来进行漏洞复现操作,可通过构造 telnet:// 链接,或者直接使用 telnet 工具连接到目标服务器。值得注意的是,当连接到 Telnet 服务器时,Windows 系统会依据不同的安全区域对服务器进行检查,其行为如下:
- Internet 区域:在发送凭据之前,系统会向用户弹出警告提示,需用户确认是否继续发送。
- 内联网区域:系统可以在不向用户发出任何提示的情况下,静默发送凭据。
- 受信任的站点:同样可能在未经提示的情况下,自动默默发送凭据。
当客户端连接时,应用程序:
-
1. 将详细的 NTLM 身份验证步骤记录到 telnetclientpoc.log -
2. 在 netntlmv2.hash 文件中捕获 NetNTLMv2 哈希值,在 ntlmv1.hash 中捕获 NTLMv1 哈希值 -
3. 在控制台上提供详细的调试输出
原文始发于微信公众号(应龙御甲实验室):Microsoft Telnet 客户端 MS-TNAP 服务器端身份验证令牌漏洞(完整版复现)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论