域渗透之初识LM&NTLM认证过程
前言
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的产生过程如下:
首先对密码进行大写转换:
123456
->123456
转换为16进制字符串:
123456
->313233343536
密码不足14字节要求用0补全:
313233343536
(6bytes)->3132333435360000000000000000
(14bytes)密码分割成两个7个字节长的段:
31323334353600
00000000000000
分别转换成比特串,若长度不足56bits使用0在左边补齐长度:
31323334353600 -> 00110001001100100011001100110100001101010011011000000000
00000000000000 -> 00000000000000000000000000000000000000000000000000000000
- 每7bits分为一组,每组末尾加0,再组成一组,转换成16进制:
0011000010011000100011000110011001000010101010001101100000000000 -> 40a0d0862298d000
0000000000000000000000000000000000000000000000000000000000000000 -> 0000000000000000
分别作为key对
KGS!@#$%
进行DES加密:44efce164ab921ca
aad3b435b51404ee
将两组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的产生过程如下:
首先对密码进行十六进制转换:
123456
->313233343536
转换成Unicode格式(每个字节之后添加0x00):
313233343536
->310032003300340035003600
使用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验证:在质询完成后验证结果
认证的主要过程:
客户端首先发送type1 消息(协商)和服务器之间进行协议版本等信息的协商。
服务器用type 2消息(质询)进行响应,并生成一个随机的挑战值Challenge发送给客户端。
客户端用type 3消息(验证)回复质询,使用自己的NTLM Hash对挑战值进行加密,生成响应Response并发送回服务器。
服务器接收到响应后,使用已存储的用户密码哈希对挑战值进行计算,再与客户端回复的响应值进行比对,若两者一致则认证成功。
在域环境中,如果客户端尝试使用域账户登录,由于域成员服务器不存储域账户的密码哈希,服务器会将用户名、挑战和响应通过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认证过程的更多相关文章
- 域渗透基础之NTLM认证协议
域渗透基础的两个认证协议ntlm和Kerberos协议是必须总结的~ 这篇简单总结下ntlm协议 晚上写下kerberos 0x01 NTLM简介 NTLM使用在Windows NT和Windows ...
- iOS进行Basic认证与NTLM认证
一.iOS进行Basic认证 只需要在NSMutableURLRequest的Header中添加认证所需的Username和password. NSMutableURLRequest *webReq ...
- 域渗透 | kerberos认证及过程中产生的攻击
文章首发于公众号<Z2O安全攻防> 直接公众号文章复制过来的,排版可能有点乱, 可以去公众号看. https://mp.weixin.qq.com/s/WMGkQoMnQdyG8UmS ...
- 域渗透基础之Kerberos认证协议
本来昨晚就该总结整理,又拖到今天早上..6点起来赶可还行 0x01 Kerberos前言 Kerberos 是一种由 MIT(麻省理工大学)提出的一种网络身份验证协议.它旨在通过使用密钥加密技术为客 ...
- AD域渗透总结
域渗透总结 学习并做了一段时间域网络渗透,给我直观的感受就是思路问题和耐心,这个不像技术研究,需要对一个点进行研究,而是遇到问题后要从多个方面思考,寻找"捷径"思路,只要思路正确, ...
- 域渗透-凭据传递攻击(pass the hash)完全总结
总结下PtH具体形式(wmicexec.powershell.msf等) 0x01 PtH攻击原理 && 黄金白银票据 PtH攻击原理 wiki https://en.wikiped ...
- windows认证过程
NTLM简介: NTLM使用在Windows NT和Windows 2000 Server(or later)工作组环境中(Kerberos用在域模式下).在AD域环境中,如果需要认证Windows ...
- 域渗透:pth(pass the hash)
pass the hash原理: 在Windows系统中,通常会使用NTLM身份认证,NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUse ...
- 域渗透-Kerberos身份验证流程
域渗透-Kerberos身份验证流程 Kerberos协议框架 在 Kerberos 协议中主要是有三个角色的存在: 1. 访问服务的 Client: 2. 提供服务的 Server: 3.KDC(K ...
- [转]关于NTLM认证的.NET,php,python登录
本文转自:http://www.cnblogs.com/myx/archive/2013/03/25/php-ntlm-python-net.html 早期SMB协议在网络上传输明文口令.后来出现 L ...
随机推荐
- Pipenv 使用
Pipenv 是 Python 官方推荐的依赖管理工具,旨在简化 pip 和 virtualenv 的使用.其使用 Pipfile 和 Pipfile.lock 来管理项目的依赖和虚拟环境. 安装 p ...
- 使用 nuxi build 命令构建你的 Nuxt 应用程序
title: 使用 nuxi build 命令构建你的 Nuxt 应用程序 date: 2024/8/30 updated: 2024/8/30 author: cmdragon excerpt: n ...
- Kali初次使用,如何获得root权限?【转】
最新的kali 系统,安装的时候会创建一个新用户,不是root的,然后安装软件的时候会要求root权限,要启用root账号可以按下面这个写的 方法1已经确认可以.方法2没尝试,自己试试吧. 1.确定用 ...
- [Udemy] AWS Certified Data Analytics Specialty - 4.Analysis
Kinesis Data Analytics Analytics 可以和 Lambda集成 RANDOM_CUT_FOREST, 异常检测算法 OpenSearch = ElasticSearch O ...
- Atziluth's Last Contest. 001题解
被dalaoYHH爆虐 问题 H:mcd 题目描述 给出两个长为 \(n\) 的数列 \({a_n},{b_n}\),保证 \(a_i\le b_i(i=1,2,\cdots,n)\). 现在您需要对 ...
- ZEGO 最后一公里网络传输的容灾及优化方案
作为运维,你是否遇到过一些用户域名解析异常,你是否又遇到过某些区域云商加速节点异常导致业务不可用,此时的你一脸茫然,不知所措?作为运维,你是否被最后一公里问题搞得焦头烂额? 那么今天我们就来探讨一下最 ...
- JavaScript——事件监听
事件监听 1.事件绑定 2.常见事件
- QT原理与源码分析之QT对象类型QObject源码中的间接的设计思想
这一篇文章介绍QT框架中QT对象类型QObject类型的源代码在设计上的一个比较优秀的设计思想. QObject类型定义 QObject 直接来看QObject的源代码.为了表达更简洁更直观,这里省略 ...
- 没时间做获取天气的实验 三分钟! 给您看清如何通过HTTP GET请求 获取天气预报
1. 注册心知天气账号,获取私钥 下面这篇文章是图示讲解的,好东西,何不转载为快? http://www.taichi-maker.com/homepage/iot-development/iot-p ...
- 深入理解 Nuxt.js 中的 app:created 钩子
title: 深入理解 Nuxt 中的 app created 钩子 date: 2024/9/26 updated: 2024/9/26 author: cmdragon excerpt: 摘要:本 ...