mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-31 23:15:48 -08:00
114 lines
6.6 KiB
Markdown
114 lines
6.6 KiB
Markdown
# GCP - App Engine Enum
|
|
|
|
{{#include ../../../banners/hacktricks-training.md}}
|
|
|
|
## Grundinformationen <a href="#reviewing-app-engine-configurations" id="reviewing-app-engine-configurations"></a>
|
|
|
|
Die App Engine von Google Cloud Platform (GCP) ist eine **robuste, serverlose Plattform, die für die Entwicklung und das Hosting von Webanwendungen in großem Maßstab konzipiert ist**. Das Design dieser Plattform konzentriert sich darauf, den Entwicklungsprozess zu optimieren und die Verwaltung von Anwendungen zu verbessern. Die wichtigsten Funktionen und Vorteile der App Engine von GCP umfassen:
|
|
|
|
1. **Serverlose Architektur**: App Engine verwaltet automatisch die Infrastruktur, einschließlich Serverbereitstellung, Konfiguration und Skalierung. Dies ermöglicht es Entwicklern, sich auf das Schreiben von Code zu konzentrieren, ohne sich um die zugrunde liegende Hardware kümmern zu müssen.
|
|
2. **Automatische Skalierung**: App Engine kann Ihre Anwendung automatisch in Reaktion auf die Menge des empfangenen Traffics skalieren. Sie skaliert hoch, um erhöhten Traffic zu bewältigen, und skaliert herunter, wenn der Traffic abnimmt, was hilft, Kosten und Leistung zu optimieren.
|
|
3. **Unterstützung von Programmiersprachen und Laufzeiten**: Es unterstützt beliebte Programmiersprachen wie Java, Python, Node.js, Go, Ruby, PHP und .NET. Sie können Ihre Anwendungen in einer Standard- oder einer flexiblen Umgebung ausführen. Die Standardumgebung ist restriktiver, aber hochoptimiert für bestimmte Sprachen, während die flexible Umgebung mehr Anpassungsmöglichkeiten bietet.
|
|
4. **Integrierte Dienste**: App Engine integriert sich mit vielen anderen GCP-Diensten, wie Cloud SQL, Cloud Storage, Cloud Datastore und mehr. Diese Integration vereinfacht die Architektur von cloudbasierten Anwendungen.
|
|
5. **Versionierung und Traffic-Splitting**: Sie können mehrere Versionen Ihrer Anwendung einfach bereitstellen und dann den Traffic zwischen ihnen für A/B-Tests oder schrittweise Rollouts aufteilen.
|
|
6. **Anwendungs-Insights**: App Engine bietet integrierte Dienste wie Protokollierung, Benutzerauthentifizierung und eine Suite von Entwicklerwerkzeugen zur Überwachung und Verwaltung von Anwendungen.
|
|
7. **Sicherheit**: Es bietet integrierte Sicherheitsfunktionen wie Anwendungs-Versionierung, SSL/TLS-Zertifikate für sichere Verbindungen und Identitäts- und Zugriffsmanagement.
|
|
|
|
### Firewall
|
|
|
|
Eine einfache **Firewall** kann für die Instanzen, die die Apps ausführen, mit den folgenden Optionen konfiguriert werden:
|
|
|
|
<figure><img src="../../../images/image (246).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
### SA
|
|
|
|
Das standardmäßige Dienstkonto, das von diesen Apps verwendet wird, ist **`<proj-name>@appspot.gserviceaccount.com`**, das die **Editor**-Rolle über das Projekt hat und die SAs innerhalb der APP Engine-Instanz **mit dem cloud-platform-Scope (unter anderem) ausgeführt werden.**
|
|
|
|
### Speicherung
|
|
|
|
Der Quellcode und die Metadaten werden **automatisch in Buckets** mit Namen wie `<proj-id>.appspot.com` und `staging.<proj-id>.appspot.com` und `<country>.<proj-id>.appspot.com` gespeichert.
|
|
|
|
**Jede Datei** der App wird mit dem **sha1 des Inhalts als Dateiname** gespeichert:
|
|
|
|
<figure><img src="../../../images/image (82).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Im **`ae`**-Ordner von `staging.<proj-id>.appspot.com` **existiert ein Ordner pro Version** mit den **Quellcodedateien** und der **`manifest.json`**-Datei, die **die Komponenten** der App beschreibt:
|
|
```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 ...
|
|
```
|
|
### Container
|
|
|
|
Die Webanwendung wird letztendlich **in einem Container ausgeführt** und **Code Build** wird verwendet, um den Container zu erstellen.
|
|
|
|
### URLs & Regionen
|
|
|
|
Die **Standard**-Webseite wird unter der URL **`<project-uniq-name>.appspot.com`** verfügbar sein, obwohl die URL älterer Versionen etwas anders sein wird, wie **`https://20240117t001540-dot-<project-uniq-name>.uc.r.appspot.com`** (beachten Sie den anfänglichen Zeitstempel).
|
|
|
|
Es könnte so aussehen, als wäre es nur möglich, 1 App Engine-Webanwendung pro Region bereitzustellen, aber es ist möglich, **`service: <servicename>`** in der **`app.yml`** anzugeben und einen neuen Dienst (ein neues Web) zu erstellen. Das Format der URL für dieses neue Web wird **`<servicename>-dot-<project-uniq-name>.appspot.com`** sein.
|
|
|
|
### Enumeration
|
|
|
|
> [!CAUTION]
|
|
> Jedes Mal, wenn Sie neuen Code in die App hochladen, **wird eine neue Version erstellt**. **Alle Versionen werden gespeichert** und sie haben sogar eine **URL, um auf sie zuzugreifen**. Das Modifizieren des Codes einer alten Version könnte eine **großartige Persistenztechnik** sein.
|
|
|
|
Wie bei Cloud Functions **besteht die Möglichkeit, dass die Anwendung auf Geheimnisse angewiesen ist, die zur Laufzeit über Umgebungsvariablen abgerufen werden**. Diese Variablen werden in einer **`app.yaml`**-Datei gespeichert, die wie folgt abgerufen werden kann:
|
|
```bash
|
|
# 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>
|
|
```
|
|
### Privilegienausweitung
|
|
|
|
{{#ref}}
|
|
../gcp-privilege-escalation/gcp-appengine-privesc.md
|
|
{{#endref}}
|
|
|
|
### Unauthentifiziertes Enum
|
|
|
|
{{#ref}}
|
|
../gcp-unauthenticated-enum-and-access/gcp-app-engine-unauthenticated-enum.md
|
|
{{#endref}}
|
|
|
|
### Nach der Ausnutzung
|
|
|
|
{{#ref}}
|
|
../gcp-post-exploitation/gcp-app-engine-post-exploitation.md
|
|
{{#endref}}
|
|
|
|
### Persistenz
|
|
|
|
{{#ref}}
|
|
../gcp-persistence/gcp-app-engine-persistence.md
|
|
{{#endref}}
|
|
|
|
{{#include ../../../banners/hacktricks-training.md}}
|