# GCP - Cloud Functions Enum {{#include ../../../banners/hacktricks-training.md}} ## Cloud Functions [Google Cloud Functions](https://cloud.google.com/functions/) आपके कोड को होस्ट करने के लिए डिज़ाइन किए गए हैं, जो **घटनाओं के जवाब में निष्पादित होता है**, बिना होस्ट ऑपरेटिंग सिस्टम के प्रबंधन की आवश्यकता के। इसके अतिरिक्त, ये फ़ंक्शन पर्यावरण चर के भंडारण का समर्थन करते हैं, जिसका उपयोग कोड कर सकता है। ### Storage Cloud Functions **कोड GCP Storage में संग्रहीत होता है**। इसलिए, GCP में **बकेट पर पढ़ने की पहुंच** रखने वाला कोई भी व्यक्ति **Cloud Functions कोड को पढ़ सकेगा**।\ कोड एक बकेट में निम्नलिखित में से एक की तरह संग्रहीत होता है: - `gcf-sources--/-/version-/function-source.zip` - `gcf-v2-sources--/function-source.zip` उदाहरण के लिए:\ `gcf-sources-645468741258-us-central1/function-1-003dcbdf-32e1-430f-a5ff-785a6e238c76/version-4/function-source.zip` > [!WARNING] > बकेट में **पढ़ने के अधिकार** रखने वाला कोई भी उपयोगकर्ता **निष्पादित कोड को पढ़ सकता है**। ### Artifact Registry यदि क्लाउड फ़ंक्शन इस तरह से कॉन्फ़िगर किया गया है कि निष्पादित Docker कंटेनर प्रोजेक्ट के अंदर एक Artifact Registry रिपॉजिटरी के अंदर संग्रहीत है, तो रिपॉजिटरी पर पढ़ने की पहुंच रखने वाला कोई भी व्यक्ति छवि डाउनलोड कर सकेगा और स्रोत कोड की जांच कर सकेगा। अधिक जानकारी के लिए देखें: {{#ref}} gcp-artifact-registry-enum.md {{#endref}} ### SA यदि निर्दिष्ट नहीं किया गया है, तो डिफ़ॉल्ट रूप से **App Engine Default Service Account** को **प्रोजेक्ट पर संपादक अनुमतियों** के साथ Cloud Function से जोड़ा जाएगा। ### Triggers, URL & Authentication जब एक Cloud Function बनाई जाती है, तो **trigger** को निर्दिष्ट करना आवश्यक है। एक सामान्य ट्रिगर **HTTPS** है, यह **एक URL बनाएगा जहां फ़ंक्शन** को वेब ब्राउज़िंग के माध्यम से ट्रिगर किया जा सकता है।\ अन्य ट्रिगर्स हैं pub/sub, Storage, Filestore... URL प्रारूप है **`https://-.cloudfunctions.net/`** जब HTTPS ट्रिगर का उपयोग किया जाता है, तो यह भी संकेतित किया जाता है कि **कॉलर को फ़ंक्शन को कॉल करने के लिए IAM प्राधिकरण** की आवश्यकता है या यदि **कोई भी** इसे बस कॉल कर सकता है:
### Inside the Cloud Function कोड **`/workspace`** फ़ोल्डर के अंदर **डाउनलोड किया जाता है** जिसमें फ़ाइलों के वही फ़ाइल नाम होते हैं जो Cloud Function में फ़ाइलों के होते हैं और इसे उपयोगकर्ता `www-data` के साथ निष्पादित किया जाता है।\ डिस्क **पढ़ने के लिए केवल माउंट नहीं किया गया है।** ### Enumeration ```bash # List functions gcloud functions list gcloud functions describe # Check triggers to see how is this function invoked gcloud functions get-iam-policy # Get logs of previous runs. By default, limits to 10 lines gcloud functions logs read --limit [NUMBER] # Call a function curl https://-.cloudfunctions.net/ gcloud functions call --data='{"message": "Hello World!"}' # If you know the name of projects you could try to BF cloud functions names # Get events that could be used to trigger a cloud function gcloud functions event-types list # Access function with authentication curl -X POST https://-.cloudfunctions.net/ \ -H "Authorization: bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{}' ``` ### विशेषाधिकार वृद्धि अगली पृष्ठ पर, आप देख सकते हैं कि कैसे **क्लाउड फ़ंक्शन अनुमतियों का दुरुपयोग करके विशेषाधिकार बढ़ाए जाएं**: {{#ref}} ../gcp-privilege-escalation/gcp-cloudfunctions-privesc.md {{#endref}} ### अनधिकृत पहुंच {{#ref}} ../gcp-unauthenticated-enum-and-access/gcp-cloud-functions-unauthenticated-enum.md {{#endref}} ### पोस्ट एक्सप्लोइटेशन {{#ref}} ../gcp-post-exploitation/gcp-cloud-functions-post-exploitation.md {{#endref}} ### स्थिरता {{#ref}} ../gcp-persistence/gcp-cloud-functions-persistence.md {{#endref}} ## संदर्भ - [https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/#reviewing-stackdriver-logging](https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/#reviewing-stackdriver-logging) {{#include ../../../banners/hacktricks-training.md}}