GCP - IAM, Principals & Org Unauthenticated Enum

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj 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"

Jeśli coś takiego jak include:_spf.google.com również się pojawi, potwierdza to (zauważ, że jeśli się nie pojawi, to nie zaprzecza, ponieważ domena może być w Workspace bez używania gmaila jako dostawcy poczty).

  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.

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks