GCP - App Engine Enum

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Información Básica

App Engine de Google Cloud Platform (GCP) es una plataforma robusta y sin servidor diseñada para el desarrollo y alojamiento de aplicaciones web a gran escala. El diseño de esta plataforma se centra en agilizar el proceso de desarrollo y mejorar la administración de aplicaciones. Las características clave y beneficios de App Engine de GCP incluyen:

  1. Arquitectura sin servidor: App Engine maneja automáticamente la infraestructura, incluida la provisión de servidores, la configuración y el escalado. Esto permite a los desarrolladores centrarse en escribir código sin preocuparse por el hardware subyacente.

  2. Escalado automático: App Engine puede escalar automáticamente tu aplicación en respuesta a la cantidad de tráfico que recibe. Escala para manejar un aumento de tráfico y se reduce cuando el tráfico disminuye, ayudando a optimizar costos y rendimiento.

  3. Soporte de lenguajes y runtimes: Admite lenguajes de programación populares como Java, Python, Node.js, Go, Ruby, PHP y .NET. Puedes ejecutar tus aplicaciones en un entorno estándar o flexible. El entorno estándar es más restrictivo pero altamente optimizado para lenguajes específicos, mientras que el entorno flexible permite una mayor personalización.

  4. Servicios Integrados: App Engine se integra con muchos otros servicios de GCP, como Cloud SQL, Cloud Storage, Cloud Datastore, entre otros. Esta integración simplifica la arquitectura de las aplicaciones basadas en la nube.

  5. Versionado y División de Tráfico: Puedes implementar fácilmente múltiples versiones de tu aplicación y luego dividir el tráfico entre ellas para pruebas A/B o implementaciones graduales.

  6. Información de la Aplicación: App Engine proporciona servicios integrados como registro, autenticación de usuarios y un conjunto de herramientas para monitorear y administrar aplicaciones.

  7. Seguridad: Ofrece características de seguridad integradas como versionado de aplicaciones, certificados SSL/TLS para conexiones seguras y gestión de identidad y acceso.

Firewall

Se puede configurar un firewall simple para las instancias que ejecutan las aplicaciones con las siguientes opciones:

SA

La cuenta de servicio predeterminada utilizada por estas aplicaciones es <nombre-proyecto>@appspot.gserviceaccount.com que tiene el rol de Editor sobre el proyecto y las cuentas de servicio dentro de la instancia de App Engine se ejecutan con alcance de cloud-platform (entre otros).

Almacenamiento

El código fuente y los metadatos se almacenan automáticamente en buckets con nombres como <id-proyecto>.appspot.com y staging.<id-proyecto>.appspot.com y <país>.<id-proyecto>.appspot.com

Cada archivo de la aplicación se almacena con el sha1 del contenido como nombre de archivo:

Dentro de la carpeta ae de staging.<id-proyecto>.appspot.com, existe una carpeta por versión con los archivos de código fuente y un archivo manifest.json que describe los componentes de la aplicación:

{"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 ...

Contenedores

La aplicación web será ejecutada dentro de un contenedor y Code Build se utiliza para construir el contenedor.

URLs y Regiones

La página web predeterminada se expondrá en la URL <project-uniq-name>.appspot.com aunque la URL de las versiones antiguas será ligeramente diferente, como https://20240117t001540-dot-<project-uniq-name>.uc.r.appspot.com (nota la marca de tiempo inicial).

Puede parecer que solo es posible implementar 1 aplicación web de App Engine por región, pero es posible indicar service: <servicename> en el app.yml y crear un nuevo servicio (una nueva web). El formato de la URL para esta nueva web será <servicename>-dot-<project-uniq-name>.appspot.com.

Enumeración

Cada vez que subes un nuevo código a la App, se crea una nueva versión. Todas las versiones se almacenan e incluso tienen una URL para acceder a ellas. Por lo tanto, modificar el código de una versión antigua podría ser una excelente técnica de persistencia.

Al igual que con las Cloud Functions, existe la posibilidad de que la aplicación dependa de secretos a los que se accede en tiempo de ejecución a través de variables de entorno. Estas variables se almacenan en un archivo app.yaml al que se puede acceder de la siguiente manera:

# 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>

Escalada de Privilegios

pageGCP - AppEngine Privesc

Enumeración sin Autenticación

pageGCP - App Engine Unauthenticated Enum

Post Explotación

pageGCP - App Engine Post Exploitation

Persistencia

pageGCP - App Engine Persistence
Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización