GCP - App Engine Enum

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Informações Básicas

O App Engine da Google Cloud Platform (GCP) é uma plataforma robusta e sem servidor projetada para o desenvolvimento e hospedagem de aplicativos da web em grande escala. O design desta plataforma foca na simplificação do processo de desenvolvimento e no aprimoramento da gerenciabilidade de aplicativos. As principais características e benefícios do App Engine da GCP incluem:

  1. Arquitetura sem servidor: O App Engine lida automaticamente com a infraestrutura, incluindo provisionamento de servidores, configuração e dimensionamento. Isso permite que os desenvolvedores se concentrem em escrever código sem se preocupar com o hardware subjacente.

  2. Dimensionamento automático: O App Engine pode dimensionar automaticamente sua aplicação em resposta à quantidade de tráfego recebido. Ele dimensiona para lidar com o aumento do tráfego e reduz quando o tráfego diminui, ajudando a otimizar custos e desempenho.

  3. Suporte a Linguagens e Runtimes: Suporta linguagens de programação populares como Java, Python, Node.js, Go, Ruby, PHP e .NET. Você pode executar suas aplicações em um ambiente padrão ou flexível. O ambiente padrão é mais restritivo, mas altamente otimizado para linguagens específicas, enquanto o ambiente flexível permite mais personalização.

  4. Serviços Integrados: O App Engine se integra a muitos outros serviços da GCP, como Cloud SQL, Cloud Storage, Cloud Datastore e mais. Essa integração simplifica a arquitetura de aplicativos baseados em nuvem.

  5. Versionamento e Divisão de Tráfego: Você pode implantar facilmente várias versões de sua aplicação e depois dividir o tráfego entre elas para testes A/B ou lançamentos graduais.

  6. Insights da Aplicação: O App Engine fornece serviços integrados como logging, autenticação de usuários e um conjunto de ferramentas de desenvolvedor para monitorar e gerenciar aplicações.

  7. Segurança: Oferece recursos de segurança integrados como versionamento de aplicativos, certificados SSL/TLS para conexões seguras e gerenciamento de identidade e acesso.

Firewall

Um firewall simples pode ser configurado para as instâncias que executam os Apps com as seguintes opções:

SA

A conta de serviço padrão usada por esses Apps é <proj-name>@appspot.gserviceaccount.com que tem a função de Editor sobre o projeto e as SAs dentro da instância do APP Engine são executadas com escopo de cloud-platform (entre outros).

Armazenamento

O código-fonte e metadados são armazenados automaticamente em buckets com nomes como <proj-id>.appspot.com e staging.<proj-id>.appspot.com e <country>.<proj-id>.appspot.com

Cada arquivo do App é armazenado com o sha1 do conteúdo como nome de arquivo:

Dentro da pasta ae de staging.<proj-id>.appspot.com, existe uma pasta por versão com os arquivos de código-fonte e o arquivo manifest.json que descreve os componentes do App:

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

Containers

O aplicativo da web será executado dentro de um contêiner e o Code Build é usado para construir o contêiner.

URLs e Regiões

A página da web padrão será exposta no URL <project-uniq-name>.appspot.com embora o URL das versões mais antigas seja ligeiramente diferente, como https://20240117t001540-dot-<project-uniq-name>.uc.r.appspot.com (observe o carimbo de data e hora inicial).

Pode parecer que é apenas possível implantar 1 aplicativo da web do App Engine por região, mas é possível indicar service: <servicename> no arquivo app.yml e criar um novo serviço (uma nova web). O formato do URL para esta nova web será <servicename>-dot-<project-uniq-name>.appspot.com.

Enumeração

Cada vez que você faz upload de um novo código para o App, uma nova versão é criada. Todas as versões são armazenadas e até têm um URL para acessá-las. Portanto, modificar o código de uma versão antiga pode ser uma ótima técnica de persistência.

Assim como nas Funções em Nuvem, existe a possibilidade de que o aplicativo dependa de segredos que são acessados em tempo de execução por meio de variáveis de ambiente. Essas variáveis são armazenadas em um arquivo app.yaml que pode ser acessado da seguinte forma:

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

Escalação de Privilégios

pageGCP - AppEngine Privesc

Enumeração Não Autenticada

pageGCP - App Engine Unauthenticated Enum

Pós-Exploração

pageGCP - App Engine Post Exploitation

Persistência

pageGCP - App Engine Persistence
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Última actualización