GCP - Storage Enum

Reading time: 7 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Storage

Google Cloud Platform (GCP) Storage je rešenje za skladištenje u oblaku koje pruža visoko izdržljivo i dostupno skladištenje objekata za nestrukturirane podatke. Nudi različite klase skladištenja zasnovane na performansama, dostupnosti i troškovima, uključujući Standard, Nearline, Coldline i Archive. GCP Storage takođe pruža napredne funkcije kao što su politike životnog ciklusa, verzionisanje i kontrola pristupa za efikasno upravljanje i zaštitu podataka.

Kanta može biti smeštena u regionu, u 2 regiona ili multi-region (podrazumevano).

Storage Types

  • Standard Storage: Ovo je podrazumevana opcija skladištenja koja nudi visok učinak, nisku latenciju pristupa često korišćenim podacima. Pogodna je za širok spektar slučajeva upotrebe, uključujući pružanje sadržaja veb stranica, strimovanje medija i hostovanje analitičkih tokova podataka.
  • Nearline Storage: Ova klasa skladištenja nudi niže troškove skladištenja i malo više troškove pristupa od Standard Storage. Optimizovana je za retko pristupane podatke, sa minimalnim vremenom skladištenja od 30 dana. Idealna je za backup i arhiviranje.
  • Coldline Storage: Ova klasa skladištenja je optimizovana za dugoročno skladištenje retko pristupanih podataka, sa minimalnim vremenom skladištenja od 90 dana. Nudi niže troškove skladištenja od Nearline Storage, ali sa višim troškovima pristupa.
  • Archive Storage: Ova klasa skladištenja je dizajnirana za hladne podatke koji se pristupaju veoma retko, sa minimalnim vremenom skladištenja od 365 dana. Nudi najniže troškove skladištenja od svih GCP opcija skladištenja ali sa najvišim troškovima pristupa. Pogodna je za dugoročno čuvanje podataka koji moraju biti skladišteni iz razloga usklađenosti ili regulative.
  • Autoclass: Ako ne znate koliko ćete često pristupati podacima, možete izabrati Autoclass i GCP će automatski promeniti tip skladištenja kako bi minimizirao troškove.

Access Control

Pod razumevanjem je preporučljivo kontrolisati pristup putem IAM, ali je takođe moguće omogućiti korišćenje ACL-a.
Ako izaberete da koristite samo IAM (podrazumevano) i prođe 90 dana, nećete moći da omogućite ACL-e za kantu.

Versioning

Moguće je omogućiti verzionisanje, ovo će sačuvati stare verzije datoteke unutar kante. Moguće je konfigurisati broj verzija koje želite da zadržite i čak koliko dugo želite da neaktuelne verzije (stare verzije) žive. Preporučuje se 7 dana za Standard tip.

Metapodaci neaktuelne verzije se čuvaju. Štaviše, ACL-i neaktuelnih verzija se takođe čuvaju, tako da starije verzije mogu imati različite ACL-e od trenutne verzije.

Saznajte više u docs.

Retention Policy

Naznačite koliko dugo želite da zabranite brisanje objekata unutar kante (veoma korisno za usklađenost barem).
Samo jedna od verzionisanja ili politike zadržavanja može biti omogućena u isto vreme.

Encryption

Podrazumevano, objekti su šifrovani koristeći Google upravljane ključeve, ali takođe možete koristiti ključ iz KMS.

Public Access

Moguće je dati spoljnim korisnicima (prijavljenim u GCP ili ne) pristup sadržaju kanti.
Podrazumevano, kada se kanta kreira, imaće onemogućenu opciju da se javno izloži kanta, ali uz dovoljno dozvola to se može promeniti.

Format URL-a za pristup kanti je https://storage.googleapis.com/<bucket-name> ili https://<bucket_name>.storage.googleapis.com (oba su validna).

HMAC Keys

HMAC ključ je vrsta akreditiva i može biti povezan sa servisnim nalogom ili korisničkim nalogom u Cloud Storage. Koristite HMAC ključ za kreiranje potpisa koji se zatim uključuju u zahteve za Cloud Storage. Potpisi pokazuju da je dati zahtev autorizovan od strane korisnika ili servisnog naloga.

HMAC ključevi imaju dva osnovna dela, ID pristupa i tajnu.

  • Access ID: Alfanumerički niz povezan sa specifičnim servisom ili korisničkim nalogom. Kada je povezan sa servisnim nalogom, niz ima 61 karakter, a kada je povezan sa korisničkim nalogom, niz ima 24 karaktera. Sledeće prikazuje primer ID-a pristupa:

GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA

  • Secret: Niz od 40 karaktera kodiran u Base-64 koji je povezan sa specifičnim ID-om pristupa. Tajna je unapred podeljeni ključ koji samo vi i Cloud Storage znate. Koristite svoju tajnu za kreiranje potpisa kao deo procesa autentifikacije. Sledeće prikazuje primer tajne:

bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ

I ID pristupa i tajna jedinstveno identifikuju HMAC ključ, ali je tajna mnogo osetljivija informacija, jer se koristi za kreiranje potpisa.

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#<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

Ako dobijete grešku "permission denied" prilikom listanja kanti, možda i dalje imate pristup sadržaju. Dakle, sada kada znate o konvenciji imena kanti, možete generisati listu mogućih imena i pokušati da im pristupite:

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

Sa dozvolama storage.objects.list i storage.objects.get, trebali biste moći da enumerišete sve foldere i fajlove iz bucket-a kako biste ih preuzeli. To možete postići ovim Python skriptom:

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>')

Eskalacija privilegija

Na sledećoj stranici možete proveriti kako da zloupotrebite dozvole za skladištenje da biste eskalirali privilegije:

GCP - Storage Privesc

Neautentifikovana enumeracija

GCP - Storage Unauthenticated Enum

Post eksploatacija

GCP - Storage Post Exploitation

Perzistencija

GCP - Storage Persistence

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks