长亭百川云 - 文章详情

CVE-2022-33679

Security丨Art

53

2024-07-13

最近Bdenneu发推说在github放出了CVE-2022-33679的poc,正好最近被域提权折磨,就去看了一下

漏洞的本质是存在开启了不需要预认证的用户(创建用户时默认关闭,需要手动开启),所以可以构造要求加密降级的AS-REQ请求在未开启kerberos预认证的情况下,一个AS-REQ可以用来请求一个AS-REP,而AS-REP中包含一个加密过的TGT,默认情况下是aes,所以这玩意之前是用彩虹表+hashcat爆破的

那么首先,我们要去找一个设置了不需要预认证的用户

AdFind.exe \-h dc-ip \-u username \-up   
userpass \-b "DC=test,DC=local" \-f "(&(&(UserAccountControl:1.2.840.113556.1.4.803:=4194304)(!  
(UserAccountControl:1.2.840.113556.1.4.803:\=2)))(!(objectCategory\=computer)))"

找到之后直接用impacket请求tgt的hash

python GetNPUsers.py windows.local/windows \-dc-ip 172.16.178.9 \-format hashcat

hashcat 爆破

hashcat \-m 18200 \--force \-a 0 hash password.txt

而在最新的poc中,AS-REQ将加密协议降级为了rc4

 def prepareAsReq(self, requestPAC\=True):  
        rsadsi\_rc4\_md4 \= \-128  
        self.\_\_asReq \= AS\_REQ()  
        .....  
        .....  
         self.\_\_reqBody\['realm'\] \= domain  
        self.\_\_reqBody\['till'\] \= KerberosTime.to\_asn1(now)  
        self.\_\_reqBody\['rtime'\] \= KerberosTime.to\_asn1(now)  
        self.\_\_reqBody\['nonce'\] \=  rand.getrandbits(31)  
        supportedCiphers \= (rsadsi\_rc4\_md4,)  
        seq\_set\_iter(self.\_\_reqBody, 'etype', supportedCiphers)
  1. 攻击者成功获得加密票据后,AS-REP 数据包中包含一个 40 位长的加密 TGT 会话密钥。使用历史悠久的 RC4-MD4 加密类型,攻击者可以利用其对加密数据包的固定开头的了解来提取 45 个字节的密钥流。

  2. 现在,攻击者可以使用此密钥流重新加密并向 KDC 请求 TGT 票证,并使用定制的预身份验证来验证密钥流是否正确并破解以下 40 位 TGT 会话密钥的其余部分一个字节一个字节。这是通过滥用用于 Kerberos 编码的 ASN.1 协议中的两个弱点来实现的,以利用攻击者对预身份验证字段大小的有限控制:

  3. KDC 解析器忽略对象末尾的 NUL 终止字符串。这使我们能够在 KerberosTime 对象的末尾添加一个 NUL 字符。这将适用于单字节猜测,但我们仍然需要猜测额外的四个字节。

  4. KDC 解析器不验证编码长度的长度。ASN.1 字符串长度由 1-4 个字节表示,KDC ASN.1 解析器不强制执行最短路径。因此,我们可以根据需要用 1-4 个字节的大小来表示我们的时间戳字符串长度。这意味着我们可以进一步扩大纯文本的长度并将 NUL 字节推到下一个位置并猜测密钥流的下一个字节。

  5. 最后,攻击者可以通过发送带有加密预认证的 AS-REQ 重新加密时间戳并验证每个猜测,如果加密的预认证日期不正确,则会收到错误消息。如果预认证成功,攻击者能够从密钥流中发现另一个字节,因为每个字节有多达 256 个猜测选项。重复此过程可以获取所有必需的密钥流字节来解密存储在原始票证中的会话密钥

    大约1280 个请求后就可以拿到tgt

给出的脚本添加了server参数,所以直接根据tgt就去请求对应server的tgs并保存在本地,作者给的脚本是直接给了tgs,想要tgt的话改下脚本输出或者直接用另一个脚本https://github.com/Blyth0He/CVE-2022-33679

如果对应的账号没有该服务权限则会出现如下报错

如果使用未开启不需要预认证的账户去爆破的话,得到的报错结果如下

简单总结下就是有不需预认证的账号,就可以拿到tgt,需要付出的代价是1280次请求可能会触发告警,问题是目前来看。。这个一般也没人开啊(起码我是没碰到过)。。可能我是倒霉蛋吧

鸡肋。没有不需预认证的账号的话,可以用CVE-2022-33647,中继要求客户端采用rc4-md4去降级加密请求

poc被作者删了,等一波

啊啊啊,好菜啊,感觉自己焦虑的一逼……

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2