sAMAccountName spoofing
SAM-AccountName spoofing
1 背景
2021 年 11 月,有两个漏洞 CVE-2021-42278 & CVE-2021-42287 被露,两个漏洞组合可导致域内普通用户权限提升至域管权限。
1.1 CVE-2021-42278
windows
域内的机器账户的名字以 $
结尾,但 DC 没有对域内机器账户名做验证。与 CVE-2021-42287 结合使用,它允许攻击者冒充域控制器账户。
1.2 CVE-2021-42287
在 kerberos 认证过程中,用户要访问某个服务,在获取服务票据 ST 之前,需要申请 TGT票据。该漏洞的核心为:当请求的服务票 ST 没有被 KDC 找到时,KDC 会自动在尾部添加 $
重新搜索。
如果 A 用户获得申请了 TGT,然后删除 A 用户或重命名 A 用户。并使用该 TGT 进行 S4U2self
以其它用户身份请求一张 ST 给他自己,导致 KDC 在 Account Database 中寻找 A$
。如果帐户 A$
存在,那么 A
就会像其他用户一样为 A$
获得一张服务票据。
因此,机器账户改名为和 DC 机器账户一样,然后申请 TGT,接着把用户名修改掉,使得 DC 在 TGS_REP
时候找不到该账户,这时会用自己的密钥加密服务票据 ST,然后就是得到了一个高权限 ST。
1.3 sAMAccountName
根据微软官方文档中的定义:
SAM-Account-Name 用于支持运行早期版本操作系统的客户端和服务器的登录名,例如 Windows NT 4.0、Windows 95、Windows 98 和 LAN Manager。实际上是以「Domain\LogonName 」形式命名。
其 Ldap-Display-Name 为:sAMAccountName。故该组合漏洞又被称为:sAMAccountName spoofing
此处还有一种用户命名属性,是目前域环境中常用的一种:UPN
userPrincipalName 属性是用户的登录名。 属性由 UPN (用户主体) ,这是用户最常见的登录 Windows 名称。 用户通常使用其 UPN 登录到域。
UPN 由 UPN 前缀(用户帐户名)和 UPN 后缀(DNS 域名)组成。 前缀与后缀以
@
符号相联接。UPN 必须在目录林中的所有安全主体对象之间保持唯一。 这意味着可以重复使用 UPN 的前缀,只是不能使用相同的后缀。
例如:
- 域名:
pentest.lab
- SAM-Account-Name:
win11user
- NetBIOS 登录名:
pentest.lab\win11user
- UserPrincipalName:
win11user@pentest.lab
1.4 SAM-Account-Type
SAM-Account-Type 包含了域内帐户类型对象的信息。可以枚举帐户类型的列表,也可以使用显示信息 API 来创建列表。由于计算机、普通用户帐户和信任帐户还可以枚举为用户对象。
2 漏洞复现
前提:需要对属性
sAMAccountName
和servicePrincipalName
具有写权限。由于默认情况下 MAQ 特性,域内普通用户可以创建 10 个机器账户,而创建者对于机器账户具有写权限,当然可以更改这两个属性。
- 首先创建一个机器账户,使用 impacket 的
addcomputer.py
或是powermad
addcomputer.py
是利用 SAMR协议
创建机器账户,这个方法所创建的机器账户没有 SPN,所以可以不用清除。- 然后清除机器账户的
servicePrincipalName
属性 - 将机器账户的
sAMAccountName
,更改为 DC 的机器账户名字,注意后缀不带$
- 为机器账户请求 TGT
- 将机器账户的
sAMAccountName
更改为其他名字,不与步骤 3 重复即可 - 通过 S4U2self 协议向 DC 请求 ST
- DCsync
步骤如下:
|
|
武器化工具地址:https://github.com/cube0x0/noPac
扫描:noPac.exe scan -domain pentest.lab -user win11user -pass P@ssword
利用:
noPac.exe scan -domain pentest.lab -user win11user -pass P@ssword /dc dc.pentest. lab /mAccount demol /mPassword pAss123! /service cifs /ptt
查看内存中的票据,发现已经存在 dc 的 cifs 服务票据:
Dcsync:
3 缓解措施
- 微软官方已推出补丁:KB5008602、KB5008380
- 通过域控的 ADSI 编辑器工具将 AD 域的 MAQ 配置为 0,中断此漏洞的利用链(但如果当前用户对域内某台机器账号拥有
GenericALL
、GenericWrite
、WriteProperty
权限仍能修改 SAMAccountName 属性),具体查询方式如下:
|
|