GCP - Storage Enum
Reading time: 7 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Storage
Google Cloud Platform (GCP) Storage ist eine cloudbasierte Speicherlösung, die hochgradig haltbaren und verfügbaren Objektspeicher für unstrukturierte Daten bietet. Es bietet verschiedene Speicherklassen basierend auf Leistung, Verfügbarkeit und Kosten, einschließlich Standard, Nearline, Coldline und Archive. GCP Storage bietet auch erweiterte Funktionen wie Lebenszyklusrichtlinien, Versionierung und Zugriffskontrolle, um Daten effektiv zu verwalten und zu sichern.
Der Bucket kann in einer Region, in 2 Regionen oder Multi-Region (Standard) gespeichert werden.
Storage Types
- Standard Storage: Dies ist die Standard-Speicheroption, die hohe Leistung und niedrige Latenz für häufig abgerufene Daten bietet. Es eignet sich für eine Vielzahl von Anwendungsfällen, einschließlich Bereitstellung von Website-Inhalten, Streaming von Medien und Hosting von Datenanalyse-Pipelines.
- Nearline Storage: Diese Speicherklasse bietet niedrigere Speicherkosten und etwas höhere Zugriffskosten als Standard Storage. Sie ist für selten abgerufene Daten optimiert, mit einer Mindestspeicherdauer von 30 Tagen. Sie ist ideal für Backup- und Archivierungszwecke.
- Coldline Storage: Diese Speicherklasse ist für langfristige Speicherung von selten abgerufenen Daten optimiert, mit einer Mindestspeicherdauer von 90 Tagen. Sie bietet niedrigere Speicherkosten als Nearline Storage, jedoch mit höheren Zugriffskosten.
- Archive Storage: Diese Speicherklasse ist für kalte Daten konzipiert, die sehr selten abgerufen werden, mit einer Mindestspeicherdauer von 365 Tagen. Sie bietet die niedrigsten Speicherkosten aller GCP-Speicheroptionen, jedoch mit den höchsten Zugriffskosten. Sie eignet sich für die langfristige Aufbewahrung von Daten, die aus Compliance- oder regulatorischen Gründen gespeichert werden müssen.
- Autoclass: Wenn Sie nicht wissen, wie oft Sie auf die Daten zugreifen werden, können Sie Autoclass auswählen, und GCP wird automatisch den Speichertyp für Sie ändern, um Kosten zu minimieren.
Access Control
Standardmäßig wird empfohlen, den Zugriff über IAM zu steuern, aber es ist auch möglich, die Verwendung von ACLs zu aktivieren.
Wenn Sie sich entscheiden, nur IAM (Standard) zu verwenden und 90 Tage vergehen, können Sie ACLs für den Bucket nicht aktivieren.
Versioning
Es ist möglich, die Versionierung zu aktivieren, dies wird alte Versionen der Datei im Bucket speichern. Es ist möglich, die Anzahl der Versionen, die Sie behalten möchten, und sogar wie lange Sie nicht aktuelle Versionen (alte Versionen) aufbewahren möchten, zu konfigurieren. Empfohlen werden 7 Tage für den Standardtyp.
Die Metadaten einer nicht aktuellen Version werden aufbewahrt. Darüber hinaus werden ACLs von nicht aktuellen Versionen ebenfalls aufbewahrt, sodass ältere Versionen möglicherweise andere ACLs als die aktuelle Version haben.
Erfahren Sie mehr in den docs.
Retention Policy
Geben Sie an, wie lange Sie die Löschung von Objekten im Bucket verbieten möchten (sehr nützlich für Compliance mindestens).
Nur eine von Versionierung oder Aufbewahrungsrichtlinie kann gleichzeitig aktiviert werden.
Encryption
Standardmäßig werden Objekte mit von Google verwalteten Schlüsseln verschlüsselt, aber Sie können auch einen Schlüssel von KMS verwenden.
Public Access
Es ist möglich, externen Benutzern (angemeldet bei GCP oder nicht) Zugriff auf den Inhalt von Buckets zu gewähren.
Standardmäßig wird beim Erstellen eines Buckets die Option, den Bucket öffentlich zugänglich zu machen, deaktiviert, aber mit ausreichenden Berechtigungen kann dies geändert werden.
Das Format einer URL, um auf einen Bucket zuzugreifen, ist https://storage.googleapis.com/<bucket-name>
oder https://<bucket_name>.storage.googleapis.com
(beide sind gültig).
HMAC Keys
Ein HMAC-Schlüssel ist eine Art von Credential und kann einem Dienstkonto oder einem Benutzerkonto in Cloud Storage zugeordnet werden. Sie verwenden einen HMAC-Schlüssel, um Signaturen zu erstellen, die dann in Anfragen an Cloud Storage enthalten sind. Signaturen zeigen, dass eine bestimmte Anfrage vom Benutzer oder Dienstkonto autorisiert ist.
HMAC-Schlüssel haben zwei Hauptbestandteile, eine Zugriffs-ID und ein Geheimnis.
- Access ID: Eine alphanumerische Zeichenfolge, die mit einem bestimmten Dienst- oder Benutzerkonto verknüpft ist. Wenn sie mit einem Dienstkonto verknüpft ist, hat die Zeichenfolge eine Länge von 61 Zeichen, und wenn sie mit einem Benutzerkonto verknüpft ist, hat die Zeichenfolge eine Länge von 24 Zeichen. Folgendes zeigt ein Beispiel für eine Zugriffs-ID:
GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA
- Secret: Eine 40-Zeichen lange, Base-64-kodierte Zeichenfolge, die mit einer bestimmten Zugriffs-ID verknüpft ist. Ein Geheimnis ist ein vorab geteilter Schlüssel, den nur Sie und Cloud Storage kennen. Sie verwenden Ihr Geheimnis, um Signaturen als Teil des Authentifizierungsprozesses zu erstellen. Folgendes zeigt ein Beispiel für ein Geheimnis:
bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ
Sowohl die Zugriffs-ID als auch das Geheimnis identifizieren eindeutig einen HMAC-Schlüssel, aber das Geheimnis ist viel sensiblere Informationen, da es verwendet wird, um Signaturen zu erstellen.
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
Wenn Sie einen Berechtigungsfehler beim Auflisten von Buckets erhalten, haben Sie möglicherweise dennoch Zugriff auf den Inhalt. Jetzt, da Sie über die Namenskonvention der Buckets Bescheid wissen, können Sie eine Liste möglicher Namen erstellen und versuchen, auf sie zuzugreifen:
for i in $(cat wordlist.txt); do gsutil ls -r gs://"$i"; done
Mit den Berechtigungen storage.objects.list
und storage.objects.get
sollten Sie in der Lage sein, alle Ordner und Dateien aus dem Bucket aufzulisten, um sie herunterzuladen. Sie können dies mit diesem Python-Skript erreichen:
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>')
Privilegieneskalation
Auf der folgenden Seite können Sie überprüfen, wie man Speicherberechtigungen missbraucht, um Privilegien zu eskalieren:
Unauthentifiziertes Enum
GCP - Storage Unauthenticated Enum
Post-Exploitation
GCP - Storage Post Exploitation
Persistenz
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.