今天老生常谈 Pass The Hash

admin 2021年12月2日08:42:05评论87 views字数 4736阅读15分47秒阅读模式

✨ 十年磨一剑,一出天下寒  

我想回到寒山寺,继续听那个老和尚念经        

Hash


LM Hash




今天老生常谈 Pass The Hash


即LAN Manager Hash, windows最早用的加密算法,由IBM设计。

LM Hash的计算方式如下:

  1. 用户的密码转换为大写,密码转换为16进制字符串,不足14字节将会用0来zai后面补全

  2. 密码的16进制字符串被分成两个7byte部分。每部分转换成比特流,并且长度位56bit,长度不足使用0在左边补齐长度

  3. 再分7bit为一组,每组末尾加0,再组成一组

  4. 上步骤得到的二组,分别作为key 为 KGS!@#$%进行DES加密

  5. 将加密后的两组拼接在一起,得到最终LM HASH值


NTLM Hash




今天老生常谈 Pass The Hash


LM Hash 的脆弱性显而易见,所以微软于1993年在Windows NT 3.1中引入了NTLM协议。NTLM Hash是支持Net NTLM认证协议及本地认证过程中的一个重要参与物,其长度为32位,由数字与字母组成


加密算法如下:

先将用户密码转换为十六进制格式

将十六进制格式的密码进行Unicode编码

使用MD4摘要算法对Unicode编码数据进行Hash计算


admin -> hex(16进制编码) = 61646d696e61646d696e -> Unicode = 610064006d0069006e00610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634


今天老生常谈 Pass The Hash


我们一般抓到的hash是下面这种形式:

Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0:::


AAD3B435B51404EEAAD3B435B51404EE   为 lm hash31D6CFE0D16AE931B73C59D7E0C089C0  为 ntlm hash


今天老生常谈 Pass The Hash


今天老生常谈 Pass The 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存储




今天老生常谈 Pass The Hash

windows 创建密码是以散列值存储的,不是明文


今天老生常谈 Pass The Hash


Windows 认证


Windows的认证包括三个部分,用户直接操作计算机登陆账户【本地认证】,远程连接到工作组中的某个设备【网络认证】,登陆到域环境中的某个设备【域认证】


其中常见的两种认证体系为 NTLM 认证和 Kerberos 认证体系


本地认证




今天老生常谈 Pass The Hash


本地认证流程:


今天老生常谈 Pass The Hash


注:


Windows Logon Process(winlogon.exe) 是负责处理安全相关的用户交互界面的组件。Winlogon的工作包括加载其他用户身份安全组件、提供图形化的登陆界面,以及创建用户会话。在我们开启电脑后,电脑会启动 winlogon.exe程序,出现图形化的登陆界面,我们输入用户和密码进行登陆。

该进程的正常路径应是C:\WindowsSystem32,且是以 SYSTEM 用户运行


LSASS(本地安全认证子系统服务)用于微软Windows系统的安全机制。它负责Windows系统安全策略。它负责用户在本地验证或远程登陆时验证用户身份,管理用户密码变更,并产生访问日志


网络认证




今天老生常谈 Pass The Hash

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点



域环境

今天老生常谈 Pass The Hash

图片来源:百度


域环境


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协议



Pass The Hash


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来登了


Pass The Hash方法


meterpreter wmiexecInvoke-WMIExecInvoke-SMBExec   mimikatz  CrackMapExec

   

KB2871997


首先kb2871997对于本地Administrator(rid为500,操作系统只认rid不认 用户名,接下来我们统称RID 500帐户)和本地管理员组的域用户是没有影 响的。


比较懒,直接截图

今天老生常谈 Pass The Hash

今天老生常谈 Pass The Hash

来自https://adsecurity.org/?p=559


还有一些其他的...可以看微软官网的details,后续内容要是用到了,我再截图


Pass The Key


注:只能用于域环境,并且目标主机需要安装 KB2871997补丁



KB2871997补丁将kerberos禁止了DES和RC4只能向上到AES


今天老生常谈 Pass The Hash

kerberos认证的AS-REQ阶段也是用NTLM Hash也就是可以PTH,下次再说三头犬的认证


//使用mimikatz抓取AES-256密钥

privilege::debugsekurlsa::ekeysprivilege::debugsekurlsa::pth /user:用户名 /domain:域名 /aes256:AES256密钥 dir \dcc$


注:

1.也就是NTLM Hash是RC4 加密的就是PTH;NTLM Hash 是AES的就是PTK



参考
https://adsecurity.org/?p=559https://msrc-blog.microsoft.com/2014/06/05/an-overview-of-kb2871997/https://docs.microsoft.com/zh-cn/windows/win32/secauthn/microsoft-ntlm?redirectedfrom=MSDNhttps://www.cnblogs.com/stephen-init/p/3497660.htmlhttp://t.zoukankan.com/zpchcbd-p-12215936.htmlhttps://blog.csdn.net/weixin_43178927/article/details/108184017



本文始发于微信公众号(SECURITY CLUB):今天老生常谈 Pass The Hash

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月2日08:42:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   今天老生常谈 Pass The Hashhttp://cn-sec.com/archives/458487.html

发表评论

匿名网友 填写信息