前言

LAN Manager 和 NT LAN Manager 认证是Windows系统中的一种挑战-响应身份验证机制。LM认证是早期Windows版本中使用的一种认证协议,而NTLM是LM的改进版本,安全性比LM要高一些。

LM Hash

LM Hash是LM协议认证的凭证,但是LM采用密码散列形式安全性不好。所以从Windows Vista和Windows Server 2008版本开始,Windows系统默认禁用了LM Hash。

LM Hash的产生过程:

假设密码为123456那么它所对应的LM Hash的产生过程如下:

  1. 首先对密码进行大写转换:123456 -> 123456

  2. 转换为16进制字符串:123456 -> 313233343536

  3. 密码不足14字节要求用0补全:313233343536(6bytes)-> 3132333435360000000000000000(14bytes)

  4. 密码分割成两个7个字节长的段:31323334353600 00000000000000

  5. 分别转换成比特串,若长度不足56bits使用0在左边补齐长度:

31323334353600 -> 00110001001100100011001100110100001101010011011000000000
00000000000000 -> 00000000000000000000000000000000000000000000000000000000
  1. 每7bits分为一组,每组末尾加0,再组成一组,转换成16进制:
0011000010011000100011000110011001000010101010001101100000000000 -> 40a0d0862298d000
0000000000000000000000000000000000000000000000000000000000000000 -> 0000000000000000
  1. 分别作为key对 KGS!@#$% 进行DES加密:44efce164ab921ca aad3b435b51404ee

  2. 将两组DES加密后的字符串拼接得到最终的32位的十六进制数字串:44efce164ab921caaad3b435b51404ee

LM加密算法存在的缺陷:

  • LM Hash对密码的长度有限制,只考虑前14个字符,并且会对密码进行大写转换

  • 采用的加密方式是分组的DES加密,所以如果密码强度是小于等于7位,那么加密后的结果的后半部分就会是固定的aad3b435b51404ee

  • 分组加密极大程度降低了密码的复杂度,DES算法强度低

NTLM Hash

为了解决LM协议认证中固有的安全缺陷,Microsoft于1993年在Windows NT 3.1中引入了NTLM协议。

NTLM Hash的产生过程:

假设密码为123456那么它所对应的NTLM Hash的产生过程如下:

  1. 首先对密码进行十六进制转换:123456 -> 313233343536

  2. 转换成Unicode格式(每个字节之后添加0x00):313233343536 -> 310032003300340035003600

  3. 使用MD4摘要算法对Unicode编码数据进行Hash散列,生成32位的十六进制数字串:32ed87bdb5fdc5e9cba88547376818d4

import hashlib
import binascii # 进行Unicode编码
a = "123456".encode("utf-16le")
# 计算MD4散列值
b = hashlib.new("md4", a)
print(binascii.hexlify(b.digest()))
b'32ed87bdb5fdc5e9cba88547376818d4'

对所获取的Unicode字符串进行标准MD4单向哈希,总会固定产生128bits的哈希值。

可以看到NTLM Hash明显比LM Hash要安全一些,因为无法根据NTLM Hash判断出原始明文密码的密码强度是否小于等于7位。

Windows本地认证

在Windows系统中,登录密码不是直接明文存储,而是会计算成哈希值存储。

本地用户的密码被加密存储在 C:\Windows\System32\config\SAM 文件中。当用户登录Windows时,系统会自动地读取SAM文件中的哈希值与我们输入的密码(哈希运算后的)进行比对,如果相同则认为认证成功。

在Windows内部运行流程大致如下:winlogon.exe -> 接收用户输入 -> lsass.exe -> 认证

LSASS进程

LSASS是用户登录验证、密码更改、安全策略管理和其他安全相关操作的核心组件。当用户尝试登录Windows系统时,LSASS进程负责验证用户的凭据。

lsass.exe进程用来处理用户输入的密码,进程将密码计算成NTLM Hash与SAM进行比对,所以lsass.exe会在内存中短暂存储密码信息。

Mimikatz抓取明文密码

mimikatz是一个调试神器,最常用的功能就是抓取明文或Hash。

上面提到lsass.exe在认证的过程中,会在内存中短暂存储密码信息。所以就可以使用Mimikatz来抓取密码信息。然而从Windows 8.1和Windows Server 2012 R2开始,lsass.exe不再默认存储用户的明文密码,而是以加密形式存储。

所以如果尝试使用Mimikatz直接从lsass.exe进程中提取明文密码,密码字段会显示为null。

