深入理解 Kerberos 协议 (下)

AS_REQ 阶段的安全问题

Pass-the-hash && Pass-the-key

Pass-the-hash 是指攻击者通过捕获密码的 ntlm hash ,然后将其传递来进行 NTLM 身份验证,以此来横向其它网络系统

在攻击过程中,第一步就是获取 ntlm hash,这里用 mimikatz 来获取:

1
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" > pssword.txt 

image-20221231105700534

获取到域管理员的 ntlm hash 后,就可以凭借该 ntlm hash 登陆域控,这里用 psexec 来完成:

1
python3 psexec.py -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21

image-20221231133029349

为了证明 Pass-the-hash 的过程中依赖于 NTLM 身份认证,我们进行抓包,发现 Pass-the-hash 确实依赖于 NTLM 身份认证

image-20221231133609562

除了 psexec 外,还可以用 mimikatz 实现 Pass-the-hash,如下:

1
mimikatz "privilege::debug" "sekurlsa::pth /user:administrator /domain:god.org /ntlm:ccef208c6485269c20db2cad21734fe7"

image-20221231160035141

image-20221231160141533

不过用 mimikatz 实现的 Pass-the-hash 并非依赖于 NTLM 身份认证,而是利用 kerberos 协议凭借已获得的 NTLM 哈希来获取 TGT 票据,这种技术已经超过了一般的 Pass-the-hash,通过被称为 Overpass-the-hash 或 Pass-the-key

Pass-the-key 这种技术就是伪造了 kerberos 协议中的 AS_REQ 过程,进而获取到某个用户的 TGT 票据,然后就可以利用 TGT 票据来做想要做的事情,比如:对上面 Pass-the-key 的相关操作进行抓包

尽管我们并没有抓到 AS_REQ 的请求,但是抓到了 TGS_REQ 和 SMB2 中的 AP_REQ

image-20221231162157970

并且在 AP_REQ 中请求的服务是文件共享服务 CIFS

image-20221231162025345

在 kerberos 的 AS_REQ 过程中,经常会用 eTYPE-AES256-CTS-HMAC-SHA1-96(18) 或 eTYPE-ARFOUR-HMAC-MD5(23) 这两种加密方式将用户明文加密成 hash,然后将该 hash 作为密钥

  • eTYPE-AES256-CTS-HMAC-SHA1-96(18) :表示 AES 加密类型

  • eTYPE-ARFOUR-HMAC-MD5(23) :其中 ARFOUR 为 RC4 加密类型的标志,故表示 RC4 加密类型

通过 sekurlsa::ekeys 列出 kerberos 协议的加密密钥后,发现 RC4 加密密钥其实就是 ntlm hash,如下:

image-20221231163833333

这里发现域管理员支持的加密密钥只有 RC4 一种,但我们发现 webadmin 用户除了 RC4 外,还支持 AES256 的加密密钥,如下:

image-20221231165151655

所以,我们可以利用 webadmin 用户对应的 AES256 加密密钥来伪造 AS_REQ 过程,进而获取对应的 TGT 票据

1
mimikatz "privilege::debug" "sekurlsa::pth /user:a /domain:test.local /aes256:9f64a722743a06840e2fc30e69c56c07feb23e32fc177d165f272cb5790ce98b" 

参考:

https://blog.gentilkiwi.com/securite/mimikatz/overpass-the-hash

https://blog.netwrix.com/2022/10/04/overpass-the-hash-attacks/

Kerberos加密类型带来的困扰

用户枚举 && 密码喷洒

可以根据响应包返回码枚举用户名,已知用户名后,可以爆破密码

640

登陆一个不存在的域用户,响应包如下

image-20221219145254104

登陆一个存在的域用户,但密码错误,响应包如下:

image-20221219145518309

AS_REP 阶段的安全问题

AS-REP Roasting

深入理解 Kerberos 协议 (上) 中我们提到过 “KRB Error: KRB5KDC_ERR_PREAUTH_REQUIRED” 问题和预认证有关,在 kerberos5 之前,允许不使用密码进行身份认证,在 kerberos5 加入了预认证,必须要求使用密码进行身份验证,但是我们可以关闭预认证

image-20221219152004660

关闭预认证后,用 mary 用户进行登陆,即使没有密码也可以获得 AS_REP 响应包

image-20221219152511177

然后我们可以获得 AS_REP 中 enc-part 下的 cipher 值,因为这个值是采用用户密码 hash 作为密钥来加密 SessionKey-AS,所以可以用 hashcat 离线破解拿到用户明文密码,具体方法参考 windows-protocol

image-20221219152821250

黄金票据

在 AS_REP 里 ticket 下的 encpart 是使用 krbtgt 的 hash 进行加密的,如果我们拥有 krbtgt 的 hash,就可以给我们自己签发任意用户的 TGT 票据,这个票据也被称为黄金票据

伪造黄金票据总共需要如下内容:

  • 要伪造的域用户,一般是域管理员

  • 域名

  • 域的 SID

  • krbtgt 用户的 hash

这里伪造黄金票据为啥需要域的 SID 呢 ?不是很理解,后续理解了再进行补充

关于具体如何伪造黄金票据,网上有大量文章

MS14-068

PAC

在了解 MS14-068 之前,首先要了解 PAC,

SPN

Kerberoasting

委派攻击

参考文章

https://buaq.net/go-87488.html

https://xxe.icu/posts/kerberos_authentication/

https://xz.aliyun.com/t/8690

https://www.modb.pro/db/167245

 微信 微信
0%