# GCP Pentesting

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

## Basiese Inligting

**Voordat jy begin pentesting** 'n **GCP** omgewing, is daar 'n paar **basiese dinge wat jy moet weet** oor hoe dit werk om jou te help verstaan wat jy moet doen, hoe om miskonfigurasies te vind en hoe om dit te benut.

Konsepte soos **organisasie** hiërargie, **toestemmings** en ander basiese konsepte word verduidelik in:

{{#ref}}
gcp-basic-information/
{{#endref}}

## Laboratoriums om te leer

- [https://gcpgoat.joshuajebaraj.com/](https://gcpgoat.joshuajebaraj.com/)
- [https://github.com/ine-labs/GCPGoat](https://github.com/ine-labs/GCPGoat)
- [https://github.com/lacioffi/GCP-pentest-lab/](https://github.com/lacioffi/GCP-pentest-lab/)
- [https://github.com/carlospolop/gcp_privesc_scripts](https://github.com/carlospolop/gcp_privesc_scripts)

## GCP Pentester/Red Team Metodologie

Om 'n GCP omgewing te oudit, is dit baie belangrik om te weet: watter **dienste gebruik word**, wat is **blootgestel**, wie het **toegang** tot wat, en hoe is interne GCP dienste en **eksterne dienste** gekoppel.

Vanuit 'n Red Team perspektief, is die **eerste stap om 'n GCP omgewing te kompromitteer** om daarin te slaag om 'n paar **akkrediteer** te verkry. Hier is 'n paar idees oor hoe om dit te doen:

- **Leaks** in github (of soortgelyk) - OSINT
- **Sosiale** Ingenieurswese (Kyk die bladsy [**Workspace Security**](../workspace-security/index.html))
- **Wagwoord** hergebruik (wagwoord leaks)
- Kw vulnerabilities in GCP-gehoste toepassings
- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) met toegang tot metadata eindpunt
- **Plaaslike Lêer Lees**
- `/home/USERNAME/.config/gcloud/*`
- `C:\Users\USERNAME\.config\gcloud\*`
- 3de partye **gekompromitteer**
- **Interne** Werknemer

Of deur **'n nie-geauthentiseerde diens** wat blootgestel is te kompromitteer:

{{#ref}}
gcp-unauthenticated-enum-and-access/
{{#endref}}

Of as jy 'n **hersiening** doen, kan jy net **vraag vir akkrediteer** met hierdie rolle:

{{#ref}}
gcp-permissions-for-a-pentest.md
{{#endref}}

> [!NOTE]
> Nadat jy daarin geslaag het om akkrediteer te verkry, moet jy weet **aan wie behoort daardie akkrediteer**, en **waartoe hulle toegang het**, so jy moet 'n paar basiese enumerasie uitvoer:

## Basiese Enumerasie

### **SSRF**

Vir meer inligting oor hoe om **GCP metadata te enumerate**, kyk die volgende hacktricks bladsy:

{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
{{#endref}}

### Whoami

In GCP kan jy verskeie opsies probeer om te probeer raai wie jy is:
```bash
#If you are inside a compromise machine
gcloud auth list
curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=$(gcloud auth print-access-token)" https://www.googleapis.com/oauth2/v1/tokeninfo
gcloud auth print-identity-token #Get info from the token

#If you compromised a metadata token or somehow found an OAuth token
curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=<token>" https://www.googleapis.com/oauth2/v1/tokeninfo
```
Jy kan ook die API-eindpunt `/userinfo` gebruik om meer inligting oor die gebruiker te verkry:
```bash
curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: OAuth $(gcloud auth print-access-token)" https://www.googleapis.com/oauth2/v1/userinfo

curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: OAuth <access_token>" https://www.googleapis.com/oauth2/v1/userinfo
```
### Organisasie Enumerasie
```bash
# Get organizations
gcloud organizations list #The DIRECTORY_CUSTOMER_ID is the Workspace ID
gcloud resource-manager folders list --organization <org_number> # Get folders
gcloud projects list # Get projects
```
### Beginsels & IAM Enumerasie

As jy genoeg regte het, **sal die nagaan van die voorregte van elke entiteit binne die GCP-rekening** jou help om te verstaan wat jy en ander identiteite kan doen en hoe om **voorregte te verhoog**.

As jy nie genoeg regte het om IAM te enumereer nie, kan jy dit **steal brute-force** om dit uit te vind.\
Kyk **hoe om die numerasie en brute-forcing** te doen in:

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

> [!NOTE]
> Nou dat jy **'n bietjie inligting oor jou akrediteer** het (en as jy 'n red team is, hoop ek jy **is nie opgespoor nie**). Dit is tyd om uit te vind watter dienste in die omgewing gebruik word.\
> In die volgende afdeling kan jy 'n paar maniere kyk om **'n paar algemene dienste te enumereer.**

## Dienste Enumerasie

GCP het 'n verbasende hoeveelheid dienste, in die volgende bladsy sal jy **basiese inligting, enumerasie** cheatsheets vind, hoe om **opsporing te vermy**, **volharding** te verkry, en ander **post-exploitation** truuks oor sommige van hulle:

{{#ref}}
gcp-services/
{{#endref}}

Let daarop dat jy **nie** al die werk **handmatig** hoef te doen nie, hieronder in hierdie pos kan jy 'n **afdeling oor** [**outomatiese gereedskap**](#automatic-tools) vind.

Boonop, in hierdie fase mag jy **meer dienste ontdek het wat aan nie-geverifieerde gebruikers blootgestel is,** jy mag in staat wees om dit te benut:

{{#ref}}
gcp-unauthenticated-enum-and-access/
{{#endref}}

## Voorreg Verhoging, Post Exploitatie & Volharding

Die mees algemene manier, sodra jy 'n paar wolk akrediteer of 'n paar dienste wat binne 'n wolk loop gecompromitteer het, is om **misgeconfigureerde voorregte** wat die gecompromitteerde rekening mag hê, te **misbruik**. So, die eerste ding wat jy moet doen is om jou voorregte te enumereer.

Boonop, tydens hierdie enumerasie, onthou dat **regte op die hoogste vlak van "Organisasie"** gestel kan word.

{{#ref}}
gcp-privilege-escalation/
{{#endref}}

{{#ref}}
gcp-post-exploitation/
{{#endref}}

{{#ref}}
gcp-persistence/
{{#endref}}

### Publiek Blootgestelde Dienste

Terwyl jy GCP dienste enumereer, mag jy sommige van hulle **elemente aan die Internet blootstel** (VM/Containers poorte, databasisse of wagdiens, snapshots of emmers...).\
As pentester/red teamer moet jy altyd kyk of jy **sensitiewe inligting / kwesbaarhede** op hulle kan vind, aangesien dit jou **verdere toegang tot die AWS-rekening** mag bied.

In hierdie boek behoort jy **inligting** te vind oor hoe om **blootgestelde GCP dienste te vind en hoe om dit te kontroleer**. Oor hoe om **kwesbaarhede in blootgestelde netwerkdienste te vind**, sou ek jou aanbeveel om te **soek** na die spesifieke **diens** in:

{{#ref}}
https://book.hacktricks.wiki/
{{#endref}}

## GCP <--> Workspace Pivotering

**Die kompromentering** van beginsels in **een** platform mag 'n aanvaller toelaat om die **ander een te kompromenteer**, kyk dit in:

{{#ref}}
gcp-to-workspace-pivoting/
{{#endref}}

## Outomatiese Gereedskap

- In die **GCloud konsole**, in [https://console.cloud.google.com/iam-admin/asset-inventory/dashboard](https://console.cloud.google.com/iam-admin/asset-inventory/dashboard) kan jy hulpbronne en IAM's sien wat deur die projek gebruik word.
- Hier kan jy die bates sien wat deur hierdie API ondersteun word: [https://cloud.google.com/asset-inventory/docs/supported-asset-types](https://cloud.google.com/asset-inventory/docs/supported-asset-types)
- Kyk **gereedskap** wat [**in verskeie wolke hier gebruik kan word**](../pentesting-cloud-methodology.md).
- [**gcp_scanner**](https://github.com/google/gcp_scanner): Dit is 'n GCP hulpbron skandeerder wat kan help om te bepaal watter **vlak van toegang sekere akrediteer het** op GCP.
```bash
# Install
git clone https://github.com/google/gcp_scanner.git
cd gcp_scanner
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.txt
# Execute with gcloud creds
python3 __main__.py -o /tmp/output/ -g "$HOME/.config/gcloud"
```
- [**gcp_enum**](https://gitlab.com/gitlab-com/gl-security/threatmanagement/redteam/redteam-public/gcp_enum): Bash-skrip om 'n GCP-omgewing te evalueer met behulp van gcloud cli en die resultate in 'n lêer te stoor.
- [**GCP-IAM-Privilege-Escalation**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation): Skripte om hoë IAM-privileges te evalueer en om privileges in GCP te verhoog deur dit te misbruik (Ek kon nie die evalueer-skrip laat loop nie).
- [**BF My GCP Permissions**](https://github.com/carlospolop/bf_my_gcp_permissions): Skrip om jou toestemmings te bruteforce.

## gcloud konfigurasie & foutopsporing
```bash
# Login so gcloud can use your credentials
gcloud auth login
gcloud config set project security-devbox
gcloud auth print-access-token

# Login so SDKs can use your user credentials
gcloud auth application-default login
gcloud auth application-default set-quota-project security-devbox
gcloud auth application-default print-access-token

# Update gcloud
gcloud components update
```
### Capture gcloud, gsutil... netwerk

Onthou dat jy die **parameter** **`--log-http`** met die **`gcloud`** cli kan gebruik om die **versoeke** wat die hulpmiddel uitvoer te **druk**. As jy nie wil hê die logs moet die token waarde redigeer nie, gebruik `gcloud config set log_http_redact_token false`

Boonop, om die kommunikasie te onderskep:
```bash
gcloud config set proxy/address 127.0.0.1
gcloud config set proxy/port 8080
gcloud config set proxy/type http
gcloud config set auth/disable_ssl_validation True

# If you don't want to completely disable ssl_validation use:
gcloud config set core/custom_ca_certs_file cert.pem

# Back to normal
gcloud config unset proxy/address
gcloud config unset proxy/port
gcloud config unset proxy/type
gcloud config unset auth/disable_ssl_validation
gcloud config unset core/custom_ca_certs_file
```
### OAuth-token konfigureer in gcloud

Om **'n uitgeputte diensrekening OAuth-token van die metadata-eindpunt te gebruik** kan jy net doen:
```bash
# Via env vars
export CLOUDSDK_AUTH_ACCESS_TOKEN=<token>
gcloud projects list

# Via setup
echo "<token>" > /some/path/to/token
gcloud config set auth/access_token_file /some/path/to/token
gcloud projects list
gcloud config unset auth/access_token_file
```
## Verwysings

- [https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/](https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/)

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