首页 > 代码库 > NTLM 了解

NTLM 了解

NTLM是NT LAN Manager的缩写,这也说明了协议的来源。NTLM 是 Windows NT 早期版本的标准安全协议,Windows 2000 支持 NTLM 是为了保持向后兼容。Windows 2000内置三种基本安全协议之一。
 

1

早期SMB协议在网络上传输明文口令。后来出现 LAN Manager Challenge/Response 验证机制,简称LM,它是如此简单以至很容易就被破解。微软提出了WindowsNT挑战/响应验证机制,称之为NTLM。现在已经有了更新的NTLMv2以及Kerberos验证体系。NTLM是windows早期安全协议,因向后兼容性而保留下来。NTLM是NT LAN Manager的缩写,即NT LAN管理器。
NTLM

NTLM

 

2工作流程

从Win2000开始默认协议为Kerboros,下列情况会调用NTLM:
遗留客户端或服务器需要登录到网络或本地时。
UNIX客户端需要与NT服务器通话时。
有正在使用验证NTLM的服务器信息块(SMB)后台程序的UNIX客户端时。
也即认证方或被认证方有仅支持NTLM情况时。
它以挑战/响应(Challenge/Response)顺序为基础。
1.客户端发送用户名和域名到服务器。
2.服务器转发到域控制器DC。
3.DC用客户端密码随机产生一个8字节得挑战(Challenge),发送给服务器。
4.服务器将挑战转发给客户端。
5.客户端用密码经过hash及DES加密算法等操作得到一个加密结果响应(Response)发送给服务器。
6.服务器将响应转发给DC。
7.DC做同样操作验证客户端响应。
8.验证结束,返回结果通知服务器。
 

3身份验证

从工作流程我们可以看出,NTLM是以当前用户的身份向Telnet服务器发送登录请求的,而不是用你自己的帐户和密码登录,显然,你的登录将会失败。举个例子来说,你家的机器名为A(本地机器),你登录的机器名为B(远地机器),你在A上的帐户是ABC,密码是1234,你在B上的帐号是XYZ,密码是5678,当你想Telnet到B时,NTLM将自动以当前用户的帐号和密码作为登录的凭据来进行上面的7项操作,即用ABC和1234,而并非用你要登录帐号XYZ和5678,且这些都是自动完成的,根本不给你动手的机会,因此你的登录操作将失败。
NTLM身份验证选项有三个值。默认是2。可以有下面这些值:
0:不使用NTLM身份验证。
1:先尝试NTLM身份验证,如果失败,再使用用户名和密码。
2:只使用NTLM身份验证。
Telnet服务器使用NTLM的有3选项之一时,客户机会显示下面情况中的一种:
1)身份验证选项=0时
Microsoft (R) Windows (TM) Version 5.00 (Build 2195)
Welcome to Microsoft Telnet Service
Telnet Server Build 5.00.99201.1
login:
password:
NTLM身份验证选项为0时不使用NTML身份验证,直接输入用户名和密码,比如你可以输入自己的登录帐号密码XYZ和5678。
2)身份验证选项=1时
NTLM Authentication failed due to insufficient credentials. Please login withclear text username and password
Microsoft (R) Windows (TM) Version 5.00 (Build 2195)
Welcome to Microsoft Telnet Service
Telnet Server Build 5.00.99201.1
login:
password:
这时先尝试NTLM身份验证,如果失败,再使用用户名和密码,其实这种方式对于我们来说,与上一种方式没什么区别。
3)身份验证选项=2时,就是我们一开始遇到的现象。
对NTLM身份验证选项值的改变可以使用Win2000为我们提供Telnet服务器管理程序tlntadmn.exe;其实Win2000同时为我们提供了Telnet客户机和服务器程序:Telnet.exe是客户机程序(Client),tlntsvr.exe是服务器程序(server),及Telnet服务器管理程序tlntadmn.exe。若我们不需要NTLM身份验证可以按以下步骤设置:
1、单击“开始”—>;“运行“,键入tlntadmn,然后确定
2、在弹出的选项中选择Display,再选择Change Registry Settings。
3、选择NTLM。
4、改变NTLM值为0不使用NTML身份验证
5、重新启动Telnet服务器。
其实也可以使用tlntadmn.exe对Telnet服务的其他默认设置来进行配置,配置后需要重新启动Telnet服务。
AllowTrustedDomain:是否允许域用户访问。默认值是1,允许信任域用户访问。可以改为0:不允许域用户访问(只允许本地用户)。
DefaultDomain:可以对与该计算机具有信任关系的任何域设置。默认值是"."。
DefaultShell:显示shell安装的路径位置。默认值是:%systemroot%\System32\Cmd.exe /q /k
MaxFailedLogins:在连接终止之前显示尝试登录失败的最大次数。默认是3。
LoginScript:显示Telnet服务器登录脚本的路径位置。默认的位置就是“%systemroot%\System32\login.cmd”,你可以更改脚本内容,这样登录进Telnet的欢迎屏幕就不一样了。
TelnetPort:显示telnet服务器侦听telnet请求的端口。默认是:23。你也可以更改为其他端口。
因此NTLM也是Windows 2000的一种重要安全策略,对于入侵者来说,NTLM就是横在面前的一座大山,哪怕你获得了管理员帐号和密码,想简单通过NTLM也并非易事,况且win2000中的telnet默认仅以NTLM方式验证身份,当然道高一尺,魔高一丈,作为网络管理员,不是说有了NTLM保护,就可以高枕无忧了,对于网络高手或黑客来说,时刻在扑捉系统漏洞和管理员疏忽,要突破NTLM的封锁,常见的有以下几种方法:
1、通过修改远程注册表更改telnet服务器配置,将验证方式从2改为1或0;
2、使用NTLM.exe,上传后直接运行,可将telnet服务器验证方式从2改为1;
3、在本地建立扫描到的用户,以此用户身份开启telnet客户机并进行远程登录;
4、使用软件,比如opentelnet.exe(需要管理员权限且开启IPC管道)
5、使用脚本,如RTCS,(需要管理员权限但不依赖IPC管道)
基本上是以上的5种,其中后两种是我们比较常用的开telnet的手法,而且使用方法十分简单,命令如下:
OpenTelnet.exe \\server username password NTLMAuthor telnetport
OpenTelnet.exe \\服务器地址 管理员用户名 密码 验证方式(填0或1) telnet端口
cscript RTCS.vbe targetIP username password NTLMAuthor telnetport
cscript RTCS.vbe
 

4禁用验证

Windows NT Servers Service Pack 4和后续的版本都支持三种不同的身份验证方法:LanManager (LM)身份验证;Windows NT(也叫NTLM)身份验证;Windows NT Version 2.0(也叫NTLM2)身份验证。
默认的情况下,当一个客户尝试连接一台同时支持LM和NTLM身份验证方法的服务器时,LM身份验证会优先被使用。所以建议禁止LM身份验证方法。
1.打开注册表编辑器;
2.定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa;
3.选择菜单“编辑”,“添加数值”;
4.数值名称中输入:LMCompatibilityLevel,数值类型为:DWORD,单击确定;
5.双击新建的数据,并根据具体情况设置以下值:
0-发送LM和NTLM响应;
1-发送LM和NTLM响应;
2-仅发送NTLM响应;
3-仅发送NTLMv2响应;(Windows 2000有效)
4-仅发送NTLMv2响应,拒绝LM;(Windows 2000有效)
5-仅发送NTLMv2响应,拒绝LM和NTLM;(Windows 2000有效)
6.关闭注册表编辑器;
7.重新启动机器。