# AWS - Elastic Beanstalk Enum

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

## Elastic Beanstalk

Amazon Elastic Beanstalk bied 'n vereenvoudigde platform vir **die ontplooiing, bestuur en skaal van webtoepassings en dienste**. Dit ondersteun 'n verskeidenheid programmeertale en raamwerke, soos Java, .NET, PHP, Node.js, Python, Ruby, en Go, sowel as Docker houers. Die diens is versoenbaar met algemeen gebruikte bedieners insluitend Apache, Nginx, Passenger, en IIS.

Elastic Beanstalk bied 'n eenvoudige en buigsame manier om **jou toepassings na die AWS wolk te ontplooi**, sonder om te bekommer oor die onderliggende infrastruktuur. Dit **hanteer outomaties** die besonderhede van kapasiteit **verskaffing**, las **balansering**, **skaal**, en toepassingsgesondheid **monitering**, wat jou toelaat om op die skryf en ontplooi van jou kode te fokus.

Die infrastruktuur wat deur Elastic Beanstalk geskep word, word bestuur deur **Autoscaling** Groepe in **EC2** (met 'n lasbalanser). Dit beteken dat aan die einde van die dag, as jy die **gasheer kompromitteer**, jy moet weet van EC2:

{{#ref}}
aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
{{#endref}}

Boonop, as Docker gebruik word, is dit moontlik om **ECS** te gebruik.

{{#ref}}
aws-eks-enum.md
{{#endref}}

### Toepassing & Omgewings

In AWS Elastic Beanstalk, dien die konsepte van 'n "toepassing" en 'n "omgewing" verskillende doeleindes en het dit onderskeie rolle in die ontplooiingsproses.

#### Toepassing

- 'n Toepassing in Elastic Beanstalk is 'n **logiese houer vir jou toepassing se bronkode, omgewings, en konfigurasies**. Dit groepeer verskillende weergawes van jou toepassingskode en laat jou toe om dit as 'n enkele entiteit te bestuur.
- Wanneer jy 'n toepassing skep, verskaf jy 'n naam en **beskrywing, maar geen hulpbronne word op hierdie stadium verskaf**. Dit is eenvoudig 'n manier om jou kode en verwante hulpbronne te organiseer en te bestuur.
- Jy kan **meervoudige toepassingsweergawes** binne 'n toepassing hê. Elke weergawe stem ooreen met 'n spesifieke vrystelling van jou kode, wat na een of meer omgewings ontplooi kan word.

#### Omgewing

- 'n Omgewing is 'n **verskafde instansie van jou toepassing** wat op AWS infrastruktuur loop. Dit is **waar jou toepassingskode ontplooi en uitgevoer word**. Elastic Beanstalk verskaf die nodige hulpbronne (bv. EC2 instansies, lasbalansers, outo-skaal groepe, databasisse) gebaseer op die omgewing konfigurasie.
- **Elke omgewing loop 'n enkele weergawe van jou toepassing**, en jy kan verskeie omgewings vir verskillende doeleindes hê, soos ontwikkeling, toetsing, staging, en produksie.
- Wanneer jy 'n omgewing skep, kies jy 'n platform (bv. Java, .NET, Node.js, ens.) en 'n omgewing tipe (bv. webbediener of werker). Jy kan ook die omgewing konfigurasie aanpas om verskeie aspekte van die infrastruktuur en toepassingsinstellings te beheer.

### 2 tipes Omgewings

1. **Webbediener Omgewing**: Dit is ontwerp om **webtoepassings en API's te huisves en te bedien**. Hierdie toepassings hanteer tipies inkomende HTTP/HTTPS versoeke. Die webbediener omgewing verskaf hulpbronne soos **EC2 instansies, lasbalansers, en outo-skaal** groepe om inkomende verkeer te hanteer, kapasiteit te bestuur, en die hoë beskikbaarheid van die toepassing te verseker.
2. **Werker Omgewing**: Dit is ontwerp om **agtergrondtake** te verwerk, wat dikwels tydrowende of hulpbron-intensiewe operasies is wat nie onmiddellike reaksies aan kliënte vereis nie. Die werker omgewing verskaf hulpbronne soos **EC2 instansies en outo-skaal groepe**, maar dit **het nie 'n lasbalanser** nie aangesien dit nie HTTP/HTTPS versoeke direk hanteer nie. In plaas daarvan, verbruik dit take van 'n **Amazon Simple Queue Service (SQS) waglyn**, wat as 'n buffer tussen die werker omgewing en die take wat dit verwerk, dien.

### Sekuriteit

Wanneer jy 'n App in Beanstalk skep, is daar 3 baie belangrike sekuriteitsopsies om te kies:

- **EC2 sleutel paar**: Dit sal die **SSH sleutel** wees wat toegang tot die EC2 instansies wat die app loop, sal hê.
- **IAM instansie profiel**: Dit is die **instansie profiel** wat die instansies sal hê (**IAM voorregte**).
- Die outomaties gegenereerde rol word **`aws-elasticbeanstalk-ec2-role`** genoem en het 'n paar interessante toegang oor al die ECS, al die SQS, DynamoDB elasticbeanstalk en elasticbeanstalk S3 met behulp van die AWS bestuurde beleide: [AWSElasticBeanstalkWebTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier), [AWSElasticBeanstalkMulticontainerDocker](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker), [AWSElasticBeanstalkWorkerTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier).
- **Diens rol**: Dit is die **rol wat die AWS diens** sal gebruik om al die nodige aksies uit te voer. Sover ek weet, kan 'n gewone AWS gebruiker nie toegang tot daardie rol kry nie.
- Hierdie rol wat deur AWS gegenereer word, word **`aws-elasticbeanstalk-service-role`** genoem en gebruik die AWS bestuurde beleide [AWSElasticBeanstalkEnhancedHealth](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth) en [AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy](https://us-east-1.console.aws.amazon.com/iamv2/home?region=us-east-1#/roles/details/aws-elasticbeanstalk-service-role?section=permissions)

Standaard is **metadata weergawe 1 gedeaktiveer**:

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

### Blootstelling

Beanstalk data word in 'n **S3 emmer** gestoor met die volgende naam: **`elasticbeanstalk-<region>-<acc-id>`**(as dit in die AWS konsole geskep is). Binne hierdie emmer sal jy die opgelaaide **bronkode van die toepassing** vind.

Die **URL** van die geskepte webblad is **`http://<webapp-name>-env.<random>.<region>.elasticbeanstalk.com/`**

> [!WARNING]
> As jy **lees toegang** oor die emmer kry, kan jy **die bronkode lees** en selfs **sensitiewe akrediteer** daarop vind.
>
> As jy **skryf toegang** oor die emmer kry, kan jy **die bronkode wysig** om die **IAM rol** wat die toepassing gebruik, die volgende keer dat dit uitgevoer word, te **kompromitteer**.

### Enumerasie
```bash
# Find S3 bucket
ACCOUNT_NUMBER=<account_number>
for r in us-east-1 us-east-2 us-west-1 us-west-2 ap-south-1 ap-south-2 ap-northeast-1 ap-northeast-2 ap-northeast-3 ap-southeast-1 ap-southeast-2 ap-southeast-3 ca-central-1 eu-central-1 eu-central-2 eu-west-1 eu-west-2 eu-west-3 eu-north-1 sa-east-1 af-south-1 ap-east-1 eu-south-1 eu-south-2 me-south-1 me-central-1; do aws s3 ls elasticbeanstalk-$r-$ACCOUNT_NUMBER 2>/dev/null && echo "Found in: elasticbeanstalk-$r-$ACCOUNT_NUMBER"; done

# Get apps and URLs
aws elasticbeanstalk describe-applications # List apps
aws elasticbeanstalk describe-application-versions # Get apps & bucket name with source code
aws elasticbeanstalk describe-environments # List envs
aws elasticbeanstalk describe-environments | grep -E "EndpointURL|CNAME"
aws elasticbeanstalk describe-configuration-settings --application-name <app_name> --environment-name <env_name>
aws elasticbeanstalk describe-environment-resources --environment-name <env_name> # Get env info such as SQS used queues
aws elasticbeanstalk describe-instances-health --environment-name <env_name> # Get the instances of an environment

# Get events
aws elasticbeanstalk describe-events
```
### Ongeauthentiseerde Toegang

{{#ref}}
../aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum/README.md
{{#endref}}

### Volharding

{{#ref}}
../aws-persistence/aws-elastic-beanstalk-persistence/README.md
{{#endref}}

### Privilege Escalation

{{#ref}}
../aws-privilege-escalation/aws-elastic-beanstalk-privesc/README.md
{{#endref}}

### Post Exploitatie

{{#ref}}
../aws-post-exploitation/aws-elastic-beanstalk-post-exploitation/README.md
{{#endref}}

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