# AWS - Lambda Enum {{#include ../../../banners/hacktricks-training.md}} ## Lambda Amazon Web Services (AWS) Lambda se opisuje kao **računarska usluga** koja omogućava izvršavanje koda bez potrebe za obezbeđivanjem ili upravljanjem serverima. Karakteriše se sposobnošću da **automatski upravlja alokacijom resursa** potrebnih za izvršavanje koda, obezbeđujući funkcije kao što su visoka dostupnost, skalabilnost i sigurnost. Značajan aspekt Lamde je njen model cena, gde se **naplaćuje isključivo na osnovu vremena korišćenja računarskih resursa**, eliminišući potrebu za inicijalnim ulaganjima ili dugoročnim obavezama. Da biste pozvali lambda, moguće je pozvati je **onoliko često koliko želite** (sa Cloudwatch), **izložiti** **URL** endpoint i pozvati je, pozvati je putem **API Gateway** ili čak na osnovu **događaja** kao što su **promene** u podacima u **S3** bucketu ili ažuriranja u **DynamoDB** tabeli. **Kod** lambda je smešten u **`/var/task`**. ### Lambda Aliases Weights Lambda može imati **several versions**.\ I može imati **više od 1** verzije izložene putem **aliases**. **Težine** **svake** od **verzija** izloženih unutar aliasa će odlučiti **koji alias prima poziv** (može biti 90%-10% na primer).\ Ako je kod **jednog** od aliasa **ranjiv**, možete slati **zahteve dok ranjiva** verzija ne primi eksploataciju. ![](<../../../images/image (223).png>) ### Resource Policies Lambda politike resursa omogućavaju da **daju pristup drugim uslugama/računima da pozivaju** lambda na primer.\ Na primer, ovo je politika koja omogućava **bilo kome da pristupi lambda izloženoj putem URL-a**:
Ili ovo da dozvoli API Gateway da je pozove:
### Lambda Database Proxies Kada postoji **stotine** **paralelnih lambda zahteva**, ako svaki od njih treba da **uspostavi i zatvori vezu sa bazom podataka**, jednostavno neće funkcionisati (lambdas su bezdržavne, ne mogu održavati otvorene veze).\ Tada, ako vaše **Lambda funkcije komuniciraju sa RDS Proxy umesto** vaše instance baze podataka. Ona upravlja povezivanjem potrebnim za skaliranje mnogih simultanih veza koje kreiraju paralelne Lambda funkcije. Ovo omogućava vašim Lambda aplikacijama da **ponovo koriste postojeće veze**, umesto da kreiraju nove veze za svaku invokaciju funkcije. ### Lambda EFS Filesystems Da bi sačuvali i čak delili podatke, **Lambdas mogu pristupiti EFS i montirati ih**, tako da Lambda može čitati i pisati iz njih. ### Lambda Layers Lambda _layer_ je .zip arhiva koja **može sadržati dodatni kod** ili drugi sadržaj. Layer može sadržati biblioteke, [prilagođeno okruženje](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html), podatke ili konfiguracione datoteke. Moguće je uključiti do **pet slojeva po funkciji**. Kada uključite layer u funkciju, **sadržaj se ekstrahuje u `/opt`** direktorijum u okruženju izvršenja. Po **defaultu**, **slojevi** koje kreirate su **privatni** za vaš AWS račun. Možete odlučiti da **podelite** layer sa drugim računima ili da **napravite** layer **javnim**. Ako vaše funkcije koriste layer koji je objavio drugi račun, vaše funkcije mogu **nastaviti da koriste verziju sloja nakon što je obrisana, ili nakon što je vaša dozvola za pristup sloju opozvana**. Međutim, ne možete kreirati novu funkciju ili ažurirati funkcije koristeći obrisanu verziju sloja. Funkcije koje su implementirane kao slika kontejnera ne koriste slojeve. Umesto toga, pakujete svoje omiljeno okruženje, biblioteke i druge zavisnosti u sliku kontejnera kada gradite sliku. ### Lambda Extensions Lambda ekstenzije poboljšavaju funkcije integracijom sa raznim **alatima za praćenje, posmatranje, sigurnost i upravljanje**. Ove ekstenzije, dodate putem [.zip arhiva koristeći Lambda slojeve](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) ili uključene u [implementacije slika kontejnera](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/), rade u dva režima: **interni** i **eksterni**. - **Interni ekstenzije** se spajaju sa procesom izvršenja, manipulišući njegovim pokretanjem koristeći **specifične varijable okruženja za jezik** i **wrapper skripte**. Ova prilagodba se primenjuje na niz okruženja, uključujući **Java Correto 8 i 11, Node.js 10 i 12, i .NET Core 3.1**. - **Eksterni ekstenzije** rade kao odvojeni procesi, održavajući usklađenost sa životnim ciklusom Lambda funkcije. Kompatibilni su sa raznim okruženjima kao što su **Node.js 10 i 12, Python 3.7 i 3.8, Ruby 2.5 i 2.7, Java Corretto 8 i 11, .NET Core 3.1**, i **prilagođena okruženja**. ### Enumeration ```bash aws lambda get-account-settings # List functions and get extra config info aws lambda list-functions aws lambda get-function --function-name aws lambda get-function-configuration --function-name aws lambda list-function-event-invoke-configs --function-name ## Check for creds in env vars aws lambda list-functions | jq '.Functions[].Environment' ## Download & check the source code aws lambda get-function --function-name "" --query 'Code.Location' wget -O lambda-function.zip # Get Lambda URL (if any) aws lambda list-function-url-configs --function-name aws lambda get-function-url-config --function-name # Get who has permissions to invoke the Lambda aws lambda get-policy --function-name # Versions and Aliases aws lambda list-versions-by-function --function-name aws lambda list-aliases --function-name # List layers aws lambda list-layers aws lambda list-layer-versions --layer-name aws lambda get-layer-version --layer-name --version-number aws lambda get-layer-version-by-arn --arn #Get external ARNs # List other metadata aws lambda list-event-source-mappings aws lambda list-code-signing-configs aws lambda list-functions-by-code-signing-config --code-signing-config-arn ``` ### Pozivanje lambda #### Ručno ```bash # Invoke function aws lambda invoke --function-name FUNCTION_NAME /tmp/out ## Some functions will expect parameters, they will access them with something like: ## target_policys = event['policy_names'] ## user_name = event['user_name'] aws lambda invoke --function-name --cli-binary-format raw-in-base64-out --payload '{"policy_names": ["AdministratorAccess], "user_name": "sdf"}' out.txt ``` #### Putem izložene URL adrese ```bash aws lambda list-function-url-configs --function-name #Get lambda URL aws lambda get-function-url-config --function-name #Get lambda URL ``` #### Pozivanje Lambda funkcije putem URL-a Sada je vreme da otkrijemo moguće lambda funkcije za izvršavanje: ``` aws --region us-west-2 --profile level6 lambda list-functions ``` ![](<../../../images/image (262).png>) Lambda funkcija pod nazivom "Level6" je dostupna. Hajde da saznamo kako je pozvati: ```bash aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6 ``` ![](<../../../images/image (102).png>) Sada, kada znate ime i ID, možete dobiti Ime: ```bash aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33ppypa75" ``` ![](<../../../images/image (237).png>) I konačno pozovite funkciju pristupajući (primetite da se ID, Ime i naziv funkcije pojavljuju u URL-u): [https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6](https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6) `URL:`**`https://.execute-api..amazonaws.com//`** #### Ostali Okidači Postoji mnogo drugih izvora koji mogu pokrenuti lambda
### Privesc Na sledećoj stranici možete proveriti kako da **zloupotrebite Lambda dozvole za eskalaciju privilegija**: {{#ref}} ../aws-privilege-escalation/aws-lambda-privesc/README.md {{#endref}} ### Neautentifikovani Pristup {{#ref}} ../aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access/README.md {{#endref}} ### Post Eksploatacija {{#ref}} ../aws-post-exploitation/aws-lambda-post-exploitation/ {{#endref}} ### Persistencija {{#ref}} ../aws-persistence/aws-lambda-persistence/ {{#endref}} ## Reference - [https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer) - [https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/](https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/) {{#include ../../../banners/hacktricks-training.md}}