如果仍想使用Mimikatz抓取明文密码,需要修改注册表设置以强制lsass.exe存储明文密码。然后还需要用户重新登录,之后Mimikatz才可能抓取到明文密码。

Mimikatz需要管理员权限:

privilege::debug  提升权限
sekurlsa::logonpasswords 抓取密码

需要修改注册表:

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

修改注册表之后,需要用户注销或者重启重新登陆之后才会生效。

还有其他的方式,比如使用procdump把lsass.exe进程的内存dump下来,然后mimikatz进行读取内容。

Windows网络认证

在Windows系统中,网络认证协议主要包括Kerberos和Net NTLM两种。其中Kerberos相对来说会复杂一些,同时也更加安全。

Net NTLM

Net NTLM认证是一种 Challenge/Response 验证机制,由三种消息组成:

  • type 1协商:主要用于确认双方协议版本

  • type 2质询:Challenge/Response 认证机制的核心部分

  • type 3验证:在质询完成后验证结果

认证的主要过程:

  1. 客户端首先发送type1 消息(协商)和服务器之间进行协议版本等信息的协商。

  2. 服务器用type 2消息(质询)进行响应,并生成一个随机的挑战值Challenge发送给客户端。

  3. 客户端用type 3消息(验证)回复质询,使用自己的NTLM Hash对挑战值进行加密,生成响应Response并发送回服务器。

  4. 服务器接收到响应后,使用已存储的用户密码哈希对挑战值进行计算,再与客户端回复的响应值进行比对,若两者一致则认证成功。

在域环境中,如果客户端尝试使用域账户登录,由于域成员服务器不存储域账户的密码哈希,服务器会将用户名、挑战和响应通过Netlogon协议传递给域控制器,由DC来进行验证。

经过NTLM Hash加密Challenge的结果在网络协议中称为Net NTLM Hash,网络中没有传输与密码本身相关的任何数据。

NTLMv1 & NTLMv2

NTLM存在v1和v2两个版本,主要区别在Challenge和加密算法不同。

  • v1是8位的Challenge,而v2是16位的Challenge

  • v1的主要加密算法是DES,而v2的主要加密算法是HMAC-MD5

  • type3消息Response的构建方式不同

Net NTLM Hash的格式:

v1的格式为:

username::hostname:LM response:NTLM response:challenge

v2的格式为:

username::domain:challenge:HMAC-MD5:blob

如果可以从系统导出来的NTLM Hash,尝试通过Hashcat能够破解出明文密码。

Hash传递攻击

Pass The Hash也叫hash传递攻击,简称PTH。

在域环境中,用户登录计算机时使用的大都是相同的域账号。因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就能使用哈希传递攻击的方法登陆内网中的其他计算机。

这个过程不需要用户明文密码,只需要用户Hash。Hash传递就只是完成一个不需要输入密码的NTLM协议认证流程。

Hash传递攻击利用工具很多,比如mimikatz:

# 本地管理员的执行权限

privilege::debug
sekurlsa::logonpasswords

复制拿到的NTLM Hash的值。

sekurlsa::pth /user:administrator /domain:XIAN.COM /ntlm:496d9d8e5b84059203b50fa8fc...

完成之后会弹出cmd.exe

除了比如mimikatz还有其他的方式,比如msf内置的mimikatz获取hash,还有kiwi模块和psexec模块,python第三方库impacket下的secretsdump等。

参考文章:

https://xxe.icu/domain-security.html

https://www.cnblogs.com/chalan630/p/15063693.html

https://www.cnblogs.com/Xy--1/p/13216686.html

https://www.freebuf.com/articles/system/224171.html

https://daiker.gitbook.io/windows-protocol/ntlm-pian/4#id-1.-pass-the-hash

https://www.cnblogs.com/husterlong/p/14271976.html


若有错误,欢迎指正!o( ̄▽ ̄)ブ

