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管理器。
 

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身份验证方法。
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有效)
7.重新启动机器。

NTLM 了解的更多相关文章

  1. iOS进行Basic认证与NTLM认证

    一.iOS进行Basic认证 只需要在NSMutableURLRequest的Header中添加认证所需的Username和password. NSMutableURLRequest *webReq ...

  2. maven integration with eclipse 3.0.4 does not work with NTLM proxy

    Recently downloaded m2e(maven integration with eclipse). The version is 3.0.4. My environment is beh ...

  3. HTTP 请求未经客户端身份验证方案“Anonymous”授权。从服务器收到的身份验证标头为“Negotiate,NTLM”

    转自:http://www.cnblogs.com/geqinggao/p/3270499.html 近来项目需要Web Service验证授权,一般有两种解决方案: 1.通过通过SOAP Heade ...

  4. [转]NTLM身份验证

    链接:http://www.360doc.com/content/12/0615/14/10216164_218320534.shtml 在允许的环境下,Kerberos是首选的认证方式.在这之前,W ...

  5. Kerberos和NTLM - SQL Server

    当我们使用Windows Authentication去连接SQL Server的时候,SQL Server可能会使用Kerberos或者是NTLM来进行认证,有时间就会因为认证失败的缘故造成各种登录 ...

  6. python 通过ntlm验证下载文件

    最近使用python实现一个小工具,需要从网站下载文件,下载时服务端需要进行ntlm验证,否则返回401错误响应.经研究 requests库配合 requests-ntlm 可以解决这个问题. ntl ...

  7. HTTP使用BASIC认证的原理及实现方法(还有NTLM方法,比较复杂)

    一.   BASIC认证概述 在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份证的方法,当一个客户端向HTTP服务 器进行数据请求时,如果客 ...

  8. 免费MD5解密网站,轻松破解md5密码,mysql5/mysql323,ntlm,salt密码

    md5解密网站:http://cmd5.la 网站语言:php 免费指数:★★★        (8位内小写数字字母免费,11位内数字免费) 解密范围:★★★★☆ (覆盖了1-12位很多常用密码和特殊 ...

  9. 基于USB网卡适配器劫持DHCP Server嗅探Windows NTLM Hash密码

    catalogue . DHCP.WPAD工作过程 . python Responder . USB host/client adapter(USB Armory): 包含DHCP Server . ...

  10. [转帖]Kerberos和NTLM - SQL Server

    Kerberos和NTLM - SQL Server https://www.cnblogs.com/dreamer-fish/p/3458425.html 当我们使用Windows Authenti ...

随机推荐

  1. 『cs231n』作业3问题4选讲_图像梯度应用强化

    [注],本节(上节也是)的model是一个已经训练完成的CNN分类网络. 随机数图片向前传播后对目标类优化,反向优化图片本体 def create_class_visualization(target ...

  2. Jenkins安装以及邮件配置

    Jenkins介绍 Jenkins是一个java开发的.开源的.非常好用持续集成的工具,它能帮我们实现自动化部署环境.测试.打包等等的工作,还可以在构建任务成功或者失败之后给我们发邮件通知. 什么叫持 ...

  3. python-day16--内置函数

    内置函数操作 #!usr/bin/env python # -*- coding:utf-8 -*- # 1.locals()和globals() # def func(): # x=1 # y=2 ...

  4. oracle12c中新能优化新特性之热度图和自动数据优化

    1. Oracle12c热度图和自动数据优化 信息生命周期管理(ILM)是指在数据生命周期内管理它们的策略.依赖于数据的年龄和对应用的业务相关性,数据能被压缩,能被归档或移到低成本的存储上.简言之,I ...

  5. JavaScript学习总结(九)——Javascript面向(基于)对象编程

    一.澄清概念 1.JS中"基于对象=面向对象" 2.JS中没有类(Class),但是它取了一个新的名字叫“原型对象”,因此"类=原型对象" 二.类(原型对象)和 ...

  6. Python Django 之 Views HttpRequest HttpReponse

    一.Python Django 之 Views 数据交互 http请求中产生两个人核心对象: http请求:HttpRequest对象 http响应:HttpReponse对象 所在位置django. ...

  7. Spring-data-jpa详解

    转自:http://www.cnblogs.com/dreamroute/p/5173896.html

  8. C++11标准的类型别名

    1.typedef 类型名  类型别名(类型别名列表):这是传统的C++类型别名声明. 2.C++11标准下,使用using,即using 类型别名=类型名.

  9. DevExpress v18.1新版亮点——WinForms篇(六)

    用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WinForms v18.1 的新功能,快来下载试用新版本! ...

  10. L221

    Hyundai has shown off a small model of a car it says can activate robotic legs to walk at 3mph (5km/ ...