AWS - API Gateway Enum
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subscription plans!
- Sluit aan by die đŹ Discord group of die telegram group of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
API Gateway
Basiese Inligting
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 kostedoeltreffende 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.
- Outoriseerders: Outoriseerders 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 outoriseerders gebruik, wat jou toelaat om jou eie outentikasie en outorisasie logika te implementeer. Wanneer ân versoek inkom, stuur API Gateway die versoek se outorisasie token na die Lambda outoriseerder, wat die token verwerk en ân IAM-beleid teruggee wat bepaal watter aksies die oproeper mag uitvoer. API Gateway ondersteun ook ingeboude outoriseerders, 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 outoriseerders 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 Logs af, Toegang Logging is af, en X-Ray tracing is ook af.
Enumerasie
Tip
Let daarop dat in beide AWS APIâs om hulpbronne te enumereer (
apigatewayenapigatewayv2) die enigste toestemming wat jy nodig het en die enigste lees toestemming wat toegeken kan word, isapigateway:GET, met dit kan jy alles enumereer.
# Generic info
aws apigateway get-account
aws apigateway get-domain-names
aws apigateway get-usage-plans
aws apigateway get-vpc-links
aws apigateway get-client-certificates
# Enumerate APIs
aws apigateway get-rest-apis # This will also show the resource policy (if any)
## Get stages
aws apigateway get-stages --rest-api-id <id>
## Get resources
aws apigateway get-resources --rest-api-id <id>
## Get API resource action per HTTP verb (check authorizers and api key required)
aws apigateway get-method --http-method GET --rest-api-id <api-id> --resource-id <resource-id>
## Call API
https://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>
## API authorizers
aws apigateway get-authorizers --rest-api-id <id>
## Models
aws apigateway get-models --rest-api-id <id>
## More info
aws apigateway get-gateway-responses --rest-api-id <id>
aws apigateway get-request-validators --rest-api-id <id>
aws apigateway get-deployments --rest-api-id <id>
# Get api keys generated
aws apigateway get-api-keys --include-value
aws apigateway get-api-key --api-key <id> --include-value # Get just 1
## Example use API key
curl -X GET -H "x-api-key: AJE&Ygenu4[..]" https://e83uuftdi8.execute-api.us-east-1.amazonaws.com/dev/test
## Usage plans
aws apigateway get-usage-plans #Get limit use info
aws apigateway get-usage-plan-keys --usage-plan-id <plan_id> #Get clear text values of api keys
aws apigateway get-usage-plan-key --usage-plan-id <plan_id> --key-id <key_id>
###Already consumed
aws apigateway get-usage --usage-plan-id <plan_id> --start-date 2023-07-01 --end-date 2023-07-12
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 na die eindpunt /resource_policy via GET nie.
.png)
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.
$ curl -X <method> https://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource> --user <AWS_ACCESS_KEY>:<AWS_SECRET_KEY> --aws-sigv4 "aws:amz:<region>:execute-api"
ân Ander manier is om die Authorization tipe AWS Signature binne Postman te gebruik.
.png)
Stel die accessKey en die SecretKey van die rekening wat jy wil gebruik in, en jy kan nou teen die API-eindpunt autentiseer.
Albei metodes sal ân Authorization header genereer soos:
AWS4-HMAC-SHA256 Credential=AKIAYY7XU6ECUDOTWB7W/20220726/us-east-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date, Signature=9f35579fa85c0d089c5a939e3d711362e92641e8c14cc571df8c71b4bc62a5c2
Let op 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.
Versoekondertekening met Python
pip install requests
pip install requests-aws4auth
pip install boto3
import boto3
import requests
from requests_aws4auth import AWS4Auth
region = 'us-east-1' # Region
service = 'execute-api'
access_key = 'YOUR_ACCESS_KEY'
secret_key = 'YOUR_SECRET_KEY'
url = 'https://<apiid>.execute-api.us-east-1.amazonaws.com/<stage>/<resource>'
session = boto3.Session(aws_access_key_id=access_key, aws_secret_access_key=secret_key)
credentials = session.get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
response = requests.get(url, auth=awsauth)
print(response.text)
Pasgemaakte Lambda Outeur
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.
Lambda Outeur Kode Voorbeeld
```python import jsondef lambda_handler(event, context): token = event[âauthorizationTokenâ] method_arn = event[âmethodArnâ]
if not token: return { âstatusCodeâ: 401, âbodyâ: âUnauthorizedâ }
try:
Replace this with your own token validation logic
if token == âyour-secret-tokenâ: return generate_policy(âuserâ, âAllowâ, method_arn) else: return generate_policy(âuserâ, âDenyâ, method_arn) except Exception as e: print(e) return { âstatusCodeâ: 500, âbodyâ: âInternal Server Errorâ }
def generate_policy(principal_id, effect, resource): policy = { âprincipalIdâ: principal_id, âpolicyDocumentâ: { âVersionâ: â2012-10-17â, âStatementâ: [ { âActionâ: âexecute-api:Invokeâ, âEffectâ: effect, âResourceâ: resource } ] } } return policy
</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>
> [!WARNING]
> Afhangende van die Lambda-kode, mag hierdie autorisasie kwesbaar wees
Let daarop dat as 'n **weierbeleid 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="../../../images/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 throttling** geconfigureer hĂȘ na die **eindpunt** wat die API-sleutel vereis:
<figure><img src="../../../images/image (198).png" alt=""><figcaption></figcaption></figure>
## Ongeauthentiseerde Toegang
<a class="content_ref" href="../aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum/index.html"><span class="content_ref_label">AWS - API Gateway Unauthenticated Enum</span></a>
## Privesc
<a class="content_ref" href="../aws-privilege-escalation/aws-apigateway-privesc/index.html"><span class="content_ref_label">AWS - Apigateway Privesc</span></a>
## Post Exploitation
<a class="content_ref" href="../aws-post-exploitation/aws-api-gateway-post-exploitation/index.html"><span class="content_ref_label">AWS - API Gateway Post Exploitation</span></a>
## Persistensie
<a class="content_ref" href="../aws-persistence/aws-api-gateway-persistence/index.html"><span class="content_ref_label">AWS - API Gateway Persistence</span></a>
> [!TIP]
> Leer & oefen AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Leer & oefen GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Leer & oefen Az Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Ondersteun HackTricks</summary>
>
> - Kyk na die [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Sluit aan by die** đŹ [**Discord group**](https://discord.gg/hRep4RUj7f) of die [**telegram group**](https://t.me/peass) of **volg** ons op **Twitter** đŠ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Deel hacking tricks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>
HackTricks Cloud

