AWS API Gateway is 'n omvattende diens wat deur Amazon Web Services (AWS) aangebied word, ontwerp vir ontwikkelaars om API's op 'n groot skaal te skep, te publiseer en te bestuur. Dit funksioneer as 'n toegangspunt tot 'n toepassing, wat ontwikkelaars toelaat om 'n raamwerk van reëls en prosedures op te stel. Hierdie raamwerk regeer die toegang wat eksterne gebruikers tot sekere data of funksies binne die toepassing het.
API Gateway stel jou in staat om te definieer hoe versoeke na jou API's hanteer moet word, en dit kan pasgemaakte API eindpunte met spesifieke metodes (bv. GET, POST, PUT, DELETE) en hulpbronne skep. Dit kan ook kliënt SDK's (Software Development Kits) genereer om dit vir ontwikkelaars makliker te maak om jou API's vanuit hul toepassings aan te roep.
API Gateway Tipes
HTTP API: Bou lae-latensie en koste-effektiewe REST API's met ingeboude funksies soos OIDC en OAuth2, en inheemse CORS-ondersteuning. Werk met die volgende: Lambda, HTTP agtergronde.
WebSocket API: Bou 'n WebSocket API met volgehoue verbindings vir regte tyd gebruiksgevalle soos klets toepassings of dashboards. Werk met die volgende: Lambda, HTTP, AWS Dienste.
REST API: Ontwikkel 'n REST API waar jy volledige beheer oor die versoek en antwoord het, saam met API bestuur vermoëns. Werk met die volgende: Lambda, HTTP, AWS Dienste.
REST API Privaat: Skep 'n REST API wat slegs vanaf binne 'n VPC toeganklik is.
API Gateway Hoofkomponente
Hulpbronne: In API Gateway is hulpbronne die komponente wat die struktuur van jou API vorm. Hulle verteenwoordig die verskillende paaie of eindpunte van jou API en ooreen met die verskillende aksies wat jou API ondersteun. 'n Hulpbron is elke metode (bv. GET, POST, PUT, DELETE) binne elke pad (/, of /users, of /user/{id}).
Fases: Fases in API Gateway verteenwoordig verskillende weergawes of omgewings van jou API, soos ontwikkeling, staging, of produksie. Jy kan fases gebruik om meervoudige weergawes van jou API gelyktydig te bestuur en te ontplooi, wat jou toelaat om nuwe funksies of foutoplossings te toets sonder om die produksie-omgewing te beïnvloed. Fases ondersteun ook fase veranderlikes, wat sleutel-waarde pare is wat gebruik kan word om die gedrag van jou API op grond van die huidige fase te konfigureer. Byvoorbeeld, jy kan fase veranderlikes gebruik om API versoeke na verskillende Lambda funksies of ander agtergrond dienste te lei, afhangende van die fase.
Die fase word aan die begin van die URL van die API Gateway eindpunt aangedui.
Outeurs: Outeurs in API Gateway is verantwoordelik vir die beheer van toegang tot jou API deur die identiteit van die oproeper te verifieer voordat die versoek voortgaan. Jy kan AWS Lambda funksies as pasgemaakte outeurs gebruik, wat jou toelaat om jou eie autentikasie en magtiging logika te implementeer. Wanneer 'n versoek inkom, stuur API Gateway die versoek se magtigingstoken na die Lambda outeur, wat die token verwerk en 'n IAM-beleid teruggee wat bepaal watter aksies die oproeper mag uitvoer. API Gateway ondersteun ook ingeboude outeurs, soos AWS Identiteit en Toegang Bestuur (IAM) en Amazon Cognito.
Hulpbronbeleid: 'n Hulpbronbeleid in API Gateway is 'n JSON dokument wat die toestemmings vir die toegang tot jou API definieer. Dit is soortgelyk aan 'n IAM-beleid, maar spesifiek aangepas vir API Gateway. Jy kan 'n hulpbronbeleid gebruik om te beheer wie jou API kan toegang, watter metodes hulle kan aanroep, en vanaf watter IP adresse of VPC's hulle kan aansluit. Hulpbronbeleide kan in kombinasie met outeurs gebruik word om fyn-gegradeerde toegangbeheer vir jou API te bied.
Om effektief te wees, moet die API weer ontplooi word nadat die hulpbronbeleid gewysig is.
Logging
Standaard is CloudWatch Logsaf, Toegang Logging is af, en X-Ray tracing is ook af.
Enumerasie
Let daarop dat in beide AWS API's om hulpbronne te enumereer (apigateway en apigatewayv2) die enigste toestemming wat jy nodig het en die enigste lees toestemming wat toegeken kan word is apigateway:GET, met dit kan jy alles enumereer.
# 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>
Verskillende Owerhede om toegang te verkry tot API Gateway eindpunte
Hulpbronbeleid
Dit is moontlik om hulpbronbeleide te gebruik om te definieer wie die API eindpunte kan bel.
In die volgende voorbeeld kan jy sien dat die aangegeven IP nie kan bel nie die eindpunt /resource_policy via GET.
IAM Owerhede
Dit is moontlik om te stel dat 'n metode binne 'n pad (n hulpbron) IAM-sertifisering benodig om dit te bel.
Wanneer dit gestel is, sal jy die fout {"message":"Missing Authentication Token"} ontvang wanneer jy probeer om die eindpunt te bereik sonder enige owerheid.
Een maklike manier om die verwagte token deur die toepassing te genereer, is om curl te gebruik.
Let wel daarop dat in ander gevalle die Authorizer dalk sleg gekodeer is en net enigiets binne die Authorization header sal toelaat om die versteekte inhoud te sien.
Dit is moontlik om 'n lambda te gebruik wat op 'n gegewe token gebaseer is en 'n IAM-beleid sal **teruggee wat aandui of die gebruiker gemagtig is om die API-eindpunt aan te roep.
Jy kan elke hulpbronmetode instel wat die outeur gaan gebruik.
</details>
Noem dit met iets soos:
<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'>
Afhangende van die Lambda-kode, mag hierdie autorisasie kwesbaar wees
</div>
Let daarop dat as 'n **weieringsbeleid gegenereer en teruggestuur word**, die fout wat deur API Gateway teruggestuur word is: `{"Message":"User is not authorized to access this resource with an explicit deny"}`
Op hierdie manier kan jy **identifiseer dat hierdie autorisasie** in plek is.
### Vereiste API Sleutel
Dit is moontlik om API-eindpunte in te stel wat **'n geldige API-sleutel vereis** om dit te kontak.
<figure><img src="../../../.gitbook/assets/image (88).png" alt=""><figcaption></figcaption></figure>
Dit is moontlik om API-sleutels in die API Gateway-portaal te genereer en selfs in te stel hoeveel dit gebruik kan word (in terme van versoeke per sekonde en in terme van versoeke per maand).
Om 'n API-sleutel te laat werk, moet jy dit by 'n **Gebruik Plan** voeg, hierdie gebruiksplan moet by die **API Stadium** gevoeg word en die geassosieerde API-stadium moet 'n **metode-beperking** geconfigureer hê vir die **eindpunt** wat die API-sleutel vereis:
<figure><img src="../../../.gitbook/assets/image (198).png" alt=""><figcaption></figcaption></figure>
## Ongeauthentiseerde Toegang
<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>
## Volharding
<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'>
Leer & oefen 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">\
Leer & oefen 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>Ondersteun HackTricks</summary>
* Kyk na die [**subskripsieplanne**](https://github.com/sponsors/carlospolop)!
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Deel hacking truuks deur PR's in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
</div>