GCP - IAM, Principals & Org Policies Enum
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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
服务账户
有关服务账户的介绍,请查看:
枚举
服务账户始终属于一个项目:
gcloud iam service-accounts list --project <project>
用户与组
有关 GCP 中用户与组工作原理的介绍,请查看:
枚举
通过权限 serviceusage.services.enable 和 serviceusage.services.use,可以在项目中 启用服务 并使用它们。
Caution
请注意,默认情况下,Workspace 用户被授予 项目创建者 角色,使他们能够 创建新项目。当用户创建项目时,他被授予
owner角色。因此,他可以 在项目上启用这些服务以便能够枚举 Workspace。然而,请注意,还需要在 Workspace 中拥有 足够的权限 才能调用这些 API。
如果您可以 启用 admin 服务,并且您的用户在 Workspace 中拥有 足够的权限,您可以使用以下代码 枚举所有组和用户。
即使它显示 identity groups,它也会返回 没有任何组的用户:
# Enable admin
gcloud services enable admin.googleapis.com
gcloud services enable cloudidentity.googleapis.com
# Using admin.googleapis.com
## List all users
gcloud organizations list #The DIRECTORY_CUSTOMER_ID is the Workspace ID
gcloud beta identity groups preview --customer <workspace-id>
# Using cloudidentity.googleapis.com
## List groups of a user (you can list at least the groups you belong to)
gcloud identity groups memberships search-transitive-groups --member-email <email> --labels=cloudidentity.googleapis.com/groups.discussion_forum
## List Group Members (you can list at least the groups you belong to)
gcloud identity groups memberships list --group-email=<email>
### Make it transitive
gcloud identity groups memberships search-transitive-memberships --group-email=<email>
## Get a graph (if you have enough permissions)
gcloud identity groups memberships get-membership-graph --member-email=<email> --labels=cloudidentity.googleapis.com/groups.discussion_forum
Tip
在之前的示例中,参数
--labels是必需的,因此使用了一个通用值(如果直接使用 API,则不需要,如 PurplePanda 在这里所做的)。
即使启用了管理员服务,您也可能会因为被攻陷的工作区用户权限不足而在枚举时遇到错误:
.png)
IAM
默认权限
来自 文档:当创建组织资源时,您域中的所有用户默认被授予 Billing Account Creator 和 Project Creator 角色。这些默认角色允许您的用户立即开始使用 Google Cloud,但不适用于您组织资源的常规操作。
这些 角色 授予 权限:
billing.accounts.create和resourcemanager.organizations.getresourcemanager.organizations.get和resourcemanager.projects.create
此外,当用户创建项目时,他会根据 文档 自动获得该项目的所有者。因此,默认情况下,用户将能够创建项目并在其上运行任何服务(矿工?工作区枚举?…)
Caution
GCP 组织中的最高权限是 Organization Administrator 角色。
set-iam-policy vs add-iam-policy-binding
在大多数服务中,您将能够使用 add-iam-policy-binding 或 set-iam-policy 方法更改资源的权限。主要区别在于 add-iam-policy-binding 会将新的角色绑定添加到现有的 IAM 策略中,而 set-iam-policy 将 删除之前 授予的权限,并 仅设置命令中指示的权限。
枚举
# Roles
## List roles
gcloud iam roles list --project $PROJECT_ID # List only custom roles
gcloud iam roles list --filter='etag:AA=='
## Get perms and description of role
gcloud iam roles describe roles/container.admin
gcloud iam roles describe --project <proj-name> <role-name>
# Policies
gcloud organizations get-iam-policy <org_id>
gcloud resource-manager folders get-iam-policy <folder-id>
gcloud projects get-iam-policy <project-id>
# MISC
## Testable permissions in resource
gcloud iam list-testable-permissions --filter "NOT apiDisabled: true" <resource>
## Grantable roles to a resource
gcloud iam list-grantable-roles <project URL>
cloudasset IAM 枚举
有不同的方法可以检查用户在不同资源(如组织、文件夹、项目等)中的所有权限,使用此服务。
- 权限
cloudasset.assets.searchAllIamPolicies可以请求 资源内的所有 iam 策略。
gcloud asset search-all-iam-policies #By default uses current configured project
gcloud asset search-all-iam-policies --scope folders/1234567
gcloud asset search-all-iam-policies --scope organizations/123456
gcloud asset search-all-iam-policies --scope projects/project-id-123123
- 权限
cloudasset.assets.analyzeIamPolicy可以请求资源内一个主体的 所有 iam 策略。
# Needs perm "cloudasset.assets.analyzeIamPolicy" over the asset
gcloud asset analyze-iam-policy --organization=<org-id> \
--identity='user:email@hacktricks.xyz'
gcloud asset analyze-iam-policy --folder=<folder-id> \
--identity='user:email@hacktricks.xyz'
gcloud asset analyze-iam-policy --project=<project-name> \
--identity='user:email@hacktricks.xyz'
- 权限
cloudasset.assets.searchAllResources允许列出一个组织、文件夹或项目的所有资源。包括与 IAM 相关的资源(如角色)。
gcloud asset search-all-resources --scope projects/<proj-name>
gcloud asset search-all-resources --scope folders/1234567
gcloud asset search-all-resources --scope organizations/123456
- 权限
cloudasset.assets.analyzeMove也可以用于检索影响资源的策略,例如项目。
gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
- 我认为权限
cloudasset.assets.queryIamPolicy也可以访问查找主体的权限
# But, when running something like this
gcloud asset query --project=<proj> --statement='SELECT * FROM compute_googleapis_com_Instance'
# I get the error
ERROR: (gcloud.asset.query) UNAUTHENTICATED: QueryAssets API is only supported for SCC premium customers. See https://cloud.google.com/security-command-center/pricing
testIamPermissions 枚举
Caution
如果您 无法使用之前的方法访问 IAM 信息,并且您在红队中。您可以 使用工具 https://github.com/carlospolop/bf_my_gcp_perms 来暴力破解您当前的权限。
但是,请注意需要启用服务
cloudresourcemanager.googleapis.com。
权限提升
在以下页面中,您可以查看如何 滥用 IAM 权限以提升权限:
未认证枚举
GCP - IAM, Principals & Org Unauthenticated Enum
后期利用
持久性
如果您拥有高权限,您可以:
- 创建新的服务账户(或用户,如果在 Workspace 中)
- 给您控制的主体更多权限
- 给易受攻击的服务账户更多权限(VM 中的 SSRF,易受攻击的 Cloud Function…)
- …
组织政策
有关组织政策是什么的介绍,请查看:
IAM 策略指示主体对资源的权限通过角色分配,这些角色分配了细粒度的权限。组织政策 限制这些服务的使用方式或禁用哪些功能。这有助于提高 GCP 环境中每个资源的最小权限。
gcloud resource-manager org-policies list --organization=ORGANIZATION_ID
gcloud resource-manager org-policies list --folder=FOLDER_ID
gcloud resource-manager org-policies list --project=PROJECT_ID
Privesc
在以下页面中,您可以查看如何滥用组织策略权限以提升权限:
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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
HackTricks Cloud

