GCP - IAM, Principals & Org Unauthenticated Enum

Wsparcie dla HackTricks

Iam & GCP Principals

Aby uzyskać więcej informacji, sprawdź:

GCP - IAM, Principals & Org Policies Enum

Czy domena jest używana w Workspace?

  1. Sprawdź rekordy DNS

Jeśli ma rekord google-site-verification, prawdopodobnie używa (lub używała) 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"

If something like include:_spf.google.com also appears it confirms it (note that if it doesn't appear it doesn't denies it as a domain can be in Workspace without using gmail as mail provider).

  1. Spróbuj skonfigurować Workspace z tą domeną

Inną opcją jest spróbować skonfigurować Workspace używając tej domeny, jeśli zgłasza, że domena jest już używana (jak na obrazku), wiesz, że jest już używana!

Aby spróbować skonfigurować domenę Workspace, odwiedź: https://workspace.google.com/business/signup/welcome

  1. Spróbuj odzyskać hasło do e-maila używając tej domeny

Jeśli znasz jakikolwiek ważny adres e-mail używany w tej domenie (jak: admin@email.com lub info@email.com) możesz spróbować odzyskać konto w https://accounts.google.com/signin/v2/recoveryidentifier, a jeśli próba nie wyświetli błędu wskazującego, że Google nie ma pojęcia o tym koncie, to znaczy, że używa Workspace.

Enumeracja e-maili i kont serwisowych

Możliwe jest enumerowanie ważnych e-maili domeny Workspace i e-maili SA poprzez próby przypisania im uprawnień i sprawdzanie komunikatów o błędach. W tym celu wystarczy mieć uprawnienia do przypisania uprawnień do projektu (który może być tylko w twojej własności).

Zauważ, że aby je sprawdzić, ale nawet jeśli istnieją, nie przyznawaj im uprawnienia, możesz użyć typu serviceAccount gdy to jest user i user gdy to jest 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.

Szybszym sposobem na enumerację kont serwisowych w znanych projektach jest po prostu próba dostępu do URL: https://iam.googleapis.com/v1/projects/<project-id>/serviceAccounts/<sa-email> Na przykład: https://iam.googleapis.com/v1/projects/gcp-labs-3uis1xlx/serviceAccounts/appengine-lab-1-tarsget@gcp-labs-3uis1xlx.iam.gserviceaccount.com

Jeśli odpowiedź to 403, oznacza to, że SA istnieje. Ale jeśli odpowiedź to 404, oznacza to, że nie istnieje:

// 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"
}
}

Zauważ, że gdy adres e-mail użytkownika był ważny, komunikat o błędzie wskazywał, że typ nie jest, więc udało nam się odkryć, że adres e-mail support@hacktricks.xyz istnieje, nie przyznając mu żadnych uprawnień.

Możesz zrobić to samo z Kontami Usług używając typu user: zamiast serviceAccount::

# 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.
Wsparcie HackTricks

Last updated