GCP - App Engine Enum

Support HackTricks

Basic Information

Google Cloud Platformの(GCP)App Engineは、大規模なWebアプリケーションの開発とホスティングに特化した堅牢なサーバーレスプラットフォームです。このプラットフォームの設計は、開発プロセスの効率化とアプリケーションの管理性の向上に焦点を当てています。GCPのApp Engineの主な機能と利点は以下の通りです:

  1. サーバーレスアーキテクチャ:App Engineは、サーバーのプロビジョニング、構成、スケーリングを含むインフラストラクチャを自動的に処理します。これにより、開発者は基盤となるハードウェアを気にせずにコードを書くことに集中できます。

  2. 自動スケーリング:App Engineは、受信するトラフィックの量に応じてアプリケーションを自動的にスケールできます。トラフィックが増加するとスケールアップし、トラフィックが減少するとスケールダウンすることで、コストとパフォーマンスを最適化します。

  3. 言語とランタイムのサポート:Java、Python、Node.js、Go、Ruby、PHP、.NETなどの人気のあるプログラミング言語をサポートしています。アプリケーションは標準環境または柔軟環境で実行できます。標準環境は制約が多いですが、特定の言語に最適化されています。一方、柔軟環境はより多くのカスタマイズが可能です。

  4. 統合サービス:App Engineは、Cloud SQL、Cloud Storage、Cloud Datastoreなどの多くの他のGCPサービスと統合されています。この統合により、クラウドベースのアプリケーションのアーキテクチャが簡素化されます。

  5. バージョン管理とトラフィックスプリッティング:アプリケーションの複数のバージョンを簡単にデプロイし、A/Bテストや段階的なロールアウトのためにトラフィックを分割できます。

  6. アプリケーションインサイト:App Engineは、ログ記録、ユーザー認証、アプリケーションの監視と管理のための開発者ツールのスイートなどの組み込みサービスを提供します。

  7. セキュリティ:アプリケーションのバージョン管理、セキュアな接続のためのSSL/TLS証明書、アイデンティティとアクセス管理などの組み込みセキュリティ機能を提供します。

Firewall

アプリを実行しているインスタンスのために、以下のオプションでシンプルなファイアウォールを構成できます:

SA

これらのアプリで使用されるデフォルトのサービスアカウントは、<proj-name>@appspot.gserviceaccount.comであり、プロジェクトに対してEditorロールを持ち、APP Engineインスタンス内のSAはcloud-platformスコープ(他のものの中で)で実行されます。

Storage

ソースコードとメタデータは、<proj-id>.appspot.comstaging.<proj-id>.appspot.com<country>.<proj-id>.appspot.comなどの名前のバケットに自動的に保存されます

アプリのすべてのファイルは、コンテンツのsha1をファイル名として保存されます:

staging.<proj-id>.appspot.comaeフォルダー内には、バージョンごとに1つのフォルダーが存在し、ソースコードファイルとアプリのコンポーネントを説明する**manifest.json**ファイルがあります:

{"requirements.txt":{"sourceUrl":"https://storage.googleapis.com/staging.onboarding-host-98efbf97812843.appspot.com/a270eedcbe2672c841251022b7105d340129d108","sha1Sum":"a270eedc_be2672c8_41251022_b7105d34_0129d108"},"main_test.py":{"sourceUrl":"https://storage.googleapis.com/staging.onboarding-host-98efbf97812843.appspot.com/0ca32fd70c953af94d02d8a36679153881943f32","sha1Sum":"0ca32fd7_0c953af9_4d02d8a ...

コンテナ

ウェブアプリは最終的にコンテナ内で実行されCode Buildがコンテナをビルドするために使用されます。

URL とリージョン

デフォルトのウェブページはURL <project-uniq-name>.appspot.com で公開されますが、古いバージョンのURLは少し異なり、例えば https://20240117t001540-dot-<project-uniq-name>.uc.r.appspot.com のようになります(最初のタイムスタンプに注意)。

1つのリージョンに対して1つのアプリエンジンウェブアプリケーションのみをデプロイできるように見えるかもしれませんが、app.ymlservice: <servicename> を指定することで新しいサービス(新しいウェブ)を作成することが可能です。この新しいウェブのURLの形式は <servicename>-dot-<project-uniq-name>.appspot.com になります。

列挙

新しいコードをアプリにアップロードするたびに、新しいバージョンが作成されますすべてのバージョンが保存され、それらにアクセスするためのURLもあります。したがって、古いバージョンのコードを変更することは優れた永続性技術となる可能性があります。

Cloud Functionsと同様に、アプリケーションが実行時に環境変数を介してアクセスされる秘密に依存する可能性があります。これらの変数は**app.yaml** ファイルに保存されており、次のようにアクセスできます:

# List the apps
gcloud app services list
gcloud app services describe <app-name>
# Access via browser to the specified app
gcloud app services browse <app-name>

# Get App versions
gcloud app versions list
# Get all the info of the app and version, included specific verion URL and the env
gcloud app versions describe -s <app-name> <version-id>

# Logs
gcloud app logs tail -s <app-name>

# Instances
## This is only valid if a flexible environment is used and not a standard one
gcloud app instances list
gcloud app instances describe -s <app-name> --version <version-id> <ID>
## Connect to the instance via ssh
gcloud app instances ssh --service <app-name> --version <version-id> <ID>

# Firewalls
gcloud app firewall-rules list
gcloud app firewall-rules describe <num_fw>

# Get domains
gcloud app domain-mappings list
gcloud app domain-mappings describe <name>

# SSl certificates
gcloud app ssl-certificates list
gcloud app ssl-certificates describe <name>

権限昇格

GCP - AppEngine Privesc

認証されていない列挙

GCP - App Engine Unauthenticated Enum

ポストエクスプロイト

GCP - App Engine Post Exploitation

永続性

GCP - App Engine Persistence
HackTricksをサポートする

Last updated