GCP - Storage Enum
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Stockage
Google Cloud Platform (GCP) Storage est une solution de stockage basĂ©e sur le cloud qui fournit un stockage dâobjets hautement durable et disponible pour des donnĂ©es non structurĂ©es. Il offre diffĂ©rentes classes de stockage basĂ©es sur la performance, la disponibilitĂ© et le coĂ»t, y compris Standard, Nearline, Coldline et Archive. GCP Storage fournit Ă©galement des fonctionnalitĂ©s avancĂ©es telles que les politiques de cycle de vie, la gestion des versions et le contrĂŽle dâaccĂšs pour gĂ©rer et sĂ©curiser les donnĂ©es efficacement.
Le bucket peut ĂȘtre stockĂ© dans une rĂ©gion, dans 2 rĂ©gions ou multi-rĂ©gion (par dĂ©faut).
Types de stockage
- Stockage standard : Câest lâoption de stockage par dĂ©faut qui offre un accĂšs Ă haute performance et faible latence aux donnĂ©es frĂ©quemment consultĂ©es. Il convient Ă un large Ă©ventail de cas dâutilisation, y compris la diffusion de contenu de site Web, le streaming multimĂ©dia et lâhĂ©bergement de pipelines dâanalyse de donnĂ©es.
- Stockage Nearline : Cette classe de stockage offre des coĂ»ts de stockage infĂ©rieurs et des coĂ»ts dâaccĂšs lĂ©gĂšrement plus Ă©levĂ©s que le stockage standard. Il est optimisĂ© pour les donnĂ©es rarement consultĂ©es, avec une durĂ©e de stockage minimale de 30 jours. Il est idĂ©al pour les sauvegardes et les archives.
- Stockage Coldline : Cette classe de stockage est optimisĂ©e pour le stockage Ă long terme de donnĂ©es rarement consultĂ©es, avec une durĂ©e de stockage minimale de 90 jours. Il offre des coĂ»ts de stockage infĂ©rieurs Ă ceux du stockage Nearline, mais avec des coĂ»ts dâaccĂšs plus Ă©levĂ©s.
- Stockage Archive : Cette classe de stockage est conçue pour les donnĂ©es froides qui sont consultĂ©es trĂšs rarement, avec une durĂ©e de stockage minimale de 365 jours. Elle offre les coĂ»ts de stockage les plus bas de toutes les options de stockage GCP, mais avec les coĂ»ts dâaccĂšs les plus Ă©levĂ©s. Elle convient Ă la conservation Ă long terme des donnĂ©es qui doivent ĂȘtre stockĂ©es pour des raisons de conformitĂ© ou rĂ©glementaires.
- Autoclass : Si vous ne savez pas combien de fois vous allez accéder aux données, vous pouvez sélectionner Autoclass et GCP changera automatiquement le type de stockage pour vous afin de minimiser les coûts.
ContrĂŽle dâaccĂšs
Par dĂ©faut, il est recommandĂ© de contrĂŽler lâaccĂšs via IAM, mais il est Ă©galement possible dâactiver lâutilisation des ACL.
Si vous choisissez dâutiliser uniquement IAM (par dĂ©faut) et que 90 jours passent, vous ne pourrez pas activer les ACL pour le bucket.
Gestion des versions
Il est possible dâactiver la gestion des versions, cela sauvera les anciennes versions du fichier Ă lâintĂ©rieur du bucket. Il est possible de configurer le nombre de versions que vous souhaitez conserver et mĂȘme combien de temps vous souhaitez que les versions non courantes (anciennes versions) vivent. Il est recommandĂ© de 7 jours pour le type Standard.
Les mĂ©tadonnĂ©es dâune version non courante sont conservĂ©es. De plus, les ACL des versions non courantes sont Ă©galement conservĂ©es, donc les anciennes versions peuvent avoir des ACL diffĂ©rentes de la version actuelle.
En savoir plus dans les docs.
Politique de conservation
Indiquez combien de temps vous souhaitez interdire la suppression des objets Ă lâintĂ©rieur du bucket (trĂšs utile pour la conformitĂ© au moins).
Une seule de la gestion des versions ou de la politique de conservation peut ĂȘtre activĂ©e Ă la fois.
Chiffrement
Par dĂ©faut, les objets sont chiffrĂ©s Ă lâaide de clĂ©s gĂ©rĂ©es par Google, mais vous pouvez Ă©galement utiliser une clĂ© de KMS.
AccĂšs public
Il est possible de donner un accÚs aux utilisateurs externes (connectés à GCP ou non) au contenu des buckets.
Par dĂ©faut, lorsquâun bucket est créé, il aura dĂ©sactivĂ© lâoption dâexposition publique du bucket, mais avec suffisamment de permissions, cela peut ĂȘtre changĂ©.
Le format dâune URL pour accĂ©der Ă un bucket est https://storage.googleapis.com/<bucket-name> ou https://<bucket_name>.storage.googleapis.com (les deux sont valides).
Clés HMAC
Une clĂ© HMAC est un type de credential et peut ĂȘtre associĂ©e Ă un compte de service ou Ă un compte utilisateur dans Cloud Storage. Vous utilisez une clĂ© HMAC pour crĂ©er des signatures qui sont ensuite incluses dans les requĂȘtes Ă Cloud Storage. Les signatures montrent quâune demande donnĂ©e est autorisĂ©e par lâutilisateur ou le compte de service.
Les clĂ©s HMAC ont deux Ă©lĂ©ments principaux, un ID dâaccĂšs et un secret.
- ID dâaccĂšs : Une chaĂźne alphanumĂ©rique liĂ©e Ă un compte de service ou utilisateur spĂ©cifique. Lorsquâelle est liĂ©e Ă un compte de service, la chaĂźne fait 61 caractĂšres de long, et lorsquâelle est liĂ©e Ă un compte utilisateur, la chaĂźne fait 24 caractĂšres de long. Voici un exemple dâun ID dâaccĂšs :
GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA
- Secret : Une chaĂźne codĂ©e en Base-64 de 40 caractĂšres qui est liĂ©e Ă un ID dâaccĂšs spĂ©cifique. Un secret est une clĂ© prĂ©partagĂ©e que vous et Cloud Storage connaissez uniquement. Vous utilisez votre secret pour crĂ©er des signatures dans le cadre du processus dâauthentification. Voici un exemple dâun secret :
bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ
Ă la fois lâID dâaccĂšs et le secret identifient de maniĂšre unique une clĂ© HMAC, mais le secret est une information beaucoup plus sensible, car il est utilisĂ© pour crĂ©er des signatures.
ĂnumĂ©ration
# 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
Si vous obtenez une erreur de permission refusĂ©e en listant les buckets, vous pouvez toujours avoir accĂšs au contenu. Donc, maintenant que vous connaissez la convention de nommage des buckets, vous pouvez gĂ©nĂ©rer une liste de noms possibles et essayer dây accĂ©der :
for i in $(cat wordlist.txt); do gsutil ls -r gs://"$i"; done
Avec les permissions storage.objects.list et storage.objects.get, vous devriez ĂȘtre en mesure dâĂ©numĂ©rer tous les dossiers et fichiers du bucket afin de les tĂ©lĂ©charger. Vous pouvez y parvenir avec ce script 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>')
Escalade de privilĂšges
Dans la page suivante, vous pouvez vérifier comment abuser des permissions de stockage pour escalader les privilÚges :
Enumération non authentifiée
GCP - Storage Unauthenticated Enum
Post-exploitation
GCP - Storage Post Exploitation
Persistance
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

