作者:功民昌 | 来源:互联网 | 2024-12-24 11:20
在网络管理工作中,启用 TELNET 登录服务是一个常见的任务。最近,我在一台 Windows 2000 服务器上启用了 TELNET 服务,并通过 NAT 主机映射到外网进行访问。然而,在尝试从外部网络登录时,遇到了以下错误提示:
NTLM 身份验证由于凭据不足而失败。请使用明文用户名和密码登录。
服务器仅允许 NTLM 身份验证。
服务器已关闭连接。
最初,我怀疑是 NAT 映射的问题,经过多次排查后,最终在网络上找到了相关资料并解决了问题。
Telnet 和 NTLM 密不可分,尤其是在安全方面。即使你获得了管理员账户和密码,想简单通过 NTLM 进行身份验证也并非易事。Windows 2000 的 Telnet 默认仅以 NTLM 方式验证身份,因此了解 NTLM 是至关重要的。
NTLM(NT LAN Manager)是一种用于 Windows 网络的身份验证协议。早期的 SMB 协议在网络上明文传输口令,后来出现了 LM(LAN Manager Challenge/Response)验证机制,它十分简单且容易被破解。微软随后提出了更安全的 Windows NT 挑战/响应验证机制,即 NTLM。现在已有更新的 NTLMv2 和 Kerberos 验证体系。
NTLM 的工作流程如下:
1. 客户端首先在本地加密当前用户的密码生成密码散列。
2. 客户端向服务器发送未加密的用户名。
3. 服务器生成一个 16 位随机数作为 challenge 发送给客户端。
4. 客户端用加密后的密码散列加密这个 challenge 并返回给服务器作为 response。
5. 服务器将用户名、challenge 和 response 发送到域控制器。
6. 域控制器用 SAM 密码管理库中的用户密码散列加密 challenge。
7. 域控制器比较两次加密的 challenge,如果一致则认证成功。
从上述过程可以看出,NTLM 使用当前用户的身份向 Telnet 服务器发送登录请求,而不是用你获取的管理员账户和密码。例如,如果你在本地机器 A 上的账户是 xinxin,密码是 1234,而你要入侵的远程机器 B 的管理员账户是 Administrator,密码是 5678,当你尝试 Telnet 到 B 时,NTLM 会自动使用 xinxin 和 1234 作为登录凭据,导致登录失败。
Telnet 服务器对 NTLM 的使用有三个选项:
1) 当身份验证选项为 0 时,不使用 NTLM 身份验证,直接输入用户名和密码。
2) 当身份验证选项为 1 时,先尝试 NTLM 身份验证,如果失败再使用用户名和密码。
3) 当身份验证选项为 2 时,仅允许 NTLM 身份验证,若失败则直接断开连接。
对于需要绕过 NTLM 验证的情况,可以采取以下几种方法:
1. 通过修改远程注册表更改 Telnet 服务器配置,将验证方式从 2 改为 1 或 0。
2. 使用 NTLM.exe 工具,上传后直接运行,可将 Telnet 服务器验证方式从 2 改为 1。
3. 在本地建立扫描到的用户,并以此用户身份开启 Telnet 客户端进行远程登录。
4. 使用软件如 OpenTelnet.exe(需要管理员权限且开启 IPC 管道)。
5. 使用脚本如 RTCS(需要管理员权限但不依赖 IPC 管道)。
这些方法中,最后两种较为常用,命令格式如下:
OpenTelnet.exe \server username password NTLMAuthor telnetport
cscript RTCS.vbe targetIP username password NTLMAuthor telnetport