mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 03:16:37 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-p
This commit is contained in:
@@ -230,7 +230,7 @@
|
||||
- [AWS - SNS Persistence](pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md)
|
||||
- [AWS - Secrets Manager Persistence](pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md)
|
||||
- [AWS - SQS Persistence](pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md)
|
||||
- [AWS - SSM Perssitence](pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md)
|
||||
- [AWS - SSM Perssitence](pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence.md)
|
||||
- [AWS - Step Functions Persistence](pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md)
|
||||
- [AWS - STS Persistence](pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md)
|
||||
- [AWS - Post Exploitation](pentesting-cloud/aws-security/aws-post-exploitation/README.md)
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
# AWS - SSM 持久性
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## SSM
|
||||
|
||||
有关更多信息,请查看:
|
||||
|
||||
{{#ref}}
|
||||
../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md
|
||||
{{#endref}}
|
||||
|
||||
### 使用 ssm:CreateAssociation 实现持久性
|
||||
|
||||
具有权限 **`ssm:CreateAssociation`** 的攻击者可以创建一个状态管理器关联,以自动在由 SSM 管理的 EC2 实例上执行命令。这些关联可以配置为在固定间隔内运行,使其适合于类似后门的持久性,而无需交互式会话。
|
||||
```bash
|
||||
aws ssm create-association \
|
||||
--name SSM-Document-Name \
|
||||
--targets Key=InstanceIds,Values=target-instance-id \
|
||||
--parameters commands=["malicious-command"] \
|
||||
--schedule-expression "rate(30 minutes)" \
|
||||
--association-name association-name
|
||||
```
|
||||
> [!NOTE]
|
||||
> 这种持久性方法只要 EC2 实例由 Systems Manager 管理,SSM 代理正在运行,并且攻击者有权限创建关联,就可以工作。它不需要交互式会话或明确的 ssm:SendCommand 权限。**重要:** `--schedule-expression` 参数(例如,`rate(30 minutes)`)必须遵守 AWS 的最小间隔 30 分钟。对于立即或一次性执行,完全省略 `--schedule-expression` — 关联将在创建后执行一次。
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -1,27 +0,0 @@
|
||||
# AWS - SSM Perssitence
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## SSM
|
||||
|
||||
有关更多信息,请查看:
|
||||
|
||||
{{#ref}}
|
||||
../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md
|
||||
{{#endref}}
|
||||
|
||||
### 使用 ssm:CreateAssociation 进行持久性
|
||||
|
||||
具有 ssm:CreateAssociation 权限的攻击者可以创建一个状态管理器关联,以自动在由 SSM 管理的 EC2 实例上执行命令。这些关联可以配置为在固定间隔内运行,使其适合于类似后门的持久性,而无需交互式会话。
|
||||
```bash
|
||||
aws ssm create-association \
|
||||
--name SSM-Document-Name \
|
||||
--targets Key=InstanceIds,Values=target-instance-id \
|
||||
--parameters commands=["malicious-command"] \
|
||||
--schedule-expression "rate(30 minutes)" \
|
||||
--association-name association-name
|
||||
```
|
||||
> [!NOTE]
|
||||
> 该持久性方法在 EC2 实例由 Systems Manager 管理、SSM 代理正在运行且攻击者有权限创建关联时有效。它不需要交互式会话或明确的 ssm:SendCommand 权限。**重要:** `--schedule-expression` 参数(例如,`rate(30 minutes)`)必须遵循 AWS 的最小间隔 30 分钟。对于立即或一次性执行,请完全省略 `--schedule-expression` — 关联将在创建后执行一次。
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -47,13 +47,13 @@ aws ssm start-session --target "$INSTANCE_ID"
|
||||
> [!CAUTION]
|
||||
> 要开始会话,您需要安装 **SessionManagerPlugin**: [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html)
|
||||
|
||||
**潜在影响:** 直接提升权限到附加到运行实例的 EC2 IAM 角色,这些实例运行着 SSM Agents。
|
||||
**潜在影响:** 直接提升权限到附加在运行实例上的 EC2 IAM 角色,这些实例运行着 SSM Agents。
|
||||
|
||||
#### 提升权限到 ECS
|
||||
|
||||
当 **ECS 任务** 以 **`ExecuteCommand` 启用** 运行时,具有足够权限的用户可以使用 `ecs execute-command` 在容器内 **执行命令**。\
|
||||
根据 [**文档**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/),这是通过在您用来启动“_exec_”命令的设备与目标容器之间创建安全通道来完成的,使用 SSM Session Manager。(需要 SSM Session Manager Plugin 才能正常工作)\
|
||||
因此,具有 `ssm:StartSession` 的用户将能够通过运行该选项启用的命令 **获取 ECS 任务内的 shell**。
|
||||
当 **ECS 任务** 以 **`ExecuteCommand` 启用** 的方式运行时,具有足够权限的用户可以使用 `ecs execute-command` 在容器内 **执行命令**。\
|
||||
根据 [**文档**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/),这是通过在您用来启动“_exec_”命令的设备与目标容器之间创建安全通道来实现的,使用 SSM Session Manager。(SSM Session Manager Plugin 是实现此功能所必需的)\
|
||||
因此,具有 `ssm:StartSession` 权限的用户将能够通过运行以下命令 **在启用该选项的 ECS 任务中获取 shell**:
|
||||
```bash
|
||||
aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"
|
||||
```
|
||||
@@ -93,7 +93,7 @@ aws ssm list-commands
|
||||
```
|
||||
**潜在影响:** 在命令行中查找敏感信息。
|
||||
|
||||
### `ssm:GetCommandInvocation`,(`ssm:ListCommandInvocations` | `ssm:ListCommands`)
|
||||
### `ssm:GetCommandInvocation`, (`ssm:ListCommandInvocations` | `ssm:ListCommands`)
|
||||
|
||||
拥有这些权限的攻击者可以列出所有发送的 **命令** 并 **读取生成的输出**,希望能找到 **敏感信息**。
|
||||
```bash
|
||||
@@ -103,7 +103,21 @@ aws ssm list-command-invocations
|
||||
|
||||
aws ssm get-command-invocation --command-id <cmd_id> --instance-id <i_id>
|
||||
```
|
||||
**潜在影响:** 在命令行输出中找到敏感信息。
|
||||
**潜在影响:** 在命令行输出中查找敏感信息。
|
||||
|
||||
### 使用 ssm:CreateAssociation
|
||||
|
||||
具有权限 **`ssm:CreateAssociation`** 的攻击者可以创建一个状态管理器关联,以自动在由 SSM 管理的 EC2 实例上执行命令。这些关联可以配置为在固定时间间隔内运行,使其适合于无交互会话的后门式持久性。
|
||||
```bash
|
||||
aws ssm create-association \
|
||||
--name SSM-Document-Name \
|
||||
--targets Key=InstanceIds,Values=target-instance-id \
|
||||
--parameters commands=["malicious-command"] \
|
||||
--schedule-expression "rate(30 minutes)" \
|
||||
--association-name association-name
|
||||
```
|
||||
> [!NOTE]
|
||||
> 这种持久性方法在 EC2 实例由 Systems Manager 管理、SSM 代理正在运行且攻击者有权限创建关联时有效。它不需要交互式会话或明确的 ssm:SendCommand 权限。**重要:** `--schedule-expression` 参数(例如,`rate(30 minutes)`)必须遵循 AWS 的最小间隔 30 分钟。对于立即或一次性执行,完全省略 `--schedule-expression` — 关联将在创建后执行一次。
|
||||
|
||||
### Codebuild
|
||||
|
||||
|
||||
@@ -21,20 +21,21 @@ Amazon EC2 用于启动 **虚拟服务器**。它允许配置 **安全性** 和
|
||||
- 用户数据
|
||||
- 现有的 EC2/AMI/快照
|
||||
- 网络
|
||||
- 子网
|
||||
- 网络
|
||||
- 子网络
|
||||
- 公共 IP
|
||||
- 开放端口
|
||||
- 与 AWS 之外的其他网络的集成连接
|
||||
|
||||
### 实例配置文件
|
||||
|
||||
使用 **角色** 授予在 **EC2 实例** 上运行的应用程序权限需要一些额外的配置。在 EC2 实例上运行的应用程序通过虚拟化操作系统与 AWS 隔离。由于这种额外的分离,您需要额外的步骤将 AWS 角色及其相关权限分配给 EC2 实例,并使其对应用程序可用。
|
||||
使用 **角色** 授予在 **EC2 实例** 上运行的应用程序权限需要额外的配置。运行在 EC2 实例上的应用程序通过虚拟化操作系统与 AWS 隔离。由于这种额外的分离,您需要额外的步骤将 AWS 角色及其相关权限分配给 EC2 实例,并使其对应用程序可用。
|
||||
|
||||
这一步骤是 **创建一个** [_**实例配置文件**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html),并将其附加到实例上。**实例配置文件包含角色,并且**可以向在实例上运行的应用程序提供角色的临时凭证。这些临时凭证可以在应用程序的 API 调用中使用,以访问资源并限制访问仅限于角色指定的那些资源。请注意,**一次只能将一个角色分配给 EC2 实例**,并且实例上的所有应用程序共享相同的角色和权限。
|
||||
这个额外的步骤是 **创建一个** [_**实例配置文件**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) 附加到实例。**实例配置文件包含角色,并且**可以向在实例上运行的应用程序提供角色的临时凭证。这些临时凭证可以在应用程序的 API 调用中使用,以访问资源并限制访问仅限于角色指定的那些资源。请注意,**一次只能将一个角色分配给 EC2 实例**,并且实例上的所有应用程序共享相同的角色和权限。
|
||||
|
||||
### 元数据端点
|
||||
|
||||
AWS EC2 元数据是关于 Amazon Elastic Compute Cloud (EC2) 实例的信息,在运行时可供实例使用。这些元数据用于提供有关实例的信息,例如其实例 ID、运行所在的可用区、与实例关联的 IAM 角色以及实例的主机名。
|
||||
AWS EC2 元数据是关于 Amazon Elastic Compute Cloud (EC2) 实例的信息,在运行时可供实例使用。这些元数据用于提供有关实例的信息,例如其实例 ID、它运行的可用区、与实例关联的 IAM 角色以及实例的主机名。
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
|
||||
@@ -154,7 +155,7 @@ aws ec2 describe-vpc-peering-connections
|
||||
|
||||
### AMI与EBS的区别
|
||||
|
||||
**AMI**用于**启动EC2实例**,而EC2**快照**用于**备份和恢复存储在EBS卷上的数据**。虽然EC2快照可以用于创建新的AMI,但它与AMI并不相同,并且不包含运行应用程序所需的操作系统、应用程序服务器或其他软件的信息。
|
||||
**AMI**用于**启动EC2实例**,而EC2**快照**用于**备份和恢复存储在EBS卷上的数据**。虽然EC2快照可以用于创建新的AMI,但它与AMI并不相同,并且不包含运行应用程序所需的操作系统、应用服务器或其他软件的信息。
|
||||
|
||||
### 权限提升
|
||||
|
||||
@@ -170,7 +171,7 @@ aws ec2 describe-vpc-peering-connections
|
||||
|
||||
**SSM代理**使系统管理器能够更新、管理和配置这些资源。代理**处理来自AWS云中系统管理器服务的请求**,然后按请求中指定的方式运行它们。
|
||||
|
||||
**SSM代理**[**在某些AMI中预安装**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html),或者您需要在实例上[**手动安装它们**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html)。此外,实例内使用的IAM角色需要附加**AmazonEC2RoleforSSM**策略才能进行通信。
|
||||
**SSM代理**[**在某些AMI中预安装**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html),或者您需要在实例上[**手动安装它们**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html)。此外,实例内部使用的IAM角色需要附加**AmazonEC2RoleforSSM**策略才能进行通信。
|
||||
|
||||
### 枚举
|
||||
```bash
|
||||
@@ -185,19 +186,27 @@ aws ssm describe-instance-associations-status --instance-id <id>
|
||||
```bash
|
||||
ps aux | grep amazon-ssm
|
||||
```
|
||||
### 提权
|
||||
### Privesc
|
||||
|
||||
在以下页面中,您可以查看如何**滥用SSM权限以提升权限**:
|
||||
在以下页面中,您可以查看如何**滥用SSM权限以提升特权**:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-privilege-escalation/aws-ssm-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
### Perssistence
|
||||
|
||||
在以下页面中,您可以查看如何**滥用SSM权限以实现持久性**:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-persistence/aws-ssm-persistence.md
|
||||
{{#endref}}
|
||||
|
||||
## ELB
|
||||
|
||||
**弹性负载均衡**(ELB)是**亚马逊网络服务**(AWS)部署的**负载均衡服务**。ELB自动**分配传入的应用程序流量**并根据流量需求扩展资源。
|
||||
|
||||
### 枚举
|
||||
### Enumeration
|
||||
```bash
|
||||
# List internet-facing ELBs
|
||||
aws elb describe-load-balancers
|
||||
@@ -244,10 +253,10 @@ VPN 允许将您的 **本地网络(站点到站点 VPN)** 或 **工作人员
|
||||
1. **客户网关**:
|
||||
- 客户网关是您在 AWS 中创建的资源,用于表示您一侧的 VPN 连接。
|
||||
- 它本质上是您一侧站点到站点 VPN 连接上的物理设备或软件应用程序。
|
||||
- 您向 AWS 提供路由信息和网络设备(如路由器或防火墙)的公共 IP 地址,以创建客户网关。
|
||||
- 您向 AWS 提供路由信息和网络设备的公共 IP 地址(例如路由器或防火墙),以创建客户网关。
|
||||
- 它作为设置 VPN 连接的参考点,不会产生额外费用。
|
||||
2. **虚拟私有网关**:
|
||||
- 虚拟私有网关(VPG)是站点到站点 VPN 连接的亚马逊侧的 VPN 集中器。
|
||||
- 虚拟私有网关(VPG)是站点到站点 VPN 连接中 Amazon 侧的 VPN 集中器。
|
||||
- 它附加到您的 VPC,并作为您的 VPN 连接的目标。
|
||||
- VPG 是 VPN 连接的 AWS 侧端点。
|
||||
- 它处理您的 VPC 和本地网络之间的安全通信。
|
||||
@@ -292,7 +301,7 @@ aws ec2 describe-vpn-connections
|
||||
|
||||
**本地临时凭证**
|
||||
|
||||
当使用 AWS VPN 客户端连接到 VPN 时,用户通常会 **登录 AWS** 以获取对 VPN 的访问权限。然后,一些 **AWS 凭证被创建并存储** 在本地以建立 VPN 连接。这些凭证 **存储在** `$HOME/.config/AWSVPNClient/TemporaryCredentials/<region>/temporary-credentials.txt` 中,包含 **AccessKey**、**SecretKey** 和 **Token**。
|
||||
当使用 AWS VPN 客户端连接到 VPN 时,用户通常会 **登录到 AWS** 以获取对 VPN 的访问权限。然后,一些 **AWS 凭证被创建并存储** 在本地以建立 VPN 连接。这些凭证 **存储在** `$HOME/.config/AWSVPNClient/TemporaryCredentials/<region>/temporary-credentials.txt` 中,包含 **AccessKey**、**SecretKey** 和 **Token**。
|
||||
|
||||
这些凭证属于用户 `arn:aws:sts::<acc-id>:assumed-role/aws-vpn-client-metrics-analytics-access-role/CognitoIdentityCredentials` (TODO: 进一步研究这些凭证的权限)。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user