AWS API Gateway is 'n omvattende diens wat deur Amazon Web Services (AWS) aangebied word en ontwerp is vir ontwikkelaars om API's op 'n groot skaal te skep, te publiseer en te bestuur. Dit funksioneer as 'n toegangspunt tot 'n aansoek, wat ontwikkelaars in staat stel om 'n raamwerk van reëls en prosedures te vestig. Hierdie raamwerk regeer die toegang wat eksterne gebruikers tot sekere data of funksionaliteite binne die aansoek het.
API Gateway stel jou in staat om te bepaal hoe versoeke aan jou API's hanteer moet word, en dit kan aangepaste API-eindpunte met spesifieke metodes (bv., GET, POST, PUT, DELETE) en bronne skep. Dit kan ook klient-SDK's (Software Development Kits) genereer om dit vir ontwikkelaars makliker te maak om jou API's vanuit hul aansoeke aan te roep.
Tipes API-poorte
HTTP API: Bou lae-latensie en koste-effektiewe REST-API's met ingeboude kenmerke soos OIDC en OAuth2, en inheemse CORS-ondersteuning. Werk met die volgende: Lambda, HTTP-agterkante.
WebSocket API: Bou 'n WebSocket-API met volgehoue verbindings vir werklike gebruiksfases soos geselskapsaansoeke of dashboard. Werk met die volgende: Lambda, HTTP, AWS-diens.
REST API: Ontwikkel 'n REST-API waar jy volledige beheer oor die versoek en respons saam met API-bestuursvermoëns verkry. Werk met die volgende: Lambda, HTTP, AWS-diens.
REST API Privaat: Skep 'n REST-API wat slegs toeganklik is van binne 'n VPC.
Hoofkomponente van API Gateway
Hulpbronne: In API Gateway is hulpbronne die komponente wat die struktuur van jou API uitmaak. Hulle verteenwoordig die verskillende paaie of eindpunte van jou API en stem ooreen met die verskeie aksies wat jou API ondersteun. 'n Hulpbron is elke metode (bv., GET, POST, PUT, DELETE) binne elke pad (/, of /gebruikers, of /gebruiker/{id}.
Stadia: Stadia in API Gateway verteenwoordig verskillende weergawes of omgewings van jou API, soos ontwikkeling, stellings of produksie. Jy kan stadia gebruik om meervoudige weergawes van jou API gelyktydig te bestuur en te implementeer, wat jou in staat stel om nuwe kenmerke of foutregstellings te toets sonder om die produksie-omgewing te beïnvloed. Stadia ondersteun ook stadiumveranderlikes, wat sleutel-waardepare is wat gebruik kan word om die gedrag van jou API te konfigureer op grond van die huidige stadium. Byvoorbeeld, jy kan stadiumveranderlikes gebruik om API-versoeke na verskillende Lambda-funksies of ander agterkantdiens te rig, afhangende van die stadium.
Die stadium word aan die begin van die URL van die API Gateway-eindpunt aangedui.
Gemagtigdes: Gemagtigdes in API Gateway is verantwoordelik vir die beheer van toegang tot jou API deur die identiteit van die oproeper te verifieer voordat die versoek toegelaat word om voort te gaan. Jy kan AWS Lambda-funksies as aangepaste gemagtigdes gebruik, wat jou in staat stel om jou eie outentiserings- en magtigingslogika te implementeer. Wanneer 'n versoek binnekom, stuur API Gateway die outoriseringstoken van die versoek na die Lambda-gemagtigde, wat die token verwerk en 'n IAM-beleid terugstuur wat bepaal watter aksies die oproeper toegelaat word om uit te voer. API Gateway ondersteun ook ingeboude gemagtigdes, soos AWS Identity and Access Management (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 op maat gemaak vir API Gateway. Jy kan 'n hulpbronbeleid gebruik om te beheer wie toegang tot jou API kan verkry, watter metodes hulle kan aanroep, en van watter IP-adresse of VPC's hulle kan koppel. Hulpbronbeleide kan in kombinasie met gemagtigdes gebruik word om fynkorrelige toegangsbeheer vir jou API te voorsien.
Om die API effektief te maak, moet die API na die verandering van die hulpbronbeleid weer geïmplementeer word.
Logboekhouding
Standaard is CloudWatch Logs af, Toegangslogboekhouding is af, en X-Ray-trassering 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 leestoestemming wat verleen kan word, apigateway:GET is, waarmee jy alles kan 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
Enumerating AWS API Gateway v2
List APIs
To list all APIs in the account, you can use the getApis method.
GET /v2/apis
Get API details
To get details about a specific API, you can use the getApi method with the API ID.
GET /v2/apis/{api_id}
List Integrations
To list all integrations for a specific API, you can use the getIntegrations method with the API ID.
GET /v2/apis/{api_id}/integrations
Get Integration details
To get details about a specific integration, you can use the getIntegration method with the integration ID.
GET /v2/apis/{api_id}/integrations/{integration_id}
List Routes
To list all routes for a specific API, you can use the getRoutes method with the API ID.
GET /v2/apis/{api_id}/routes
Get Route details
To get details about a specific route, you can use the getRoute method with the route ID.
GET /v2/apis/{api_id}/routes/{route_id}
# 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>
Verskillende Magtigings om API Gateway eindpunte te benader
Bronbeleid
Dit is moontlik om bronbeleide te gebruik om te bepaal wie die API-eindpunte kan aanroep.
In die volgende voorbeeld kan jy sien dat die aangeduide IP nie kan aanroep die eindpunt /resource_policy via GET nie.
IAM Magtigingsbevestiger
Dit is moontlik om in te stel dat 'n metodes binne 'n pad ( 'n bron) IAM-verifikasie benodig om dit aan te roep.
Wanneer dit ingestel is, sal jy die fout ontvang {"boodskap":"Ontbrekende Verifikasie Teken"} wanneer jy probeer om die eindpunt sonder enige magtiging te bereik.
Een maklike manier om die verwagte teken deur die aansoek te genereer, is om die Magtiging tipe AWS Handtekening binne Postman te gebruik.
Stel die toegangssleutel en die Geheimsleutel van die rekening wat jy wil gebruik en jy kan teen die API-eindpunt verifieer.
Moenie vergeet dat in ander gevalle die Outentiseerder dalk sleg geskodeer is en enige iets binne die Outoriseringskop stuur sal toelaat om die verborge inhoud te sien.
Dit is moontlik om 'n lambda te gebruik wat gebaseer is op 'n gegewe token wat 'n IAM-beleid sal teruggee wat aandui of die gebruiker gemagtig is om die API-eindpunt te roep.
Jy kan elke hulpbronmetode instel wat die outeur sal gebruik.
</details>
Roep dit aan 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'>
Afhanklik van die Lambda-kode, kan hierdie magtiging kwesbaar wees
</div>
Let daarop dat as 'n **ontkenbeleid gegenereer en teruggegee word**, die fout wat deur API Gateway teruggegee word, is: `{"Message":"User is not authorized to access this resource with an explicit deny"}`
Op hierdie manier kan jy **identifiseer dat hierdie magtiging** 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 versoek per sekonde en in terme van versoek per maand).
Om 'n API-sleutel te laat werk, moet jy dit by 'n **Gebruiksplan** voeg, hierdie gebruikplan moet by die **API-fase** gevoeg word en die geassosieerde API-fase moet 'n **metodevertraging** na die **eindpunt** wat die API-sleutel vereis, geconfigureer hê:
<figure><img src="../../../.gitbook/assets/image (198).png" alt=""><figcaption></figcaption></figure>
## Ongeagte 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>
<details>
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **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 jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>