GCP - ローカル特権昇格 SSH ピボティング
Reading time: 7 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
このシナリオでは、あなたが VM内の非特権アカウントを侵害した と仮定します。
驚くべきことに、あなたが侵害した Compute Engine の GPC 権限は、マシン内でローカルに特権を昇格させるのに役立つかもしれません。クラウド環境では常に非常に役立つわけではありませんが、可能であることを知っておくのは良いことです。
スクリプトを読む
Compute インスタンスは、おそらくそのサービスアカウントを使用してアクションを実行するために いくつかのスクリプトを実行する ために存在しています。
IAMは非常に細かく設定できるため、アカウントはリソースに対して 読み取り/書き込み 権限を持っているが リスト権限は持っていない 可能性があります。
この良い仮想的な例は、instance82736-long-term-xyz-archive-0332893
というストレージバケットにバックアップを読み書きする権限を持つ Compute インスタンスです。
コマンドラインから gsutil ls
を実行すると何も返されません。なぜなら、サービスアカウントが storage.buckets.list
IAM 権限を欠いているからです。しかし、gsutil ls gs://instance82736-long-term-xyz-archive-0332893
を実行すると、完全なファイルシステムバックアップが見つかり、あなたのローカル Linux アカウントが持っていないデータへの平文アクセスが得られるかもしれません。
このバケット名は、スクリプト(bash、Python、Rubyなど)内で見つけることができるかもしれません。
カスタムメタデータ
管理者は、インスタンスおよび プロジェクトレベルで カスタムメタデータ を追加できます。これは、任意のキー/値ペアをインスタンスに渡す方法であり、環境変数や起動/シャットダウンスクリプトに一般的に使用されます。
さらに、ユーザーデータを追加することも可能で、これはマシンが起動または再起動されるたびに 実行されるスクリプトであり、メタデータエンドポイントからもアクセス可能です。
詳細については、以下を確認してください:
IAM権限の悪用
以下に提案するほとんどの権限は、デフォルトの Compute SA に与えられています。唯一の問題は、デフォルトのアクセススコープが SA の使用を妨げることです。しかし、cloud-platform
スコープが有効になっているか、単に compute
スコープが有効になっている場合、あなたはそれらを 悪用することができるでしょう。
以下の権限を確認してください:
- compute.instances.osLogin
- compute.instances.osAdminLogin
- compute.projects.setCommonInstanceMetadata
- compute.instances.setMetadata
- compute.instances.setIamPolicy
ファイルシステム内のキーを検索
他のユーザーがボックス内で gcloud にログインし、ファイルシステムに資格情報を残しているか確認してください:
sudo find / -name "gcloud"
これらは最も興味深いファイルです:
~/.config/gcloud/credentials.db
~/.config/gcloud/legacy_credentials/[ACCOUNT]/adc.json
~/.config/gcloud/legacy_credentials/[ACCOUNT]/.boto
~/.credentials.json
さらにAPIキーの正規表現
TARGET_DIR="/path/to/whatever"
# Service account keys
grep -Pzr "(?s){[^{}]*?service_account[^{}]*?private_key.*?}" \
"$TARGET_DIR"
# Legacy GCP creds
grep -Pzr "(?s){[^{}]*?client_id[^{}]*?client_secret.*?}" \
"$TARGET_DIR"
# Google API keys
grep -Pr "AIza[a-zA-Z0-9\\-_]{35}" \
"$TARGET_DIR"
# Google OAuth tokens
grep -Pr "ya29\.[a-zA-Z0-9_-]{100,200}" \
"$TARGET_DIR"
# Generic SSH keys
grep -Pzr "(?s)-----BEGIN[ A-Z]*?PRIVATE KEY[a-zA-Z0-9/\+=\n-]*?END[ A-Z]*?PRIVATE KEY-----" \
"$TARGET_DIR"
# Signed storage URLs
grep -Pir "storage.googleapis.com.*?Goog-Signature=[a-f0-9]+" \
"$TARGET_DIR"
# Signed policy documents in HTML
grep -Pzr '(?s)<form action.*?googleapis.com.*?name="signature" value=".*?">' \
"$TARGET_DIR"
参考文献
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。