GCP - IAM, 원칙 및 조직 비인증 열거
Reading time: 5 minutes
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 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
IAM 및 GCP 원칙
자세한 내용은 다음을 확인하세요:
GCP - IAM, Principals & Org Policies Enum
Workspace에서 도메인이 사용되나요?
- DNS 레코드 확인
google-site-verification
레코드가 있다면, Workspace를 사용하고 있을 가능성이 높습니다:
dig txt hacktricks.xyz
[...]
hacktricks.xyz. 3600 IN TXT "google-site-verification=2mWyPXMPXEEy6QqWbCfWkxFTcQhyYdwHrOxee1Yeo-0"
hacktricks.xyz. 3600 IN TXT "google-site-verification=C19PtLcZ1EGyzUYYJTX1Tp6bOGessxzN9gqE-SVKhRA"
hacktricks.xyz. 300 IN TXT "v=spf1 include:usb._netblocks.mimecast.com include:_spf.google.com include:_spf.psm.knowbe4.com include:_spf.salesforce.com include:spf.mandrillapp.com ~all"
**include:_spf.google.com
**와 같은 것이 나타나면 이를 확인할 수 있습니다 (나타나지 않더라도 도메인이 Gmail을 메일 제공자로 사용하지 않고도 Workspace에 있을 수 있으니 주의하세요).
- 해당 도메인으로 Workspace 설정 시도하기
또 다른 옵션은 해당 도메인을 사용하여 Workspace를 설정해보는 것입니다. 만약 도메인이 이미 사용 중이라고 불평하면 (이미지와 같이), 이미 사용 중임을 알 수 있습니다!
Workspace 도메인을 설정하려면 다음을 따르세요: https://workspace.google.com/business/signup/welcome
.png)
- 해당 도메인을 사용하여 이메일 비밀번호 복구 시도하기
해당 도메인에서 사용 중인 유효한 이메일 주소를 알고 있다면 (예: admin@email.com 또는 info@email.com) https://accounts.google.com/signin/v2/recoveryidentifier에서 계정을 복구 시도할 수 있습니다. 만약 시도가 Google이 해당 계정에 대해 전혀 모른다는 오류를 표시하지 않는다면, 이는 Workspace를 사용하고 있는 것입니다.
이메일 및 서비스 계정 열거하기
Workspace 도메인의 유효한 이메일 및 SA 이메일을 열거하는 것이 가능합니다. 권한을 할당하고 오류 메시지를 확인하여 이를 수행할 수 있습니다. 이를 위해서는 프로젝트에 권한을 할당할 수 있는 권한이 필요합니다 (이는 단지 귀하가 소유한 것일 수 있습니다).
존재 여부를 확인하기 위해 권한을 부여하지 않고도 serviceAccount
유형을 사용할 수 있으며, 이는 **user
**일 때와 **SA
**일 때 각각 다릅니다:
# Try to assign permissions to user 'unvalid-email-34r434f@hacktricks.xyz'
# but indicating it's a service account
gcloud projects add-iam-policy-binding <project-controlled-by-you> \
--member='serviceAccount:unvalid-email-34r434f@hacktricks.xyz' \
--role='roles/viewer'
## Response:
ERROR: (gcloud.projects.add-iam-policy-binding) INVALID_ARGUMENT: User unvalid-email-34r434f@hacktricks.xyz does not exist.
# Now try with a valid email
gcloud projects add-iam-policy-binding <project-controlled-by-you> \
--member='serviceAccount:support@hacktricks.xyz' \
--role='roles/viewer'
# Response:
ERROR: (gcloud.projects.add-iam-policy-binding) INVALID_ARGUMENT: Principal support@hacktricks.xyz is of type "user". The principal should appear as "user:support@hacktricks.xyz". See https://cloud.google.com/iam/help/members/types for additional documentation.
서비스 계정을 신속하게 열거하는 방법은 URL에 접근해보는 것입니다: https://iam.googleapis.com/v1/projects/<project-id>/serviceAccounts/<sa-email>
예를 들어: https://iam.googleapis.com/v1/projects/gcp-labs-3uis1xlx/serviceAccounts/appengine-lab-1-tarsget@gcp-labs-3uis1xlx.iam.gserviceaccount.com
응답이 403이면 SA가 존재한다는 의미입니다. 그러나 응답이 404이면 존재하지 않는다는 의미입니다.
// Exists
{
"error": {
"code": 403,
"message": "Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.",
"status": "PERMISSION_DENIED"
}
}
// Doesn't exist
{
"error": {
"code": 404,
"message": "Unknown service account",
"status": "NOT_FOUND"
}
}
사용자 이메일이 유효할 때 오류 메시지가 유형이 아니라는 것을 나타내는 방식에 주목하세요. 그래서 우리는 이메일 support@hacktricks.xyz가 어떤 권한도 부여받지 않고 존재한다는 것을 발견할 수 있었습니다.
서비스 계정에 대해서도 serviceAccount:
대신 user:
유형을 사용하여 같은 작업을 수행할 수 있습니다:
# Non existent
gcloud projects add-iam-policy-binding <project-controlled-by-you> \
--member='serviceAccount:<invalid-sa-name>@<proj-uniq-name>.iam.gserviceaccount.com' \
--role='roles/viewer'
# Response
ERROR: (gcloud.projects.add-iam-policy-binding) INVALID_ARGUMENT: User <invalid-sa-name>@<proj-uniq-name>.iam.gserviceaccount.com does not exist.
# Existent
gcloud projects add-iam-policy-binding <project-controlled-by-you> \
--member='serviceAccount:<sa-name>@<proj-uniq-name>.iam.gserviceaccount.com' \
--role='roles/viewer'
# Response
ERROR: (gcloud.projects.add-iam-policy-binding) INVALID_ARGUMENT: Principal testing@digital-bonfire-410512.iam.gserviceaccount.com is of type "serviceAccount". The principal should appear as "serviceAccount:testing@digital-bonfire-410512.iam.gserviceaccount.com". See https://cloud.google.com/iam/help/members/types for additional documentation.
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 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.