当前位置:

首页 > 软件教程 > NTLM协议工作原理详解

NTLM协议工作原理详解

NTLM协议在WindowsNT和Windows2000Server(或更高版本)的工作组环境中使用(Kerberos用于域模式下)。在AD域环境中,若需要验证WindowsNT系统,必须使用NTLM。与Kerberos相比,NTLM认证过程更为简单。NTLM采用挑战/响应(Challenge/Response)消息交换模式,以下是NTLM的认证流程:NTLM认证协议可用于多种协议中,例如HTTP、SMB等。以下通过HTTP协议来说明其具体认证流程:首先,

本文目录

    NTLM 协议在 Windows NT 和 Windows 2000 Server(或更高版本)的工作组环境中使用(Kerberos 用于域模式下)。

    在 AD 域环境中,若需要验证 Windows NT 系统,必须使用 NTLM。与 Kerberos 相比,NTLM 认证过程更为简单。NTLM 采用挑战/响应(Challenge/Response)消息交换模式,以下是 NTLM 的认证流程:

    轻松理解 NTLM 协议工作流程NTLM 认证协议可用于多种协议中,例如 HTTP、SMB 等。以下通过 HTTP 协议来说明其具体认证流程:

    首先,我们需要选择一个目标,也可以自己搭建一个基于域的 401 认证服务。我这里选择了一个实际的环境进行测试,通常 Exchange 邮件服务器会有 EWS 接口,我们可以随意选择一个进行测试。

    在 Bing 上使用语法搜索:

    找一个使用 Exchange 搭建的邮件服务器,并且支持 HTTP,因为转包查看时,HTTPS 经过加密的包不太容易分析。我找到了一个:

    轻松理解 NTLM 协议工作流程启动 Wireshark,然后访问上述链接,随机输入账号和密码,点击登录后,会得到一些 HTTP 数据包,如图:

    轻松理解 NTLM 协议工作流程验证流程分为三步:第一步,获取服务器的基本信息,例如认证协议、服务器版本,如图:

    轻松理解 NTLM 协议工作流程第二步,获取服务器返回给客户端的挑战值,如图:

    轻松理解 NTLM 协议工作流程这个值在后面的数据校验中会使用,这里先不详细介绍。

    第三步,根据前面获取的数据,组合后提交给服务器,在服务器端进行验证。

    轻松理解 NTLM 协议工作流程这里的 NTProofStr 是一个用于数据验签的哈希值,确保前面获取的挑战和后面的数据是完整且未经修改的。

    我们将上图中 NTLMv2 的响应值复制并处理如下:

    最前面的 32 个字符就是验证数据完整性的哈希值,也就是 NTProofStr 的值,后面的数据中包含了一些服务器的信息,如图:

    轻松理解 NTLM 协议工作流程这些数据是第三步的请求阶段,即客户端提交给服务器的数据,服务器将使用这些数据进行验证,判断是否通过。

    验签哈希如何产生?从上面我们看不到账号密码信息在哪里发挥作用,下面我们来看看具体账号密码在哪里被使用,以及在哪里发挥作用。

    在内网渗透时,我们经常会捕获本地密码,本地存储的哈希就是用户密码经过一系列加密后的结果,具体加密方式如下:

    函数解释:hex 用于将字符串转换为十六进制值、unicode 用于将字符串转换为双字节字符串、md4 为 md4 哈希。

    以下是用 Python 编写的关键函数代码示例:

    hex 函数:

    def str_to_hex(s):  
        return ' '.join([hex(ord(c)).replace('0x', '') for c in s])

    转双字节函数:

    def hex_to_unicode(hex_str):  
        hex_str_ = hex_str.replace(" ","00")+"00"  
        return hex_str_

    md4 哈希函数:

    from Crypto.Hash import MD4
    def str_to_md4(str_):  
        m = MD4.new()  
        m.update(str_)  
        return m.hexdigest()

    仅有密码是不够的,如何将用户名和域信息用上呢?这里涉及到一个 NTLMv2 HASH,具体算法如下:

    关键函数:upper 用于将字符串全部转换为大写字母、md5 用于将 NTLM 的哈希作为盐,对用户名和域组合的信息进行 md5 哈希。

    md5 哈希函数:

    import hmac
    import hashlib
    def str_to_hmac_md5(passwd_,salt_):  
        h_md5 = hmac.new(salt_, passwd_, hashlib.md5).hexdigest()  
        return h_md5

    从上面的过程来看,最后得到的 NTLMv2 HASH 包含了账号、密码和域的信息,如果任何一个因素有问题,整个验证就不会成功,那么这个哈希在后面如何使用呢?

    服务器如何验证客户端提交的信息?在最后一步,客户端提交的信息包括:

    签名哈希 NTProofStr 用于验证数据完整性,数值为:c9ce34e95466b7e956dd63da0b17e2e8

    还有一串数据,在上面已经提供,前面的 32 位字符串就是上面的签名哈希,去掉之后就是服务器相关的数据,提取出来如下:

    在之前第二步时,获得了一个挑战值: e8fd1257ab09ae57

    到这里,所有需要的数据都有了,那么这些数据之间有什么关系呢?主要是签名的获取算法,公式如下:

    理解起来也很简单,就是将第二步的挑战值和服务器的数据连接起来,使用包含账号密码域信息的哈希作为盐进行 md5 哈希后的结果就是签名值,我们用一个小巧的计算器来计算一下:

    轻松理解 NTLM 协议工作流程

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程
    相关文章 更多
    .NET 获取图片宽高方法及性能对比
    .NET 获取图片宽高方法及性能对比

    在.NET框架中获取图片宽高有多种方法,本文将详细介绍四种方法,并对其性能进行评估。如果您需要处理大量图片,这些信息将非常有用。本文将评估以下四种方法来获取图片的宽高:System.Drawing.Imaging.Metafile不要误以为Metafile是图片的元数据,它实际上是微软Windows系统的一种图片格式,如WMF和EMF(WindowsMetafile和EnhancedMetafile)。虽然它可以读取其他格式的图片,但不适合通过读取元数据头来提升性能。varheader=Meta

    VS Code基础操作教程详解
    VS Code基础操作教程详解

    如何彻底卸载VSCode并清除所有用户数据?要实现此目的,您需要删除与VSCode相关的用户数据文件夹Code和.vscode。这样可以使您的系统恢复到安装VSCode之前的状态。如果您不打算卸载VSCode,也可以通过删除这些文件夹来重置所有设置。不同操作系统下的文件夹路径如下:Windows:删除%APPDATA%\Code和%USERPROFILE%\.vscode。macOS:删除$HOME/Library/ApplicationSupport/Code和~/.vscode。Linux:

    死磕 IO 流?你磕对了吗
    死磕 IO 流?你磕对了吗

    在日常开发中,我们经常会接触到IO流,例如在处理文件上传下载、数据传输以及设计模式等方面。IO流是这些操作的基础,因此今天我们将深入探讨Java中IO流的相关知识点。本文将涵盖以下主要内容:文件对象流概述字节流与字符流文件对象与文件路径Java标准库java.io提供了File对象,用于操作文件和目录。通过File对象,我们可以将文件和目录封装成对象。构造File对象时,需要提供文件或目录的路径名,常用的构造方法如下:方法描述File(StringpathName)通过给

    PCIe中断驱动寄存器被覆盖问题排查与修复
    PCIe中断驱动寄存器被覆盖问题排查与修复

    在Windows环境下使用WDF框架开发PCIe驱动的DMA读写功能时,启动一次DMA传输需要两个步骤:初始化DMA传输对象:在初始化DMA传输对象时,应将本次DMA传输的数据缓冲区的地址和长度写入该对象,并向其注册用于配置并启动DMA传输的回调函数PCIeEvtProgramWriteDma。该回调函数会获取缓冲区地址和长度,通过PIO方式配置PCIeBar空间上的寄存器,以通知硬件启动DMA传输。执行DMA传输:在执行DMA传输时,驱动仅需调用WDF框架的WdfDmaTransactionExecu

    Pytest跳过用例技巧:skip与skipif详解
    Pytest跳过用例技巧:skip与skipif详解

    如果你还想从头学起Pytest,可以看看这个系列的文章哦!https://www.cnblogs.com/poloyy/category/1690628.html前言可以标记无法在某些平台上运行的测试功能,戒者您希望失败的测试功能pytest.mark.skip希望满足某些条件才执行某些测试用例,否则pytest会跳过运行该测试用例实际常见场景:跳过非Windows平台上的仅Windows测试,或者跳过依赖于当前不可用的外部资源(例如数据库)的测试@pytest.mark.skip跳过执行测试用例,有

    Qt数据看板布局另存方法详解
    Qt数据看板布局另存方法详解

    一、前言布局另存功能是数据可视化大屏界面电子看板系统中的一项便捷功能,旨在帮助用户在现有布局上进行微调后,直接将其保存为新的配置文件,从而避免从头开始重新构建布局的繁琐过程。此功能依赖于配置文件的保存机制,通过将现有布局另存为不同名称的配置文件,用户可以轻松管理和切换不同的布局设置。在代码实现上,Qt的QSettings类提供了极大的便利,不仅支持Windows注册表的读写操作,还支持跨平台的INI文件格式。个人而言,我更倾向于使用INI文件作为配置文件,因为其跨平台特性特别适合我在嵌入式Linux环境下

    Qt输入法V2019项目作品分享
    Qt输入法V2019项目作品分享

    一、功能特点本输入法未采用Qt系统层输入法框架,而是采用了独创的输入切换机制。完全基于QWidget编写,适用于任何目标平台(已测试Windows、Linux、嵌入式Linux等),兼容任意Qt版本(已测试从Qt4.6.0到Qt5.13),支持任意编译器(已测试mingw、gcc、msvc等),并能在任意控件中输入,包括网页中的输入控件。调用非常方便,只需在pro文件中包含pri文件,例如:include($$PWD/input2019/input2019.pri)。界面设计简洁明了,UI美观友好,模仿I

    MySQL解压版Windows安装教程
    MySQL解压版Windows安装教程

    MySQL解压版如何在Windows系统中安装1、请将压缩包中的软件包解压出来,并复制到所要安装的路径下面。2、在安装路径下面软件包内新建两个文件,data目录和my.ini文件。3、在my.ini内更改安装位置,注意版本,文件已放置于压缩包中。代码语言:javascript代码运行次数:0运行复制[client]port=3306default-character-set=utf8[mysqld]#设置mysql的安装目录basedir=E:\MySQL\mysql-5.7.26-winx64#设置

    报错:缺少 Microsoft.ReportViewer.Common 11.0.0.0 解决方法
    报错:缺少 Microsoft.ReportViewer.Common 11.0.0.0 解决方法

    在开发WinForm客户端软件时,使用rdlc进行报表生成并通过ReportViewer展示报表时,开发者的机器上运行正常,但部署到第三方机器上时可能会遇到以下几种错误:(1)未能加载文件或程序集“Microsoft.ReportViewer.Common,Version=11.0.0.0,Culture=neutral,PublicKeyToken=89845dcd8080cc91”或它的某一个依赖项。系统找不到指定的文件。文件名:“Microsoft.ReportViewer.Common,V

    Windows 8配置Eclipse与Hadoop2.2.0环境指南
    Windows 8配置Eclipse与Hadoop2.2.0环境指南

    图文详解如何在Windows8.0上的Eclipse4.4.0中配置CentOS6.5上的Hadoop2.2.0开发环境,供有需要的朋友参考学习。Eclipse的Hadoop插件下载地址:https://github.com/winghc/hadoop2x-eclipse-plugin下载压缩包后,解压并将hadoop-eclipse-kepler-plugin-2.2.0.jar文件放置到Eclipse的dropins目录中,重启Eclipse即可。进入Windows->Prefere

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。