skills/cloud/aws-pentesting/SKILL.md
AWS 云环境渗透测试总体方法论。当目标使用 AWS 云服务、发现 AWS 相关资产(S3 Bucket/EC2 实例/Lambda 函数/CloudFront 分发)、获取 AWS 凭据(AK/SK/Session Token/IAM Role)、或需要对 AWS 环境进行安全评估时使用。提供从未授权枚举到提权、后渗透、持久化的全流程攻击决策树,引导到专项技能深入。覆盖 47+ AWS 服务攻击面
npx skillsauth add wgpsec/AboutSecurity aws-pentestingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
AWS 是全球最大的公有云平台,承载了大量企业核心业务系统。其超过 200 项服务构成了庞大的攻击面——IAM 策略配置错误、S3 Bucket 暴露、EC2 元数据泄露、Lambda 函数 URL 未鉴权等问题在实际评估中频繁出现。本技能以攻击阶段(Phase)为主线,组织从"零凭据"到"完全控制"的完整渗透路径,并通过决策树引导到专项技能深入。
识别到具体攻击阶段后,加载对应参考文档获取完整技术细节:
拿到一个 AWS 相关目标后,首先判断当前手持的资产类型,决定进入哪个攻击阶段:
当前持有什么?
├── 无任何凭据
│ ├── 有目标域名/IP → Phase 1(未授权枚举)
│ ├── 有 SSRF 漏洞 → 直接打元数据服务获取凭据 → Phase 2
│ └── 仅知道组织名称 → OSINT + Phase 1
│
├── 有 AWS AK/SK(AKIA 开头 = 长期密钥)
│ └── → Phase 2(凭据验证与权限评估)
│
├── 有临时凭据(ASIA 开头 + SessionToken)
│ └── → Phase 2(注意:有效期通常 1-12 小时,需快速行动)
│
├── 在 EC2/Lambda/ECS 实例内部
│ └── → 通过元数据获取绑定的 IAM Role 凭据 → Phase 2
│
└── 有 AWS SSO Token / IAM Identity Center 会话
└── → Phase 2(需额外确认可访问的账户和角色)
| 凭据类型 | 识别特征 | 有效期 | 获取方式 |
|---|---|---|---|
| 长期 AK/SK | AccessKeyId 以 AKIA 开头,20 字符 | 永久(直到轮换) | 控制台创建 / 泄露获取 |
| 临时 STS 凭据 | AccessKeyId 以 ASIA 开头 + SessionToken | 15分钟 ~ 36小时 | AssumeRole / GetSessionToken |
| IAM Role(实例绑定) | 通过 169.254.169.254 获取 | 自动轮换 | EC2/Lambda/ECS 元数据 |
| SSO Token | JSON 格式,含 accessToken 字段 | 通常 8 小时 | ~/.aws/sso/cache/ |
| Cognito Token | JWT 格式 Identity/Access Token | 1 小时 | Cognito Identity Pool |
在使用获取到的凭据前,应先判断是否为蜜罐令牌(Canary Token)。使用蜜罐凭据会立即触发告警。常见特征:
aws sts get-access-key-info --access-key-id AKIA... 查询所属账户,与已知蜜罐账户比对在没有任何 AWS 凭据的情况下,仍可对目标进行大量信息收集。AWS 有 25+ 服务存在未授权枚举面。
| 目标 | 攻击方式 | 价值 |
|---|---|---|
| S3 Bucket | 域名枚举 + 暴力猜解 + DNS CNAME | 数据泄露、获取凭据文件 |
| Lambda Function URL | https://{id}.lambda-url.{region}.on.aws/ | Web 漏洞利用 |
| Cognito User Pool | 尝试注册新用户 | 获取认证身份 → IAM Role |
| Cognito Identity Pool | 获取未认证 IAM Role | 直接获取 AWS 凭据 |
| EC2 公开端口 | Nmap + 服务指纹 | SSRF → 元数据 → IAM 凭据 |
| 公开 AMI / EBS 快照 | describe-images --executable-users all | 提取硬编码凭据 |
| API Gateway | https://{id}.execute-api.{region}.amazonaws.com/ | API 漏洞利用 |
| CloudFront 分发 | https://{id}.cloudfront.net | Origin 发现、缓存投毒 |
# 1. 检查 Bucket 是否存在并可列出
aws s3 ls s3://TARGET-BUCKET --no-sign-request
# 2. 如果可列出,递归下载敏感文件
aws s3 cp s3://TARGET-BUCKET/ ./loot/ --recursive --no-sign-request \
--exclude "*" --include "*.env" --include "*.pem" --include "*.key" \
--include "*credentials*" --include "*config*"
# 3. 通过 Bucket 反查 Account ID
pip install s3-account-search
s3-account-search arn:aws:iam::YOUR_ACCT:role/YOUR_ROLE s3://TARGET-BUCKET
# 如果发现 Identity Pool ID(格式:region:guid),获取未认证凭据
aws cognito-identity get-id --identity-pool-id "us-east-1:xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"
aws cognito-identity get-credentials-for-identity --identity-id "us-east-1:yyyyy"
# 如果发现 User Pool Client ID,尝试注册
aws cognito-idp sign-up --client-id CLIENT_ID --username [email protected] --password 'P@ssw0rd123!'
→ 完整的 25+ 服务枚举清单,读 references/unauthenticated-enum.md
获取凭据后,第一步是验证有效性并评估权限范围。
# 身份确认(最基础的检查)
aws sts get-caller-identity
# 返回示例:
# Account: 123456789012
# UserId: AIDA...
# Arn: arn:aws:iam::123456789012:user/developer
# 判断凭据类型
aws sts get-access-key-info --access-key-id AKIA...
# 方法一:直接查询 IAM 策略(需要 iam 读权限)
aws iam get-user
aws iam list-attached-user-policies --user-name USERNAME
aws iam list-user-policies --user-name USERNAME
aws iam list-groups-for-user --user-name USERNAME
# 方法二:如果是 Role
aws iam list-attached-role-policies --role-name ROLENAME
aws iam list-role-policies --role-name ROLENAME
# 方法三:暴力枚举权限(无需 IAM 读权限)
# enumerate-iam 工具会尝试调用大量 API 来探测可用权限
pip install enumerate-iam
enumerate-iam --access-key AKIA... --secret-key ...
当前身份权限如何?
├── 有 iam:* 或 AdministratorAccess → 已是管理员,直接 Phase 4
├── 有 iam 读权限但无写权限 → 枚举所有用户/角色/策略,寻找提权路径 → Phase 3
├── 有特定服务权限(如 s3:*、ec2:*、lambda:*)
│ ├── 检查是否有 iam:PassRole → 可能通过 PassRole 提权 → Phase 3
│ ├── 有 ec2:RunInstances + iam:PassRole → EC2 提权 → Phase 3
│ └── 可直接利用当前权限进行后渗透 → Phase 4
└── 权限极低 → 尝试暴力枚举更多权限,或回到 Phase 1 寻找更多入口
参考 aws-iam-policy-analysis 技能,进行深度策略分析
参考 cloud-iam-audit 技能,进行跨云 IAM 审计
参考 cloud-aksk-exploit 技能,获取 AK/SK 完整利用链
| 工具 | 用途 | 命令 |
|---|---|---|
| enumerate-iam | 暴力枚举可用权限 | enumerate-iam --access-key ... --secret-key ... |
| Pacu | AWS 利用框架(枚举+提权+后渗透) | pacu → import_keys → exec iam__enum_permissions |
| ScoutSuite | 多云安全审计报告 | scout aws -p PROFILE |
| Prowler | AWS 安全最佳实践检查 | prowler aws --profile PROFILE |
| CloudFox | 攻击路径发现 | cloudfox aws --profile PROFILE all-checks |
| PMapper | IAM 提权路径图分析 | pmapper --profile PROFILE graph create |
AWS 提权的核心思路:利用当前权限去获取更高权限。AWS 有数百个权限,其中很多组合可以形成提权路径。
| 提权路径 | 关键权限 | 原理 | |---|---|---| | iam:CreatePolicyVersion | 创建新的策略版本 | 新建一个 Admin 权限的策略版本并设为默认 | | iam:AttachUserPolicy / AttachRolePolicy | 附加托管策略 | 直接给自己附加 AdministratorAccess | | iam:PutUserPolicy / PutRolePolicy | 设置内联策略 | 给自己写入 Allow * 策略 | | iam:PassRole + ec2:RunInstances | PassRole 到 EC2 | 启动绑定高权限 Role 的 EC2 实例 | | iam:PassRole + lambda:CreateFunction | PassRole 到 Lambda | 创建绑定高权限 Role 的 Lambda 并执行 | | sts:AssumeRole | 角色链 | 切换到更高权限的 Role | | iam:CreateLoginProfile | 为用户创建控制台密码 | 接管其他用户的控制台访问 | | iam:UpdateAssumeRolePolicy | 修改角色信任策略 | 使自己可以 AssumeRole 到高权限角色 |
iam:PassRole 是 AWS 提权中最核心的权限之一。它允许用户将一个 IAM Role "传递"给 AWS 服务。如果用户有 iam:PassRole 加上某个服务的创建权限(如 ec2:RunInstances、lambda:CreateFunction),就可以创建一个绑定了高权限 Role 的资源,然后通过该资源间接获得高权限。
攻击者拥有: iam:PassRole + lambda:CreateFunction + lambda:InvokeFunction
│
├─ 1. 创建 Lambda 函数,绑定一个拥有 AdministratorAccess 的 Role
├─ 2. Lambda 代码中调用 IAM API 给攻击者账户添加 Admin 策略
└─ 3. 调用该 Lambda → 攻击者获得管理员权限
参考 aws-iam-privesc 技能,获取 46 个服务的详细提权路径
获得较高权限后,进入后渗透阶段。目标是数据获取、横向移动和建立持久化。
优先搜索哪些数据源?
├── S3 Bucket → 文档、备份、日志、配置文件
├── RDS / DynamoDB → 业务数据库
├── Secrets Manager / Parameter Store → 凭据和配置
├── EBS 快照 → 挂载后可读取完整文件系统
├── CloudWatch Logs → 应用日志中的敏感信息
└── CodeCommit → 代码仓库
AWS 环境中的横向移动主要发生在两个维度:
跨账户移动:
OrganizationAccountAccessRole(管理账户 → 成员账户)sts:AssumeRole)跨服务移动:
| 服务 | 持久化方法 | 隐蔽性 | |---|---|---| | IAM | 创建后门用户/角色、添加 Access Key、修改信任策略 | 低(IAM 变更易被审计) | | Lambda | Layer 后门、Extension 注入、版本/别名权重分配、异步自循环 | 高 | | EC2 | UserData 后门、AMI 后门、SSH Key 注入、安全组连接跟踪 | 中 | | STS | Role Chain Juggling(角色链循环续期) | 高 | | CloudFormation | CDK Bootstrap 信任外部账户 | 中 | | Cognito | 添加外部身份提供商、修改风险配置 | 高 | | SSM | CreateAssociation 定时执行命令 | 中 | | EventBridge | 定时规则触发恶意 Lambda/ECS 任务 | 中 | | SNS/SQS | 添加外部订阅者持续窃取消息 | 高 | | ECR | 仓库策略后门、镜像投毒 | 高 |
→ 完整的 22+ 服务持久化技术清单,读 references/persistence-techniques.md
参考 aws-post-exploit 技能,获取数据窃取与横向移动深度指南
# 身份与权限
aws sts get-caller-identity # 当前身份
aws iam get-user # 当前 IAM 用户信息
aws iam list-attached-user-policies --user-name USER # 附加的策略
aws iam list-roles # 列出所有角色
aws organizations list-accounts # 列出组织内所有账户
# 枚举资源
aws s3 ls # 列出所有 S3 Bucket
aws ec2 describe-instances --region REGION # 列出 EC2 实例
aws lambda list-functions --region REGION # 列出 Lambda 函数
aws rds describe-db-instances --region REGION # 列出 RDS 实例
aws secretsmanager list-secrets --region REGION # 列出 Secrets
# 凭据操作
aws sts assume-role --role-arn ARN --role-session-name s # 切换角色
aws sts get-session-token --duration-seconds 43200 # 获取临时凭据
# 元数据服务(从 EC2 实例内部)
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/
| 缩写 | 全称 | 攻击面关键词 | |---|---|---| | IAM | Identity and Access Management | 权限策略、角色信任、提权 | | STS | Security Token Service | 临时凭据、AssumeRole | | EC2 | Elastic Compute Cloud | 实例、元数据、安全组、AMI | | S3 | Simple Storage Service | Bucket 策略、ACL、公开访问 | | Lambda | Lambda (Serverless) | 函数 URL、Layer、环境变量 | | RDS | Relational Database Service | 公开访问、快照泄露 | | EKS | Elastic Kubernetes Service | RBAC、ServiceAccount | | ECS | Elastic Container Service | 任务定义、IAM Role | | ECR | Elastic Container Registry | 镜像仓库策略 | | CloudFront | CloudFront (CDN) | Origin 暴露、缓存规则 | | SNS | Simple Notification Service | Topic 策略、订阅者 | | SQS | Simple Queue Service | 队列策略、消息窃取 | | SSM | Systems Manager | RunCommand、Parameter Store | | KMS | Key Management Service | Key Policy、Grant | | Cognito | Cognito | User Pool、Identity Pool |
CloudTrail 审计感知: 几乎所有 AWS API 调用都会被 CloudTrail 记录。以下操作会产生高可见性日志事件:
部分 API 在 CloudTrail 中为"数据事件"(如 S3 GetObject),默认不记录但组织可能启用了。
GuardDuty 检测风险: GuardDuty 会检测以下行为:
速率限制: AWS API 有速率限制(通常每秒 5-20 次调用),暴力枚举时需注意节流,否则会触发 ThrottlingException 并可能引起告警。
区域差异: AWS 资源是区域隔离的。枚举时需遍历所有启用的区域(aws ec2 describe-regions),不要只检查 us-east-1。全球服务(IAM、Route53、CloudFront、STS)不受区域限制。
testing
Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产(Blob Storage/App Service/Azure VM/Azure Functions)、获取 Azure 凭据(Service Principal/Managed Identity/Access Token)、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面
tools
Mythic C2 操作方法论。当需要部署 Mythic、选择 Mythic Agent、安装 C2 Profile、配置 HTTP/DNS/WebSocket/SMB/TCP 通信、生成 payload、管理回连任务,或把 Mythic 作为跨平台 C2 框架用于授权红队演练时使用。覆盖 mythic-cli 安装、Agent/Profile 选择、SSL 证书配置、payload 构建和基础 OPSEC 判断
development
Docker 安全测试与容器渗透方法论。当需要评估 Docker 容器、Docker Daemon、Docker Registry、镜像层、构建产物或容器逃逸风险时使用。覆盖容器环境识别、特权容器逃逸、docker.sock/Remote API 利用、procfs/cgroup/capabilities 滥用、Docker 用户组提权、运行时/内核 CVE、Registry 枚举、镜像层 Secret 分析和构建上下文泄露。发现 Docker 容器环境、Registry 暴露、镜像凭据或容器配置错误时应使用此技能
development
使用 PadBuster 进行 Padding Oracle 攻击。当发现 Web 应用使用 CBC 模式加密且存在 Padding Oracle 漏洞时使用。PadBuster 可自动解密密文和伪造任意明文对应的合法密文,适用于加密 Cookie/Token/URL 参数。任何涉及 Padding Oracle 攻击、CBC 密文解密、Cookie 伪造的场景都应使用此技能