AWS API Gateway je sveobuhvatna usluga koju nudi Amazon Web Services (AWS) dizajnirana za developere da kreiraju, objave i nadgledaju API-je u velikom obimu. Funkcioniše kao ulazna tačka u aplikaciju, omogućavajući developerima da uspostave okvir pravila i procedura. Ovaj okvir upravlja pristupom spoljnih korisnika određenim podacima ili funkcionalnostima unutar aplikacije.
API Gateway omogućava da definišete kako zahtevi ka vašim API-jima treba da budu obrađeni, i može kreirati prilagođene API endpointe sa specifičnim metodama (npr. GET, POST, PUT, DELETE) i resursima. Takođe može generisati SDK-ove klijenata (Software Development Kits) kako bi olakšao developerima pozivanje vaših API-ja iz njihovih aplikacija.
Tipovi API Gateway-a
HTTP API: Izgradite nisko-latentne i ekonomične REST API-je sa ugrađenim funkcijama kao što su OIDC i OAuth2, i nativnom CORS podrškom. Radi sa sledećim: Lambda, HTTP backends.
WebSocket API: Izgradite WebSocket API koristeći trajne veze za realno vreme kao što su aplikacije za čet ili kontrolne table. Radi sa sledećim: Lambda, HTTP, AWS Services.
REST API: Razvijte REST API gde imate potpunu kontrolu nad zahtevom i odgovorom zajedno sa mogućnostima upravljanja API-jem. Radi sa sledećim: Lambda, HTTP, AWS Services.
REST API Private: Kreirajte REST API koji je dostupan samo iz VPC-a.
Glavne komponente API Gateway-a
Resursi: U API Gateway-u, resursi su komponente koje čine strukturu vašeg API-ja. Oni predstavljaju različite putanje ili endpointe vašeg API-ja i odgovaraju različitim akcijama koje vaš API podržava. Resurs je svaka metoda (npr. GET, POST, PUT, DELETE) unutar svake putanje (/, ili /korisnici, ili /korisnik/{id}).
Faze: Faze u API Gateway-u predstavljaju različite verzije ili okruženja vašeg API-ja, kao što su razvoj, staging ili produkcija. Možete koristiti faze za upravljanje i implementaciju više verzija vašeg API-ja istovremeno, omogućavajući vam testiranje novih funkcionalnosti ili ispravki bagova bez uticaja na produkciono okruženje. Faze takođe podržavaju varijable faze, koje su parovi ključ-vrednost koji se mogu koristiti za konfigurisanje ponašanja vašeg API-ja na osnovu trenutne faze. Na primer, mogli biste koristiti varijable faze da usmerite zahteve API-ja ka različitim Lambda funkcijama ili drugim backend servisima u zavisnosti od faze.
Faza je naznačena na početku URL-a API Gateway endpointa.
Autorizatori: Autorizatori u API Gateway-u su odgovorni za kontrolu pristupa vašem API-ju proverom identiteta pozivaoca pre nego što dozvole zahtev da se nastavi. Možete koristiti AWS Lambda funkcije kao prilagođene autorizatore, što vam omogućava da implementirate svoju autentifikaciju i autorizaciju. Kada zahtev stigne, API Gateway prosleđuje autorizacioni token zahteva Lambda autorizatoru, koji obrađuje token i vraća IAM politiku koja određuje koje akcije pozivalac može da izvrši. API Gateway takođe podržava ugrađene autorizatore, kao što su AWS Identity and Access Management (IAM) i Amazon Cognito.
Politika resursa: Politika resursa u API Gateway-u je JSON dokument koji definiše dozvole za pristup vašem API-ju. Slično je IAM politici, ali je posebno prilagođena za API Gateway. Možete koristiti politiku resursa da kontrolišete ko može pristupiti vašem API-ju, koje metode mogu pozvati i sa kojih IP adresa ili VPC-a mogu da se povežu. Politike resursa mogu se koristiti u kombinaciji sa autorizatorima kako bi pružile detaljnu kontrolu pristupa vašem API-ju.
Da bi politika resursa imala efekta, API mora biti ponovo implementiran nakon što se politika resursa izmeni.
Logovanje
Podrazumevano, CloudWatch Logs su isključeni, Access Logging je isključen, a X-Ray praćenje je takođe isključeno.
Enumeracija
Imajte na umu da u oba AWS API-ja za enumeraciju resursa (apigateway i apigatewayv2) jedina dozvola koja vam je potrebna i jedina dozvola za čitanje koja se može dodeliti je apigateway:GET, sa tim možete enumerisati sve.
# Generic infoawsapigatewayget-accountawsapigatewayget-domain-namesawsapigatewayget-usage-plansawsapigatewayget-vpc-linksawsapigatewayget-client-certificates# Enumerate APIsawsapigatewayget-rest-apis# This will also show the resource policy (if any)## Get stagesawsapigatewayget-stages--rest-api-id<id>## Get resourcesawsapigatewayget-resources--rest-api-id<id>## Get API resource action per HTTP verb (check authorizers and api key required)awsapigatewayget-method--http-methodGET--rest-api-id<api-id>--resource-id<resource-id>## Call APIhttps://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>## API authorizersawsapigatewayget-authorizers--rest-api-id<id>## Modelsawsapigatewayget-models--rest-api-id<id>## More infoawsapigatewayget-gateway-responses--rest-api-id<id>awsapigatewayget-request-validators--rest-api-id<id>awsapigatewayget-deployments--rest-api-id<id># Get api keys generatedawsapigatewayget-api-keys--include-valueawsapigatewayget-api-key--api-key<id>--include-value# Get just 1## Example use API keycurl-XGET-H"x-api-key: AJE&Ygenu4[..]"https://e83uuftdi8.execute-api.us-east-1.amazonaws.com/dev/test## Usage plansawsapigatewayget-usage-plans#Get limit use infoawsapigatewayget-usage-plan-keys--usage-plan-id<plan_id>#Get clear text values of api keysawsapigatewayget-usage-plan-key--usage-plan-id<plan_id>--key-id<key_id>###Already consumedawsapigatewayget-usage--usage-plan-id<plan_id>--start-date2023-07-01--end-date2023-07-12
Enumerating AWS API Gateway v2
List API Gateway v2 APIs
To list all API Gateway v2 APIs in the current AWS account, you can use the following AWS CLI command:
awsapigatewayv2get-apis
This command will return a list of all API Gateway v2 APIs along with their details such as API ID, name, protocol type, and creation date.
Describe API Gateway v2 API
To get more detailed information about a specific API Gateway v2 API, you can use the following AWS CLI command:
awsapigatewayv2get-api--api-id<api-id>
Replace <api-id> with the actual API ID you want to describe. This command will provide detailed information about the specified API including routes, integrations, authorizers, and other configurations.
List API Gateway v2 Integrations
To list all integrations for a specific API Gateway v2 API, you can use the following AWS CLI command:
awsapigatewayv2get-integrations--api-id<api-id>
Replace <api-id> with the API ID for which you want to list the integrations. This command will return a list of all integrations configured for the specified API.
List API Gateway v2 Routes
To list all routes for a specific API Gateway v2 API, you can use the following AWS CLI command:
awsapigatewayv2get-routes--api-id<api-id>
Replace <api-id> with the API ID for which you want to list the routes. This command will return a list of all routes configured for the specified API.
List API Gateway v2 Authorizers
To list all authorizers for a specific API Gateway v2 API, you can use the following AWS CLI command:
awsapigatewayv2get-authorizers--api-id<api-id>
Replace <api-id> with the API ID for which you want to list the authorizers. This command will return a list of all authorizers configured for the specified API.
List API Gateway v2 Deployments
To list all deployments for a specific API Gateway v2 API, you can use the following AWS CLI command:
awsapigatewayv2get-deployments--api-id<api-id>
Replace <api-id> with the API ID for which you want to list the deployments. This command will return a list of all deployments made for the specified API.
List API Gateway v2 Stages
To list all stages for a specific API Gateway v2 API, you can use the following AWS CLI command:
awsapigatewayv2get-stages--api-id<api-id>
Replace <api-id> with the API ID for which you want to list the stages. This command will return a list of all stages configured for the specified API.
# Generic infoawsapigatewayv2get-account--awsapigatewayv2get-domain-namesawsapigatewayv2get-domain-name--domain-name<name>awsapigatewayv2get-usage-plans--awsapigatewayv2get-vpc-linksawsapigatewayv2get-client-certificates--# Enumerate APIsawsapigatewayv2get-apis# This will also show the resource policy (if any)awsapigatewayv2get-api--api-id<id>## Get all the info from an api at onceawsapigatewayv2export-api--api-id<id>--output-typeYAML--specificationOAS30/tmp/api.yaml## Get stagesawsapigatewayv2get-stages--api-id<id>## Get routesawsapigatewayv2get-routes--api-id<id>awsapigatewayv2get-route--api-id<id>--route-id<route-id>## Get deploymentsawsapigatewayv2get-deployments--api-id<id>awsapigatewayv2get-deployment--api-id<id>--deployment-id<dep-id>## Get integrationsawsapigatewayv2get-integrations--api-id<id>## Get authorizersawsapigatewayv2get-authorizers--api-id<id>awsapigatewayv2get-authorizer--api-id<id>--authorizer-id<uth-id>## Get domain mappingsawsapigatewayv2get-api-mappings--api-id<id>--domain-name<dom-name>awsapigatewayv2get-api-mapping--api-id<id>--api-mapping-id<map-id>--domain-name<dom-name>## Get modelsawsapigatewayv2get-models--api-id<id>## Call APIhttps://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>
Različite autorizacije za pristup API Gateway endpointima
Politika resursa
Moguće je koristiti politike resursa da definišemo ko može pozvati API endpointe.
U sledećem primeru možete videti da označena IP adresa ne može pozvati endpoint /resource_policy putem GET zahteva.
IAM Autorizator
Moguće je postaviti da metodi unutar putanje (resursa) zahtevaju IAM autentifikaciju da bi bili pozvani.
Kada je ovo postavljeno, dobićete grešku {"message":"Missing Authentication Token"} kada pokušate da pristupite endpointu bez autorizacije.
Jedan jednostavan način da generišete očekivani token pomoću aplikacije je korišćenjem Authorization tipa AWS Signature unutar Postman-a.
Postavite pristupni ključ i tajni ključ naloga koji želite da koristite i možete se autentifikovati protiv API endpointa.
Moguće je koristiti lambda funkciju koja će na osnovu datog tokena vratiti IAM politiku koja će pokazati da li je korisnik ovlašćen da pozove API endpoint.
Možete postaviti svaku metodu resursa koja će koristiti autorizator.
</details>
Pozovite ga nečim poput:
<pre class="language-bash" data-overflow="wrap"><code class="lang-bash"><strong>curl "https://jhhqafgh6f.execute-api.eu-west-1.amazonaws.com/prod/custom_auth" -H 'Authorization: your-secret-token'
</strong></code></pre>
<div data-gb-custom-block data-tag="hint" data-style='warning'>
Zavisno od Lambda koda, ova autorizacija može biti ranjiva
</div>
Imajte na umu da ako je generisana i vraćena **deny politika**, greška koju vraća API Gateway je: `{"Message":"User is not authorized to access this resource with an explicit deny"}`
Na ovaj način možete **identifikovati ovu autorizaciju** koja je na snazi.
### Potreban API ključ
Moguće je postaviti API endpointove koji zahtevaju **validan API ključ** da bi se kontaktirali.
<figure><img src="../../../.gitbook/assets/image (88).png" alt=""><figcaption></figcaption></figure>
Moguće je generisati API ključeve u portalu API Gateway-a i čak postaviti koliko se može koristiti (u pogledu zahteva po sekundi i u pogledu zahteva mesečno).
Da bi API ključ radio, morate ga dodati u **Usage Plan**, ovaj plan korišćenja mora biti dodat na **API Stage** i povezani API stage mora imati konfigurisan **method throttling** za **endpoint** koji zahteva API ključ:
<figure><img src="../../../.gitbook/assets/image (198).png" alt=""><figcaption></figcaption></figure>
## Neautentifikovan pristup
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md'>
[aws-api-gateway-unauthenticated-enum.md](../aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md)
</div>
## Privesc
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-privilege-escalation/aws-apigateway-privesc.md'>
[aws-apigateway-privesc.md](../aws-privilege-escalation/aws-apigateway-privesc.md)
</div>
## Post Eksploatacija
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-post-exploitation/aws-api-gateway-post-exploitation.md'>
[aws-api-gateway-post-exploitation.md](../aws-post-exploitation/aws-api-gateway-post-exploitation.md)
</div>
### Upornost
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-persistence/aws-api-gateway-persistence.md'>
[aws-api-gateway-persistence.md](../aws-persistence/aws-api-gateway-persistence.md)
</div>
<details>
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Drugi načini podrške HackTricks-u:
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** Proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>