# GCP - Storage Enum {{#include ../../../banners/hacktricks-training.md}} ## Storage Google Cloud Platform (GCP) Storage एक **क्लाउड-आधारित स्टोरेज समाधान** है जो असंरचित डेटा के लिए अत्यधिक टिकाऊ और उपलब्ध वस्तु भंडारण प्रदान करता है। यह प्रदर्शन, उपलब्धता और लागत के आधार पर **विभिन्न स्टोरेज क्लासेस** प्रदान करता है, जिसमें Standard, Nearline, Coldline, और Archive शामिल हैं। GCP Storage उन्नत सुविधाएँ भी प्रदान करता है जैसे कि **लाइफसाइकिल नीतियाँ, संस्करणन, और एक्सेस नियंत्रण** ताकि डेटा को प्रभावी ढंग से प्रबंधित और सुरक्षित किया जा सके। बकेट को एक क्षेत्र, 2 क्षेत्रों या **मल्टी-रीजन (डिफ़ॉल्ट)** में संग्रहीत किया जा सकता है। ### Storage Types - **Standard Storage**: यह डिफ़ॉल्ट स्टोरेज विकल्प है जो **बार-बार एक्सेस किए गए डेटा के लिए उच्च-प्रदर्शन, कम-लेटेंसी एक्सेस प्रदान करता है**। यह वेबसाइट सामग्री, मीडिया स्ट्रीमिंग, और डेटा एनालिटिक्स पाइपलाइनों की मेज़बानी सहित कई उपयोग मामलों के लिए उपयुक्त है। - **Nearline Storage**: यह स्टोरेज क्लास **कम स्टोरेज लागत** और **थोड़ी अधिक एक्सेस लागत** प्रदान करता है। यह कम बार एक्सेस किए गए डेटा के लिए अनुकूलित है, जिसमें न्यूनतम स्टोरेज अवधि 30 दिन है। यह बैकअप और आर्काइव के उद्देश्यों के लिए आदर्श है। - **Coldline Storage**: यह स्टोरेज क्लास **कम बार एक्सेस किए गए डेटा के दीर्घकालिक भंडारण** के लिए अनुकूलित है, जिसमें न्यूनतम स्टोरेज अवधि 90 दिन है। यह Nearline Storage की तुलना में **कम स्टोरेज लागत** प्रदान करता है, लेकिन **उच्च एक्सेस लागत** के साथ। - **Archive Storage**: यह स्टोरेज क्लास ठंडे डेटा के लिए डिज़ाइन किया गया है जिसे **बहुत कम बार एक्सेस किया जाता है**, जिसमें न्यूनतम स्टोरेज अवधि 365 दिन है। यह सभी GCP स्टोरेज विकल्पों में **सबसे कम स्टोरेज लागत** प्रदान करता है लेकिन **सबसे अधिक एक्सेस लागत** के साथ। यह डेटा के दीर्घकालिक संरक्षण के लिए उपयुक्त है जिसे अनुपालन या नियामक कारणों से संग्रहीत करने की आवश्यकता होती है। - **Autoclass**: यदि आप **नहीं जानते कि आप डेटा को कितना एक्सेस करने वाले हैं** तो आप Autoclass का चयन कर सकते हैं और GCP **स्वचालित रूप से आपके लिए स्टोरेज का प्रकार बदल देगा ताकि लागत को कम किया जा सके**। ### Access Control **डिफ़ॉल्ट** रूप से, एक्सेस को **IAM** के माध्यम से नियंत्रित करने की **सिफारिश की जाती है**, लेकिन **ACLs** के उपयोग को **सक्षम करना भी संभव है**।\ यदि आप केवल IAM (डिफ़ॉल्ट) का उपयोग करने का चयन करते हैं और **90 दिन बीत जाते हैं**, तो आप **बकेट के लिए ACLs सक्षम नहीं कर पाएंगे**। ### Versioning संस्करणन को सक्षम करना संभव है, यह **बकेट के अंदर फ़ाइल के पुराने संस्करणों को सहेजता है**। यह **संस्करणों की संख्या को कॉन्फ़िगर करना संभव है जिसे आप रखना चाहते हैं** और यहां तक कि **कितने समय तक** आप **गैर-प्रचलित** संस्करणों (पुराने संस्करणों) को जीवित रखना चाहते हैं। **Standard प्रकार के लिए 7 दिन** की सिफारिश की जाती है। **गैर-प्रचलित संस्करण का मेटाडेटा रखा जाता है**। इसके अलावा, **गैर-प्रचलित संस्करणों के ACLs भी रखे जाते हैं**, इसलिए पुराने संस्करणों के ACLs वर्तमान संस्करण से भिन्न हो सकते हैं। [**docs**](https://cloud.google.com/storage/docs/object-versioning) में अधिक जानें। ### Retention Policy यह बताएं कि आप **बकेट के अंदर वस्तुओं के हटाने पर प्रतिबंध लगाने के लिए कितने समय तक** चाहते हैं (कम से कम अनुपालन के लिए बहुत उपयोगी)।\ **संस्करणन या रिटेंशन नीति में से केवल एक को एक ही समय में सक्षम किया जा सकता है**। ### Encryption डिफ़ॉल्ट रूप से वस्तुएं **Google प्रबंधित कुंजियों का उपयोग करके एन्क्रिप्ट की जाती हैं**, लेकिन आप **KMS से एक कुंजी** का भी उपयोग कर सकते हैं। ### Public Access यह **बाहरी उपयोगकर्ताओं** (GCP में लॉग इन किए हुए या नहीं) को **बकेट की सामग्री तक पहुंच प्रदान करना संभव है**।\ डिफ़ॉल्ट रूप से, जब एक बकेट बनाया जाता है, तो इसमें **सार्वजनिक रूप से उजागर करने का विकल्प बंद** होगा, लेकिन पर्याप्त अनुमतियों के साथ इसे बदला जा सकता है। बकेट तक पहुंचने के लिए **URL का प्रारूप** है **`https://storage.googleapis.com/` या `https://.storage.googleapis.com`** (दोनों मान्य हैं)। ### HMAC Keys HMAC कुंजी एक प्रकार की _प्रमाणपत्र_ है और इसे **Cloud Storage में एक सेवा खाते या उपयोगकर्ता खाते के साथ जोड़ा जा सकता है**। आप HMAC कुंजी का उपयोग _हस्ताक्षर_ बनाने के लिए करते हैं जो फिर Cloud Storage के लिए अनुरोधों में शामिल होते हैं। हस्ताक्षर दिखाते हैं कि **दिया गया अनुरोध उपयोगकर्ता या सेवा खाते द्वारा अधिकृत है**। HMAC कुंजी में दो मुख्य भाग होते हैं, एक _एक्सेस ID_ और एक _गुप्त_। - **Access ID**: एक अल्फ़ान्यूमेरिक स्ट्रिंग जो एक विशिष्ट सेवा या उपयोगकर्ता खाते से जुड़ी होती है। जब इसे सेवा खाते से जोड़ा जाता है, तो स्ट्रिंग की लंबाई 61 वर्ण होती है, और जब इसे उपयोगकर्ता खाते से जोड़ा जाता है, तो स्ट्रिंग की लंबाई 24 वर्ण होती है। निम्नलिखित एक एक्सेस ID का उदाहरण दिखाता है: `GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA` - **Secret**: एक 40-वर्ण का Base-64 एन्कोडेड स्ट्रिंग जो एक विशिष्ट एक्सेस ID से जुड़ी होती है। एक गुप्त एक पूर्व-शेयर की गई कुंजी है जिसे केवल आप और Cloud Storage जानते हैं। आप अपने गुप्त का उपयोग प्रमाणीकरण प्रक्रिया के हिस्से के रूप में हस्ताक्षर बनाने के लिए करते हैं। निम्नलिखित एक गुप्त का उदाहरण दिखाता है: `bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ` दोनों **एक्सेस ID और गुप्त एक HMAC कुंजी की अद्वितीय पहचान करते हैं**, लेकिन गुप्त बहुत अधिक संवेदनशील जानकारी है, क्योंकि इसका उपयोग **हस्ताक्षर बनाने** के लिए किया जाता है। ### Enumeration ```bash # List all storage buckets in project gsutil ls # Get each bucket configuration (protections, CLs, times, configs...) gsutil ls -L # List contents of a specific bucket gsutil ls gs://bucket-name/ gsutil ls -r gs://bucket-name/ # Recursive gsutil ls -a gs://bucket-name/ # Get ALL versions of objects # Cat the context of a file without copying it locally gsutil cat 'gs://bucket-name/folder/object' gsutil cat 'gs://bucket-name/folder/object#' # cat specific version # Copy an object from the bucket to your local storage for review gsutil cp gs://bucket-name/folder/object ~/ # List using a raw OAuth token ## Useful because "CLOUDSDK_AUTH_ACCESS_TOKEN" and "gcloud config set auth/access_token_file" doesn't work with gsutil curl -H "Authorization: Bearer $TOKEN" "https://storage.googleapis.com/storage/v1/b//o" # Download file content from bucket curl -H "Authorization: Bearer $TOKEN" "https://storage.googleapis.com/storage/v1/b/supportstorage-58249/o/flag.txt?alt=media" --output - # Enumerate HMAC keys gsutil hmac list # Get permissions gcloud storage buckets get-iam-policy gs://bucket-name/ gcloud storage objects get-iam-policy gs://bucket-name/folder/object ``` यदि आपको बकेट्स की सूची बनाते समय अनुमति अस्वीकृत त्रुटि मिलती है, तो भी आपके पास सामग्री तक पहुंच हो सकती है। तो, अब जब आप बकेट्स के नाम के नियम के बारे में जानते हैं, तो आप संभावित नामों की एक सूची उत्पन्न कर सकते हैं और उन्हें एक्सेस करने की कोशिश कर सकते हैं: ```bash for i in $(cat wordlist.txt); do gsutil ls -r gs://"$i"; done ``` `storage.objects.list` और `storage.objects.get` अनुमतियों के साथ, आपको बकेट से सभी फ़ोल्डरों और फ़ाइलों को सूचीबद्ध करने में सक्षम होना चाहिए ताकि आप उन्हें डाउनलोड कर सकें। आप इसे इस Python स्क्रिप्ट के साथ प्राप्त कर सकते हैं: ```python import requests import xml.etree.ElementTree as ET def list_bucket_objects(bucket_name, prefix='', marker=None): url = f"https://storage.googleapis.com/{bucket_name}?prefix={prefix}" if marker: url += f"&marker={marker}" response = requests.get(url) xml_data = response.content root = ET.fromstring(xml_data) ns = {'ns': 'http://doc.s3.amazonaws.com/2006-03-01'} for contents in root.findall('.//ns:Contents', namespaces=ns): key = contents.find('ns:Key', namespaces=ns).text print(key) next_marker = root.find('ns:NextMarker', namespaces=ns) if next_marker is not None: next_marker_value = next_marker.text list_bucket_objects(bucket_name, prefix, next_marker_value) list_bucket_objects('') ``` ### विशेषाधिकार वृद्धि अगली पृष्ठ पर आप **विशेषाधिकार बढ़ाने के लिए स्टोरेज अनुमतियों का दुरुपयोग कैसे करें** देख सकते हैं: {{#ref}} ../gcp-privilege-escalation/gcp-storage-privesc.md {{#endref}} ### अनधिकृत Enum {{#ref}} ../gcp-unauthenticated-enum-and-access/gcp-storage-unauthenticated-enum/ {{#endref}} ### पोस्ट एक्सप्लोइटेशन {{#ref}} ../gcp-post-exploitation/gcp-storage-post-exploitation.md {{#endref}} ### स्थिरता {{#ref}} ../gcp-persistence/gcp-storage-persistence.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}}