# GCP - App Engine Enum

{{#include ../../../banners/hacktricks-training.md}}

## Informazioni di base <a href="#reviewing-app-engine-configurations" id="reviewing-app-engine-configurations"></a>

Google Cloud Platform's (GCP) App Engine è una **piattaforma robusta e serverless progettata per lo sviluppo e l'hosting di applicazioni web su larga scala**. Il design di questa piattaforma si concentra sull'ottimizzazione del processo di sviluppo e sul miglioramento della gestibilità delle applicazioni. Le caratteristiche e i vantaggi chiave di GCP's App Engine includono:

1. **Architettura Serverless**: App Engine gestisce automaticamente l'infrastruttura, inclusa la fornitura di server, configurazione e scalabilità. Questo consente agli sviluppatori di concentrarsi sulla scrittura del codice senza preoccuparsi dell'hardware sottostante.
2. **Scalabilità Automatica**: App Engine può scalare automaticamente la tua applicazione in risposta alla quantità di traffico che riceve. Si espande per gestire un aumento del traffico e si riduce quando il traffico diminuisce, aiutando a ottimizzare costi e prestazioni.
3. **Supporto per Linguaggi e Runtime**: Supporta linguaggi di programmazione popolari come Java, Python, Node.js, Go, Ruby, PHP e .NET. Puoi eseguire le tue applicazioni in un ambiente standard o flessibile. L'ambiente standard è più restrittivo ma altamente ottimizzato per linguaggi specifici, mentre l'ambiente flessibile consente maggiore personalizzazione.
4. **Servizi Integrati**: App Engine si integra con molti altri servizi GCP, come Cloud SQL, Cloud Storage, Cloud Datastore e altro. Questa integrazione semplifica l'architettura delle applicazioni basate su cloud.
5. **Versioning e Suddivisione del Traffico**: Puoi facilmente distribuire più versioni della tua applicazione e poi suddividere il traffico tra di esse per test A/B o rollout graduali.
6. **Insights sull'Applicazione**: App Engine fornisce servizi integrati come logging, autenticazione degli utenti e una suite di strumenti per sviluppatori per monitorare e gestire le applicazioni.
7. **Sicurezza**: Offre funzionalità di sicurezza integrate come versioning delle applicazioni, certificati SSL/TLS per connessioni sicure e gestione dell'identità e degli accessi.

### Firewall

Un semplice **firewall** può essere configurato per le istanze che eseguono le App con le seguenti opzioni:

<figure><img src="../../../images/image (246).png" alt=""><figcaption></figcaption></figure>

### SA

L'account di servizio predefinito utilizzato da queste App è **`<proj-name>@appspot.gserviceaccount.com`** che ha il ruolo di **Editor** sul progetto e gli SA all'interno dell'istanza APP Engine **funzionano con ambito cloud-platform (tra gli altri).**

### Storage

Il codice sorgente e i metadati sono **automaticamente memorizzati in bucket** con nomi come `<proj-id>.appspot.com` e `staging.<proj-id>.appspot.com` e `<country>.<proj-id>.appspot.com`

**Ogni file** dell'App è memorizzato con il **sha1 del contenuto come nome file**:

<figure><img src="../../../images/image (82).png" alt=""><figcaption></figcaption></figure>

All'interno della cartella **`ae`** di `staging.<proj-id>.appspot.com`, **esiste una cartella per versione** con i file del **codice sorgente** e il file **`manifest.json`** che **descrive i componenti** dell'App:
```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 ...
```
### Contenitori

L'app web sarà **eseguita all'interno di un contenitore** e **Code Build** è utilizzato per costruire il contenitore.

### URL e Regioni

La pagina web **predefinita** sarà esposta nell'URL **`<project-uniq-name>.appspot.com`**, anche se l'URL delle versioni precedenti sarà leggermente diverso, come **`https://20240117t001540-dot-<project-uniq-name>.uc.r.appspot.com`** (nota il timestamp iniziale).

Potrebbe sembrare che sia possibile distribuire solo 1 applicazione web di app engine per regione, ma è possibile indicare **`service: <servicename>`** nel **`app.yml`** e creare un nuovo servizio (un nuovo web). Il formato dell'URL per questo nuovo web sarà **`<servicename>-dot-<project-uniq-name>.appspot.com`**.

### Enumerazione

> [!CAUTION]
> Ogni volta che carichi un nuovo codice nell'App, **viene creata una nuova versione**. **Tutte le versioni sono memorizzate** e hanno persino un **URL per accedervi**. Quindi modificare il codice di una vecchia versione potrebbe essere una **grande tecnica di persistenza**.

Come con le Cloud Functions, **c'è la possibilità che l'applicazione si basi su segreti che vengono accessibili a runtime tramite variabili di ambiente**. Queste variabili sono memorizzate in un file **`app.yaml`** che può essere accessibile come segue:
```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>
```
### Escalation dei privilegi

{{#ref}}
../gcp-privilege-escalation/gcp-appengine-privesc.md
{{#endref}}

### Enum non autenticato

{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-app-engine-unauthenticated-enum.md
{{#endref}}

### Post Exploitation

{{#ref}}
../gcp-post-exploitation/gcp-app-engine-post-exploitation.md
{{#endref}}

### Persistenza

{{#ref}}
../gcp-persistence/gcp-app-engine-persistence.md
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
