AWS API Gateway je sveobuhvatna usluga koju nudi Amazon Web Services (AWS) dizajnirana za programere da kreiraju, objavljuju i nadgledaju API-je na velikoj skali. Funkcioniše kao ulazna tačka za aplikaciju, omogućavajući programerima da uspostave okvir pravila i procedura. Ovaj okvir reguliše pristup spoljnim korisnicima određenim podacima ili funkcionalnostima unutar aplikacije.
API Gateway vam omogućava da definišete kako bi zahtevi za vaše API-je trebali biti obrađeni, i može kreirati prilagođene API krajnje tačke sa specifičnim metodama (npr., GET, POST, PUT, DELETE) i resursima. Takođe može generisati klijentske SDK-ove (Softverske razvojne pakete) kako bi olakšao programerima pozivanje vaših API-ja iz njihovih aplikacija.
API Gateways Types
HTTP API: Kreirajte REST API-je sa niskom latencijom i troškovima, sa ugrađenim funkcijama kao što su OIDC i OAuth2, i podrškom za CORS. Radi sa sledećim: Lambda, HTTP pozadinskim servisima.
WebSocket API: Kreirajte WebSocket API koristeći trajne veze za real-time slučajeve korišćenja kao što su chat aplikacije ili nadzorne table. Radi sa sledećim: Lambda, HTTP, AWS uslugama.
REST API: Razvijajte REST API gde dobijate potpunu kontrolu nad zahtevom i odgovorom zajedno sa mogućnostima upravljanja API-jem. Radi sa sledećim: Lambda, HTTP, AWS uslugama.
REST API Private: Kreirajte REST API koji je dostupan samo iz VPC-a.
API Gateway Main Components
Resources: U API Gateway-u, resursi su komponente koje čine strukturu vašeg API-ja. Oni predstavljaju različite putanje ili krajnje tačke vašeg API-ja i odgovaraju raznim akcijama koje vaš API podržava. Resurs je svaka metoda (npr., GET, POST, PUT, DELETE) unutar svake putanje (/, ili /users, ili /user/{id}).
Stages: Staze u API Gateway-u predstavljaju različite verzije ili okruženja vašeg API-ja, kao što su razvoj, testiranje ili produkcija. Možete koristiti staze za upravljanje i implementaciju više verzija vašeg API-ja istovremeno, omogućavajući vam da testirate nove funkcije ili ispravke grešaka bez uticaja na produkciono okruženje. Staze takođe podržavaju varijable staze, koje su parovi ključ-vrednost koji se mogu koristiti za konfiguraciju ponašanja vašeg API-ja na osnovu trenutne staze. Na primer, mogli biste koristiti varijable staze da usmerite API zahteve na različite Lambda funkcije ili druge pozadinske servise u zavisnosti od staze.
Staza se označava na početku URL-a krajnje tačke API Gateway-a.
Authorizers: Autorizatori u API Gateway-u su odgovorni za kontrolu pristupa vašem API-ju verifikovanjem identiteta pozivaoca pre nego što dozvole da zahtev nastavi. Možete koristiti AWS Lambda funkcije kao prilagođene autorizatore, što vam omogućava da implementirate sopstvenu logiku autentifikacije i autorizacije. 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.
Resource Policy: Politika resursa u API Gateway-u je JSON dokument koji definiše dozvole za pristup vašem API-ju. Slična 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 se mogu povezati. Politike resursa se mogu koristiti u kombinaciji sa autorizatorima kako bi se obezbedila precizna kontrola pristupa za vaš API.
Da bi politika resursa imala efekat, API treba da bude ponovo implementiran nakon što je politika resursa izmenjena.
Logging
Podrazumevano, CloudWatch Logs su isključeni, Access Logging je isključen, a X-Ray tracing je takođe isključen.
Enumeration
Napomena da su za 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 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
# Generic infoawsapigatewayv2get-domain-namesawsapigatewayv2get-domain-name--domain-name<name>awsapigatewayv2get-vpc-links# 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 krajnjim tačkama
Politika resursa
Moguće je koristiti politike resursa da definišete ko može da poziva API krajnje tačke.
U sledećem primeru možete videti da naznačena IP adresa ne može da pozove krajnju tačku /resource_policy putem GET.
IAM autorizator
Moguće je postaviti da metode unutar puta (resursa) zahtevaju IAM autentifikaciju za pozivanje.
Kada je ovo postavljeno, dobićete grešku {"message":"Missing Authentication Token"} kada pokušate da dođete do krajnje tačke bez bilo kakve autorizacije.
Jedan jednostavan način da generišete očekivani token od strane aplikacije je korišćenje curl.
Napomena da u drugim slučajevima Authorizer može biti loše kodiran i jednostavno slanje bilo čega unutar Authorization header će omogućiti da se vidi skriveni sadržaj.
Moguće je koristiti lambda funkciju koja na osnovu datog tokena će vratiti IAM politiku koja ukazuje da li je korisnik ovlašćen da pozove API krajnju tačku.
Možete postaviti svaku metodu resursa koja će koristiti autorizator.
</details>
Pozovite ga sa 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'>
U zavisnosti od Lambda koda, ova autorizacija može biti ranjiva
</div>
Imajte na umu da ako je **generisana i vraćena politika odbijanja**, 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 krajnje tačke koje **zahtevaju važeći API ključ** za kontakt.
<figure><img src="../../../.gitbook/assets/image (88).png" alt=""><figcaption></figcaption></figure>
Moguće je generisati API ključeve u API Gateway portalu i čak postaviti koliko često mogu biti korišćeni (u smislu zahteva po sekundi i u smislu zahteva po mesecu).
Da bi API ključ radio, potrebno je dodati ga u **Plan korišćenja**, ovaj plan korišćenja mora biti dodat u **API fazu** i povezana API faza treba da ima konfigurisano **ograničenje metoda** za **krajnju tačku** koja zahteva API ključ:
<figure><img src="../../../.gitbook/assets/image (198).png" alt=""><figcaption></figcaption></figure>
## Neautorizovani 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 Exploitation
<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>
## Persistencija
<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>
<div data-gb-custom-block data-tag="hint" data-style='success'>
Učite i vežbajte AWS Hacking:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Podržite HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
</div>