Cloud SSRF

云端SSRF

chevron-right从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)arrow-up-righthashtag

支持HackTricks的其他方式:

Try Hard Security Group


AWS

在AWS EC2环境中滥用SSRF

元数据端点可以从任何EC2机器内部访问,并提供有关其的有趣信息。它可以在以下URL中访问:http://169.254.169.254有关元数据的信息在此处arrow-up-right)。

2个版本的元数据端点。第一个版本允许通过GET请求访问端点(因此任何SSRF都可以利用它)。对于版本2IMDSv2arrow-up-right,您需要发送带有HTTP头PUT请求来请求一个令牌,然后使用该令牌来通过另一个HTTP头访问元数据(因此使用SSRF更加复杂)。

triangle-exclamation

您可以在文档中找到有关元数据端点的信息arrow-up-right。在以下脚本中,从中获取了一些有趣的信息:

作为公开可用的IAM凭证暴露示例,您可以访问:http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flawsarrow-up-right

您还可以在以下位置检查公开的EC2安全凭证:http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instancearrow-up-right

然后,您可以使用这些凭证与AWS CLI。这将允许您执行该角色具有权限执行的任何操作。

要利用新凭证,您需要创建一个类似以下内容的新AWS配置文件:

注意aws_session_token,这对配置文件的工作至关重要。

PACUarrow-up-right可与发现的凭据一起使用,以查找您的权限并尝试提升权限

AWS ECS(容器服务)凭据中的SSRF

ECS是一组逻辑EC2实例,您可以在其中运行应用程序,而无需扩展自己的集群管理基础设施,因为ECS会为您管理。如果您成功地妥协了在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和token

circle-info

请注意,在某些情况下,您可以从容器中访问EC2元数据实例(请检查之前提到的IMDSv2 TTL限制)。在这些情况下,您可以从容器中访问容器IAM角色和EC2 IAM角色。

用于AWS Lambda的SSRF

在这种情况下,凭据存储在环境变量中。因此,要访问它们,您需要访问类似于**file:///proc/self/environ**的内容。

有趣的环境变量的名称包括:

  • AWS_SESSION_TOKEN

  • AWS_SECRET_ACCESS_KEY

  • AWS_ACCES_KEY_ID

此外,除了IAM凭据,Lambda函数还具有在启动函数时传递给函数的事件数据。此数据通过运行时接口arrow-up-right提供给函数,并且可能包含敏感信息(例如stageVariables中的信息)。与IAM凭据不同,此数据可通过标准SSRF在**http://localhost:9001/2018-06-01/runtime/invocation/next**上访问。

circle-exclamation

用于AWS Elastic Beanstalk的SSRF URL

我们从API中检索accountIdregion

我们随后从API中检索AccessKeyIdSecretAccessKeyToken

然后我们使用这些凭据与 aws s3 ls s3://elasticbeanstalk-us-east-2-[ACCOUNT_ID]/

GCP

您可以在此处找到有关元数据端点的文档arrow-up-right

Google Cloud 的 SSRF URL

需要 HTTP 标头 Metadata-Flavor: Google,您可以通过以下 URL 访问元数据端点:

  • http://169.254.169.254

  • http://metadata.google.internal

  • http://metadata

提取信息的有趣端点:

Beta目前不需要标题(感谢Mathias Karlsson @avlidienbrunn)

triangle-exclamation

添加一个SSH密钥

提取令牌

检查令牌的范围(使用先前的输出或运行以下内容)

现在推送SSH密钥。

云函数

元数据端点的工作方式与虚拟机中的相同,但没有一些端点:

Digital Ocean

circle-exclamation

文档可在https://developers.digitalocean.com/documentation/metadata/arrow-up-right找到。

Azure

Azure虚拟机

Docs in herearrow-up-right.

  • 必须包含头部 Metadata: true

  • 不得包含 X-Forwarded-For 头部

Azure App Service

env 中,您可以获取 IDENTITY_HEADERIDENTITY_ENDPOINT 的值。您可以使用这些值来获取一个令牌,以便与元数据服务器通信。

大多数情况下,您希望获取以下资源之一的令牌:

IBM 云

circle-exclamation

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

最后更新于