✨ 十年磨一剑,一出天下寒 ✨
我想回到寒山寺,继续听那个老和尚念经
LM Hash
即LAN Manager Hash, windows最早用的加密算法,由IBM设计。
LM Hash的计算方式如下:
-
用户的密码转换为大写,密码转换为16进制字符串,不足14字节将会用0来zai后面补全
-
密码的16进制字符串被分成两个7byte部分。每部分转换成比特流,并且长度位56bit,长度不足使用0在左边补齐长度
-
再分7bit为一组,每组末尾加0,再组成一组
-
上步骤得到的二组,分别作为key 为 KGS!@#$%进行DES加密
-
将加密后的两组拼接在一起,得到最终LM HASH值
NTLM Hash
LM Hash 的脆弱性显而易见,所以微软于1993年在Windows NT 3.1中引入了NTLM协议。NTLM Hash是支持Net NTLM认证协议及本地认证过程中的一个重要参与物,其长度为32位,由数字与字母组成
加密算法如下:
先将用户密码转换为十六进制格式
将十六进制格式的密码进行Unicode编码
使用MD4摘要算法对Unicode编码数据进行Hash计算
admin -> hex(16进制编码) = 61646d696e
61646d696e -> Unicode = 610064006d0069006e00
610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
我们一般抓到的hash是下面这种形式:
Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0:::
AAD3B435B51404EEAAD3B435B51404EE 为 lm hash
31D6CFE0D16AE931B73C59D7E0C089C0 为 ntlm hash
Windows Vista Windows Server 2008开始,默认只存储NTLM Hash,LM Hash将不再使用。所以如果vista之前是空密码或者vista之后系统不使用LM Hash的话,我们抓到的LM Hash是AAD3B435B51404EEAAD3B435B51404EE
注:
1. NT Hash 就是 NT Lan Manage就是NTLM Hash
2. LM Hash 就是 LM Hash就是LAN Manager Hash
3. Net-NTLM Hash 不等于NTLM Hash,他是NTLM Hash和challenge加密的值,因为NTLM有V1和V2,所以Net-NTLM Hash 也有V1和V2
4. NTLM Hash 是NTLM网络认证协议的基础
Hash存储
windows 创建密码是以散列值存储的,不是明文
Windows的认证包括三个部分,用户直接操作计算机登陆账户【本地认证】,远程连接到工作组中的某个设备【网络认证】,登陆到域环境中的某个设备【域认证】
其中常见的两种认证体系为 NTLM 认证和 Kerberos 认证体系
本地认证
本地认证流程:
注:
Windows Logon Process(winlogon.exe) 是负责处理安全相关的用户交互界面的组件。Winlogon的工作包括加载其他用户身份安全组件、提供图形化的登陆界面,以及创建用户会话。在我们开启电脑后,电脑会启动 winlogon.exe程序,出现图形化的登陆界面,我们输入用户和密码进行登陆。
该进程的正常路径应是C:\WindowsSystem32,且是以 SYSTEM 用户运行
LSASS(本地安全认证子系统服务)用于微软Windows系统的安全机制。它负责Windows系统安全策略。它负责用户在本地验证或远程登陆时验证用户身份,管理用户密码变更,并产生访问日志
网络认证
NTLM 认证
NTLM协议验证是一种Challenge/Response 验证机制,由三种消息组成:通常称为type 1(协商),类型type 2(质询)和type 3(身份验证)
NTLM 协议的认证过程通用三步:
第一步:
协商:主要用于确认双方协议版本(NTLMv1、NTLMv2等)
第二步:
质询:质询/应答 (Challenge/Response)模式,用于消息交换
第三步:
验证:验证身份合法性,通常由 Server端或 DC完成这个过程
NTLM网络认证一共两种场景,第一种在工作组环境中、第二种在域环境中
注:既然NTLM HASH 有这个质询验证机制,LM Hash也是有的但是安全性很低很低...
工作组
工作组
第一步:协商
客户端主要在这一步向服务器确认协议的版本,是v1还是v2,主要用于确认双方协议版本、加密等级等
第二步:质询
背景:客户端拥有服务器上的合法用户名密码,并以此凭证请求访问服务器上的某服务
客户端向服务器发送用户信息(必须包含用户名)请求
服务器接收到请求,生成一个16位的随机字符,被称为 "Challenge" 。使用该用户名对应的 NTLM Hash(注:本地查询,因为是你要连接我,你用的是我机器的密码,这一次查的是我本地自己的)加密 Challenge,生成 NET NTLM Hash 。同时,生成 NET NTLM Hash 后,将 Challenge 发送给客户端。 // NET NTLM Hash = NTLM Hash(Challenge)
客户端接收到 Challenge 后,使用将要登陆的账户对应的 NTLM Hash (注:这个是你在你自己机器输入的密码转的NTLM Hash) 加密 Challenge 生成 Response,然后将 Response 发送至服务器。
服务器收到客户端的 Response 后,比对 NET NTLM Hash 与 Response 是否相等,若相等,则认证通过
第三步:验证
这一步其实就是上面质询过程中的第4点
域环境
图片来源:百度
域环境
ntlm在域的认证流程:
.....协商
1、Client输入Username,Password,Domain给Server,并且缓存一份Password哈希到本地,明文发送Username给Server
2、Server生成一个Challenge(16字节),发送给Client
3、Client收到Challenge后,先原地复制一份,再将之前缓存的Password对Challenge加密,成为Response,再将Response和Challenge,Username传回Server
4、Server收到这三个值转发给DC
5、DC收到值后,对查找域控的账号数据库(ntds.dit)里的Username字段和对应的Password_Hash
6、DC将Password_hash对Challenge字段加密,与传过来的Response进行对比看是否一致,一致则登录成功
注:
1.实际上域环境中,就是多了一个"信托机构",也就是域控机器的交互
NTLM V1协议和V2协议区别
NTLM V1 的Challenge是8位,加密方式:DES
NTLM V2 的Challenge是16位,加密方式:HMAC-MD5
这个是加密方式是:Net-NTLM Hash的,简单的说就是v2比v1安全能够防止中继和爆破攻击
Net-NTLM Hash
Net-NTLM v1的格式为:
username::hostname:LM response:NTLM response:challenge
Administrator::PC:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad:1223334655767900
Net-NTLM v2的格式为:
username::domain:challenge:HMAC-MD5:blob
admin::PENTEST:1223334655767900:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad
自Windows Vista起,系统默认使用NTLM v2协议
Windows使用系统API(LsaLogonUser)生成hash进行认证,而不是用明文,所以利用hash即可模拟用户登录进行操作
从网络认证NTLM协议解释:
在type3计算response的时候,客户端是使用用户的hash进行计算的, 而不是用户密码进行计算的。因此在模拟用户登录的时候。是不需要用 户明文密码的,只需要用户hash
Pass The Hash 攻击者通过捕获密码的散列值而不是密码明文,然后将其传递以进行身份验证并尽可能地访问其他主机的系统资源。攻击者不需要解密哈希来获取明文密码。PTH 攻击利用身份验证协议,因为密码哈希对于每个会话保持静态,直到密码更换为止。攻击者可以通过抓取系统的活动进程等来捕获哈希值
注:
1.Pass The Hash 传递的是 NTLM Hash
2.PTH 算是传递攻击中的一种,传递攻击除了可以传递NTLM Hash 还可以传递Kerberos,或者其他身份验证协议SSO
3.因为管理员可能批量安装系统等操作,设置的密码可能是一样的,所以hash也是一样的,也就可以通过撞hash来登了
meterpreter
wmiexec
Invoke-WMIExec
Invoke-SMBExec
mimikatz
CrackMapExec
首先kb2871997对于本地Administrator(rid为500,操作系统只认rid不认 用户名,接下来我们统称RID 500帐户)和本地管理员组的域用户是没有影 响的。
比较懒,直接截图
来自https://adsecurity.org/?p=559
还有一些其他的...可以看微软官网的details,后续内容要是用到了,我再截图
注:只能用于域环境,并且目标主机需要安装 KB2871997补丁
KB2871997补丁将kerberos禁止了DES和RC4只能向上到AES
kerberos认证的AS-REQ阶段也是用NTLM Hash也就是可以PTH,下次再说三头犬的认证
//使用mimikatz抓取AES-256密钥
privilege::debug
sekurlsa::ekeys
privilege::debug
sekurlsa::pth /user:用户名 /domain:域名 /aes256:AES256密钥
dir \dcc$
注:
1.也就是NTLM Hash是RC4 加密的就是PTH;NTLM Hash 是AES的就是PTK
https://adsecurity.org/?p=559
https://msrc-blog.microsoft.com/2014/06/05/an-overview-of-kb2871997/
https://docs.microsoft.com/zh-cn/windows/win32/secauthn/microsoft-ntlm?redirectedfrom=MSDN
https://www.cnblogs.com/stephen-init/p/3497660.html
http://t.zoukankan.com/zpchcbd-p-12215936.html
https://blog.csdn.net/weixin_43178927/article/details/108184017
本文始发于微信公众号(SECURITY CLUB):今天老生常谈 Pass The Hash
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论