GCP - AppEngine Privesc

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

App Engine

Za više informacija o App Engine-u pogledajte:

pageGCP - App Engine Enum

appengine.applications.get, appengine.instances.get, appengine.instances.list, appengine.operations.get, appengine.operations.list, appengine.services.get, appengine.services.list, appengine.versions.create, appengine.versions.get, appengine.versions.list, cloudbuild.builds.get,iam.serviceAccounts.actAs, resourcemanager.projects.get, storage.objects.create, storage.objects.list

To su potrebne dozvole za implementaciju aplikacije korišćenjem gcloud cli-a. Možda se get i list mogu izbeći.

Možete pronaći primere Python koda na https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine

Podrazumevano, ime usluge aplikacije će biti default, i može postojati samo 1 instanca sa istim imenom. Da biste promenili to i kreirali drugu aplikaciju, u app.yaml, promenite vrednost ključa na nešto poput service: my-second-app

cd python-docs-samples/appengine/flexible/hello_world
gcloud app deploy #Upload and start application inside the folder

Sačekajte barem 10-15 minuta, ako ne uspe, pozovite ponovno izvršavanje još nekoliko puta i sačekajte nekoliko minuta.

Moguće je naznačiti Servisni nalog koji će se koristiti, ali se podrazumevano koristi podrazumevani SA za App Engine.

URL aplikacije je nešto poput https://<ime-projekta>.oa.r.appspot.com/ ili https://<ime-servisa>-dot-<ime-projekta>.oa.r.appspot.com

appengine.instances.enableDebug, appengine.instances.get, appengine.instances.list, appengine.operations.get, appengine.services.get, appengine.services.list, appengine.versions.get, appengine.versions.list, compute.projects.get

Sa ovim dozvolama, moguće je prijaviti se putem ssh na instance App Engine tipa fleksibilne (ne standardne). Neki od dozvola list i get možda nisu zaista potrebni.

gcloud app instances ssh --service <app-name> --version <version-id> <ID>

appengine.applications.update, appengine.operations.get

Mislim da ovo samo menja pozadinski SA koji će Google koristiti za postavljanje aplikacija, tako da ne mislim da možete zloupotrebiti ovo da biste ukrali nalog za usluge.

gcloud app update --service-account=<sa_email>

appengine.versions.getFileContents, appengine.versions.update

Nisam siguran kako koristiti ove dozvole ili da li su korisne (napomena da kada promenite kod, nova verzija se kreira pa ne znam da li možete jednostavno ažurirati kod ili IAM ulogu jednog, ali pretpostavljam da biste trebali moći, možda menjajući kod unutar bucket-a??).

Pristup za pisanje preko bucket-a

Čak i sa pristupom za pisanje preko bucket-a gde se nalazi izvorni kod NIJE BILO moguće izvršiti proizvoljni kod modifikujući izvorni kod i manifest.json. Možda ako pratite bucket i otkrijete trenutak kada se kreira nova verzija i kada se izvorni kod i manifest otpremaju, možda biste mogli da ih promenite tako da nova verzija koristi one sa zadnjim vratima??

Izgleda da su slojevi kontejnera takođe smešteni u bucket-u, možda ih menjajući?

Last updated