GCP - App Engine Enum

Support HackTricks

Basic Information

Google Cloud Platform의 (GCP) App Engine은 대규모 웹 애플리케이션 개발 및 호스팅을 위한 강력한 서버리스 플랫폼입니다. 이 플랫폼의 설계는 개발 과정을 간소화하고 애플리케이션의 관리 용이성을 높이는 데 중점을 둡니다. GCP의 App Engine의 주요 기능 및 이점은 다음과 같습니다:

  1. 서버리스 아키텍처: App Engine은 서버 프로비저닝, 구성 및 확장을 포함한 인프라를 자동으로 처리합니다. 이를 통해 개발자는 하드웨어에 대해 걱정하지 않고 코드 작성에 집중할 수 있습니다.

  2. 자동 확장: App Engine은 애플리케이션이 받는 트래픽 양에 따라 자동으로 확장할 수 있습니다. 트래픽이 증가하면 확장하고, 트래픽이 감소하면 축소하여 비용과 성능을 최적화합니다.

  3. 언어 및 런타임 지원: Java, Python, Node.js, Go, Ruby, PHP, .NET과 같은 인기 있는 프로그래밍 언어를 지원합니다. 표준 환경 또는 유연한 환경에서 애플리케이션을 실행할 수 있습니다. 표준 환경은 더 제한적이지만 특정 언어에 최적화되어 있으며, 유연한 환경은 더 많은 커스터마이징을 허용합니다.

  4. 통합 서비스: App Engine은 Cloud SQL, Cloud Storage, Cloud Datastore 등 많은 다른 GCP 서비스와 통합됩니다. 이 통합은 클라우드 기반 애플리케이션의 아키텍처를 단순화합니다.

  5. 버전 관리 및 트래픽 분할: 여러 버전의 애플리케이션을 쉽게 배포하고 A/B 테스트 또는 점진적 롤아웃을 위해 트래픽을 분할할 수 있습니다.

  6. 애플리케이션 인사이트: App Engine은 로깅, 사용자 인증 및 애플리케이션 모니터링 및 관리를 위한 개발자 도구 모음을 포함한 내장 서비스를 제공합니다.

  7. 보안: 애플리케이션 버전 관리, 안전한 연결을 위한 SSL/TLS 인증서 및 ID 및 액세스 관리와 같은 내장 보안 기능을 제공합니다.

Firewall

간단한 방화벽은 다음 옵션을 사용하여 앱을 실행하는 인스턴스에 대해 구성할 수 있습니다:

SA

이 앱에서 사용하는 기본 서비스 계정은 **<proj-name>@appspot.gserviceaccount.com**이며, 프로젝트에 대한 Editor 역할을 가지고 있으며, APP Engine 인스턴스 내의 SA는 **cloud-platform scope (기타 포함)**으로 실행됩니다.

Storage

소스 코드 및 메타데이터는 자동으로 버킷에 저장되며, 이름은 <proj-id>.appspot.com, staging.<proj-id>.appspot.com, <country>.<proj-id>.appspot.com과 같습니다.

앱의 모든 파일내용의 sha1을 파일 이름으로 저장됩니다:

staging.<proj-id>.appspot.comae 폴더 내에는 버전별로 하나의 폴더가 있으며, 소스 코드 파일과 manifest.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 ...

Containers

웹 앱은 궁극적으로 컨테이너 내에서 실행되며 Code Build를 사용하여 컨테이너를 빌드합니다.

URLs & Regions

기본 웹 페이지는 URL **<project-uniq-name>.appspot.com**에 노출되지만, 이전 버전의 URL은 약간 다를 수 있습니다. 예를 들어 https://20240117t001540-dot-<project-uniq-name>.uc.r.appspot.com (초기 타임스탬프를 참고하세요).

한 지역당 1개의 app engine 웹 애플리케이션만 배포할 수 있는 것처럼 보일 수 있지만, **app.yml**에서 **service: <servicename>**을 지정하여 새로운 서비스(새로운 웹)를 만들 수 있습니다. 이 새로운 웹의 URL 형식은 **<servicename>-dot-<project-uniq-name>.appspot.com**이 됩니다.

Enumeration

새 코드를 앱에 업로드할 때마다 새 버전이 생성됩니다. 모든 버전이 저장되며, 접근할 수 있는 URL도 있습니다. 따라서 오래된 버전의 코드를 수정하는 것은 훌륭한 지속성 기술이 될 수 있습니다.

Cloud Functions와 마찬가지로, 애플리케이션이 런타임 시 환경 변수를 통해 접근하는 비밀에 의존할 가능성이 있습니다. 이러한 변수는 app.yaml 파일에 저장되며 다음과 같이 접근할 수 있습니다:

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

권한 상승

GCP - AppEngine Privesc

인증되지 않은 Enum

GCP - App Engine Unauthenticated Enum

사후 익스플로잇

GCP - App Engine Post Exploitation

지속성

GCP - App Engine Persistence
HackTricks 지원하기

Last updated