# GCP - IAM, Principals & Org Unauthenticated Enum

{{#include ../../../banners/hacktricks-training.md}}

## Iam & GCP Principals

Vir meer inligting, kyk:

{{#ref}}
../gcp-services/gcp-iam-and-org-policies-enum.md
{{#endref}}

### Word domein in Workspace gebruik?

1. **Kontroleer DNS rekords**

As dit 'n **`google-site-verification`** rekord het, is dit waarskynlik dat dit (of dit was) Workspace gebruik:
```
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"
```
As iets soos **`include:_spf.google.com`** ook verskyn, bevestig dit dit (let daarop dat as dit nie verskyn nie, dit nie ontken nie, aangesien 'n domein in Workspace kan wees sonder om gmail as e-posverskaffer te gebruik).

2. **Probeer om 'n Workspace met daardie domein op te stel**

'n Ander opsie is om te probeer om 'n Workspace met die domein op te stel. As dit **kla dat die domein reeds gebruik word** (soos in die beeld), weet jy dit is reeds gebruik!

Om 'n Workspace-domein op te stel, volg: [https://workspace.google.com/business/signup/welcome](https://workspace.google.com/business/signup/welcome)

<figure><img src="../../../images/image (330).png" alt=""><figcaption></figcaption></figure>

3. **Probeer om die wagwoord van 'n e-pos met daardie domein te herstel**

As jy enige geldige e-posadres weet wat in daardie domein gebruik word (soos: admin@email.com of info@email.com), kan jy probeer om die **rekening te herstel** in [https://accounts.google.com/signin/v2/recoveryidentifier](https://accounts.google.com/signin/v2/recoveryidentifier), en as die poging nie 'n fout toon wat aandui dat Google geen idee het van daardie rekening nie, dan gebruik dit Workspace.

### Enumereer e-posse en diensrekeninge

Dit is moontlik om **geldige e-posse van 'n Workspace-domein en SA-e-posse** te enumereer deur te probeer om hulle toestemmings toe te ken en die foutboodskappe te kontroleer. Hiervoor moet jy net toestemming hê om toestemming aan 'n projek toe te ken (wat net deur jou besit kan word).

Let daarop dat om hulle te kontroleer, maar selfs al bestaan hulle, nie 'n toestemming aan hulle te verleen nie, kan jy die tipe **`serviceAccount`** gebruik wanneer dit 'n **`user`** is en **`user`** wanneer dit 'n **`SA`** is:
```bash
# 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.
```
'n Sneller manier om diensrekeninge in bekende projekte te evalueer, is om net te probeer om toegang te verkry tot die URL: `https://iam.googleapis.com/v1/projects/<project-id>/serviceAccounts/<sa-email>`\
Byvoorbeeld: `https://iam.googleapis.com/v1/projects/gcp-labs-3uis1xlx/serviceAccounts/appengine-lab-1-tarsget@gcp-labs-3uis1xlx.iam.gserviceaccount.com`

As die antwoord 'n 403 is, beteken dit dat die SA bestaan. Maar as die antwoord 'n 404 is, beteken dit dat dit nie bestaan nie:
```json
// 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"
}
}
```
Let op hoe wanneer die gebruiker se e-pos geldig was, die foutboodskap aangedui het dat hulle tipe nie is nie, so ons het daarin geslaag om te ontdek dat die e-pos support@hacktricks.xyz bestaan sonder om enige voorregte toe te ken.

Jy kan die **selfde doen met Diensrekeninge** deur die tipe **`user:`** te gebruik in plaas van **`serviceAccount:`**:
```bash
# 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.
```
{{#include ../../../banners/hacktricks-training.md}}
