# GCP - App Engine Enum

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

## Osnovne informacije <a href="#reviewing-app-engine-configurations" id="reviewing-app-engine-configurations"></a>

Google Cloud Platform's (GCP) App Engine je **robustan, serverless platforma prilagođena razvoju i hostovanju web aplikacija na velikoj skali**. Dizajn ove platforme fokusira se na pojednostavljenje procesa razvoja i poboljšanje upravljivosti aplikacija. Ključne karakteristike i prednosti GCP-ovog App Engine-a uključuju:

1. **Serverless arhitektura**: App Engine automatski upravlja infrastrukturom, uključujući obezbeđivanje servera, konfiguraciju i skaliranje. Ovo omogućava programerima da se fokusiraju na pisanje koda bez brige o osnovnom hardveru.
2. **Automatsko skaliranje**: App Engine može automatski skalirati vašu aplikaciju u zavisnosti od količine saobraćaja koji prima. Skalira se naviše da bi se nosio sa povećanim saobraćajem i skalira se naniže kada saobraćaj opada, pomažući u optimizaciji troškova i performansi.
3. **Podrška za jezike i runtime**: Podržava popularne programske jezike kao što su Java, Python, Node.js, Go, Ruby, PHP i .NET. Možete pokrenuti svoje aplikacije u standardnom ili fleksibilnom okruženju. Standardno okruženje je restriktivnije, ali visoko optimizovano za specifične jezike, dok fleksibilno okruženje omogućava više prilagođavanja.
4. **Integrisane usluge**: App Engine se integriše sa mnogim drugim GCP uslugama, kao što su Cloud SQL, Cloud Storage, Cloud Datastore i druge. Ova integracija pojednostavljuje arhitekturu aplikacija zasnovanih na oblaku.
5. **Verzionisanje i deljenje saobraćaja**: Možete lako implementirati više verzija svoje aplikacije i zatim deliti saobraćaj među njima za A/B testiranje ili postepeno uvođenje.
6. **Uvidi u aplikaciju**: App Engine pruža ugrađene usluge kao što su logovanje, autentifikacija korisnika i paket alata za programere za praćenje i upravljanje aplikacijama.
7. **Bezbednost**: Nudi ugrađene bezbednosne karakteristike kao što su verzionisanje aplikacija, SSL/TLS sertifikati za sigurne veze i upravljanje identitetom i pristupom.

### Firewall

Jednostavan **firewall** može biti konfigurisan za instance koje pokreću aplikacije sa sledećim opcijama:

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

### SA

Podrazumevani servisni nalog koji koriste ove aplikacije je **`<proj-name>@appspot.gserviceaccount.com`** koji ima **Editor** ulogu nad projektom, a SA unutar APP Engine instance **radi sa cloud-platform opsegom (među ostalima).**

### Storage

Izvorni kod i metapodaci se **automatski čuvaju u bucket-ima** sa imenima kao što su `<proj-id>.appspot.com` i `staging.<proj-id>.appspot.com` i `<country>.<proj-id>.appspot.com`

**Svaka datoteka** aplikacije se čuva sa **sha1 sadržaja kao imenom datoteke**:

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

Unutar **`ae`** foldera sa `staging.<proj-id>.appspot.com`, **postoji jedan folder po verziji** sa **izvorno kodnim** datotekama i **`manifest.json`** datotekom koja **opisuje komponente** aplikacije:
```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 ...
```
### Kontejneri

Web aplikacija će na kraju biti **izvršena unutar kontejnera** i **Code Build** se koristi za izgradnju kontejnera.

### URL-ovi i regioni

**Podrazumevana** web stranica će biti izložena na URL-u **`<project-uniq-name>.appspot.com`**, iako će URL starijih verzija biti malo drugačiji, kao **`https://20240117t001540-dot-<project-uniq-name>.uc.r.appspot.com`** (obratite pažnju na početni vremenski pečat).

Može izgledati kao da je moguće implementirati samo 1 app engine web aplikaciju po regionu, ali je moguće naznačiti **`service: <servicename>`** u **`app.yml`** i kreirati novu uslugu (novi web). Format URL-a za ovu novu web stranicu biće **`<servicename>-dot-<project-uniq-name>.appspot.com`**.

### Enumeracija

> [!CAUTION]
> Svaki put kada otpremite novi kod na aplikaciju, **stvara se nova verzija**. **Sve verzije se čuvaju** i čak imaju **URL za pristup njima**. Tako da modifikacija koda stare verzije može biti **sjajna tehnika za postizanje trajnosti**.

Kao i sa Cloud Functions, **postoji šansa da aplikacija zavisi od tajni koje se pristupaju u vreme izvršavanja putem promenljivih okruženja**. Ove promenljive se čuvaju u **`app.yaml`** datoteci koja se može pristupiti na sledeći način:
```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>
```
### Eskalacija privilegija

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

### Neautentifikovana enumeracija

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

### Post eksploatacija

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

### Postojanost

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

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