GCP - Storage Enum

Support HackTricks

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 वर्तमान संस्करण से भिन्न हो सकते हैं।

Learn more in the docs.

Retention Policy

यह बताएं कि आप बकेट के अंदर वस्तुओं के हटाने पर प्रतिबंध लगाने के लिए कितने समय तक (कम से कम अनुपालन के लिए बहुत उपयोगी) चाहते हैं। संस्करणन या संरक्षण नीति में से केवल एक को एक ही समय में सक्षम किया जा सकता है

Encryption

डिफ़ॉल्ट रूप से वस्तुएँ Google प्रबंधित कुंजियों का उपयोग करके एन्क्रिप्ट की जाती हैं, लेकिन आप KMS से एक कुंजी का उपयोग भी कर सकते हैं।

Public Access

यह बाहरी उपयोगकर्ताओं (GCP में लॉग इन किए हुए या नहीं) को बकेट की सामग्री तक पहुँच प्रदान करना संभव है। डिफ़ॉल्ट रूप से, जब एक बकेट बनाया जाता है, तो इसमें सार्वजनिक रूप से बकेट को उजागर करने का विकल्प बंद होगा, लेकिन पर्याप्त अनुमतियों के साथ इसे बदला जा सकता है।

बकेट तक पहुँचने के लिए URL का प्रारूप https://storage.googleapis.com/<bucket-name> या https://<bucket_name>.storage.googleapis.com है (दोनों मान्य हैं)।

HMAC Keys

HMAC कुंजी एक प्रकार की क्रेडेंशियल है और इसे Cloud Storage में एक सेवा खाते या उपयोगकर्ता खाते के साथ जोड़ा जा सकता है। आप HMAC कुंजी का उपयोग हस्ताक्षर बनाने के लिए करते हैं जो फिर Cloud Storage के लिए अनुरोधों में शामिल होते हैं। हस्ताक्षर दिखाते हैं कि दिया गया अनुरोध उपयोगकर्ता या सेवा खाते द्वारा अधिकृत है

HMAC कुंजी में दो मुख्य भाग होते हैं, एक एक्सेस आईडी और एक गुप्त

  • Access ID: एक अल्फ़ान्यूमेरिक स्ट्रिंग जो एक विशिष्ट सेवा या उपयोगकर्ता खाते से जुड़ी होती है। जब इसे सेवा खाते से जोड़ा जाता है, तो स्ट्रिंग की लंबाई 61 वर्ण होती है, और जब इसे उपयोगकर्ता खाते से जोड़ा जाता है, तो स्ट्रिंग की लंबाई 24 वर्ण होती है। निम्नलिखित एक एक्सेस आईडी का उदाहरण दिखाता है:

GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA

  • Secret: एक 40-वर्ण की Base-64 एन्कोडेड स्ट्रिंग जो एक विशिष्ट एक्सेस आईडी से जुड़ी होती है। एक गुप्त एक पूर्व-शेयर की गई कुंजी है जिसे केवल आप और Cloud Storage जानते हैं। आप अपने गुप्त का उपयोग हस्ताक्षर बनाने के लिए करते हैं जो प्रमाणीकरण प्रक्रिया का हिस्सा होते हैं। निम्नलिखित एक गुप्त का उदाहरण दिखाता है:

bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ

दोनों एक्सेस आईडी और गुप्त एक HMAC कुंजी की अद्वितीय पहचान करते हैं, लेकिन गुप्त बहुत अधिक संवेदनशील जानकारी है, क्योंकि इसका उपयोग हस्ताक्षर बनाने के लिए किया जाता है।

Enumeration

# 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#<num>' # 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/<storage-name>/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

यदि आपको बाल्टियों की सूची बनाते समय अनुमति अस्वीकृत त्रुटि मिलती है, तो भी आपके पास सामग्री तक पहुंच हो सकती है। तो, अब जब आप बाल्टियों के नाम के नियम के बारे में जानते हैं, तो आप संभावित नामों की एक सूची उत्पन्न कर सकते हैं और उन्हें एक्सेस करने की कोशिश कर सकते हैं:

for i in $(cat wordlist.txt); do gsutil ls -r gs://"$i"; done

storage.objects.list और storage.objects.get अनुमतियों के साथ, आपको बकेट से सभी फ़ोल्डरों और फ़ाइलों को सूचीबद्ध करने में सक्षम होना चाहिए ताकि आप उन्हें डाउनलोड कर सकें। आप इसे इस 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('<storage-name>')

विशेषाधिकार वृद्धि

निम्नलिखित पृष्ठ पर आप विशेषाधिकार बढ़ाने के लिए स्टोरेज अनुमतियों का दुरुपयोग कैसे करें देख सकते हैं:

अनधिकृत Enum

पोस्ट शोषण

स्थिरता

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

Last updated