diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 582319269..f61a27c2f 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -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) diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence.md new file mode 100644 index 000000000..621c9b25d --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence.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}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md deleted file mode 100644 index bb04b5d5b..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md +++ /dev/null @@ -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}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md index 21e15773f..2c5c0bff2 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.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 --instance-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 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md index a37184c6a..acdd1a88f 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md @@ -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 ```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//temporary-credentials.txt` 中,包含 **AccessKey**、**SecretKey** 和 **Token**。 +当使用 AWS VPN 客户端连接到 VPN 时,用户通常会 **登录到 AWS** 以获取对 VPN 的访问权限。然后,一些 **AWS 凭证被创建并存储** 在本地以建立 VPN 连接。这些凭证 **存储在** `$HOME/.config/AWSVPNClient/TemporaryCredentials//temporary-credentials.txt` 中,包含 **AccessKey**、**SecretKey** 和 **Token**。 这些凭证属于用户 `arn:aws:sts:::assumed-role/aws-vpn-client-metrics-analytics-access-role/CognitoIdentityCredentials` (TODO: 进一步研究这些凭证的权限)。