域渗透之初识LM&NTLM认证过程的更多相关文章

  1. 域渗透基础之NTLM认证协议

    域渗透基础的两个认证协议ntlm和Kerberos协议是必须总结的~ 这篇简单总结下ntlm协议 晚上写下kerberos 0x01 NTLM简介 NTLM使用在Windows NT和Windows ...

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

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

  3. 域渗透 | kerberos认证及过程中产生的攻击

    ​文章首发于公众号<Z2O安全攻防>​ 直接公众号文章复制过来的,排版可能有点乱, 可以去公众号看. https://mp.weixin.qq.com/s/WMGkQoMnQdyG8UmS ...

  4. 域渗透基础之Kerberos认证协议

     本来昨晚就该总结整理,又拖到今天早上..6点起来赶可还行 0x01 Kerberos前言 Kerberos 是一种由 MIT(麻省理工大学)提出的一种网络身份验证协议.它旨在通过使用密钥加密技术为客 ...

  5. AD域渗透总结

    域渗透总结 学习并做了一段时间域网络渗透,给我直观的感受就是思路问题和耐心,这个不像技术研究,需要对一个点进行研究,而是遇到问题后要从多个方面思考,寻找"捷径"思路,只要思路正确, ...

  6. 域渗透-凭据传递攻击(pass the hash)完全总结

    总结下PtH具体形式(wmicexec.powershell.msf等) 0x01 PtH攻击原理 && 黄金白银票据 PtH攻击原理 wiki  https://en.wikiped ...

  7. windows认证过程

    NTLM简介: NTLM使用在Windows NT和Windows 2000 Server(or later)工作组环境中(Kerberos用在域模式下).在AD域环境中,如果需要认证Windows ...

  8. 域渗透:pth(pass the hash)

    pass the hash原理: 在Windows系统中,通常会使用NTLM身份认证,NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUse ...

  9. 域渗透-Kerberos身份验证流程

    域渗透-Kerberos身份验证流程 Kerberos协议框架 在 Kerberos 协议中主要是有三个角色的存在: 1. 访问服务的 Client: 2. 提供服务的 Server: 3.KDC(K ...

  10. [转]关于NTLM认证的.NET,php,python登录

    本文转自:http://www.cnblogs.com/myx/archive/2013/03/25/php-ntlm-python-net.html 早期SMB协议在网络上传输明文口令.后来出现 L ...

随机推荐

  1. Windows C 盘瘦身

    修改 Window 服务器虚拟内存位置 | 博客园 怎么更改电脑默认储存位置呢?| CSDN Win11 磁盘清理怎么没有了?Win11 磁盘清理在哪打开?| 搜狐网 快速清理 Windows 大文件 ...

  2. Mac上HomeBrew安装及换源教程

    Mac上HomeBrew安装及换源教程 Mac的Mac OS系统来源于Unix系统,得益于此Mac系统的使用类似于Linux,因此Linux系统中的包管理概念也适用于Mac,而HomeBrew便是其中 ...

  3. Python新手爬虫二:爬取搜狗图片(动态)

    经过上一期爬取豆瓣影评成功后,感觉爬虫还不错,于是想爬点图片来玩玩... 搜狗图片地址:https://pic.sogou.com/?from=category 先上最后成功的源码(在D盘下创建sou ...

  4. vue3 如何获取 dom

    1. 通过 ref     1. 在 html 标签上指定 ref 属性     2. 在 setup 中定义并返回.注意:标签上的 ref 属性名需要跟 setup 中的对应 <h1 ref= ...

  5. 用C#写个PDF批量合并工具简化日常工作

    一. 前言 由于项目需要编写大量的材料,以及各种签字表格.文书等,最后以PDF作为材料交付的文档格式,过程文档时有变化或补充,故此处理PDF文档已经成为日常工作的一部分. 网上有各种PDF处理工具,总 ...

  6. oneforall配置环境,报错cannot import name 'sre_parse' from 're' 解决方法

    高版本python中re模块没有了sre_parse模块, 可以修改python中的exrex.py 代码,直接导入sre_parse模块

  7. Go语言对接微信支付与退款全流程指南

    目录: 一.准备工作 二.初始化微信支付客户端 三.实现支付功能 1. 付款时序图 2. 实现不同场景下的支付 WAP端支付 PC端支付 Android端支付 3. 解析支付回调 四.实现退款功能 退 ...

  8. android ion

    1. 简介 Android的ION子系统的目的主要是通过在硬件设备和用户空间之间分配和共享内存,实现设备之间零拷贝共享内存.说来简单,其实不易.在Soc硬件中,许多设备可以进行DMA,这些设备可能有不 ...

  9. 最详细CentOS7.6安装openGauss5.0.3教程

    一.环境准备 1.1 主机信息 项目 内容 操作系统 CentOS7.6 IP 192.168.4.201 主机名 opgs201 CPU 8core 内存 16GB 磁盘1 100GB 1.2 操作 ...

  10. URL是什么

    URL是什么 URL(Uniform Resource Locator,统一资源定位器) URL的组成: 协议://{域名|主机名|IP}:端口/路径/文件名?参数#锚点 协议 Scheme/Prot ...