AWS - API Gateway Enum

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Ερυθρού Συνεργείου HackTricks AWS)!

Άλλοι τρόποι υποστήριξης των HackTricks:

Πύλη API

Βασικές Πληροφορίες

Η Πύλη API του AWS είναι ένα ολοκληρωμένο υπηρεσία που προσφέρεται από το Amazon Web Services (AWS) σχεδιασμένο για τους προγραμματιστές να δημιουργούν, δημοσιεύουν και εποπτεύουν APIs σε μεγάλη κλίμακα. Λειτουργεί ως σημείο εισόδου σε μια εφαρμογή, επιτρέποντας στους προγραμματιστές να καθιερώσουν ένα πλαίσιο κανόνων και διαδικασιών. Αυτό το πλαίσιο ελέγχει την πρόσβαση που έχουν οι εξωτερικοί χρήστες σε συγκεκριμένα δεδομένα ή λειτουργίες εντός της εφαρμογής.

Η Πύλη API σάς επιτρέπει να ορίσετε πώς θα χειριστούνται οι αιτήσεις προς τα APIs σας, και μπορεί να δημιουργήσει προσαρμοσμένα σημεία πρόσβασης στο API με συγκεκριμένες μεθόδους (π.χ., GET, POST, PUT, DELETE) και πόρους. Μπορεί επίσης να δημιουργήσει SDKs πελατών (Κιτ Ανάπτυξης Λογισμικού) για να διευκολύνει τους προγραμματιστές να καλούν τα APIs σας από τις εφαρμογές τους.

Τύποι Πυλών API

  • HTTP API: Δημιουργήστε χαμηλής καθυστέρησης και οικονομικά αποδοτικά REST APIs με ενσωματωμένες λειτουργίες όπως OIDC και OAuth2, και φυσική υποστήριξη CORS. Λειτουργεί με τα εξής: Lambda, HTTP backends.

  • WebSocket API: Δημιουργήστε ένα WebSocket API χρησιμοποιώντας μόνιμες συνδέσεις για πραγματικές περιπτώσεις χρήσης όπως εφαρμογές συνομιλίας ή πίνακες ελέγχου. Λειτουργεί με τα εξής: Lambda, HTTP, Υπηρεσίες AWS.

  • REST API: Αναπτύξτε ένα REST API όπου αποκτάτε πλήρη έλεγχο επί του αιτήματος και της απόκρισης μαζί με δυνατότητες διαχείρισης του API. Λειτουργεί με τα εξής: Lambda, HTTP, Υπηρεσίες AWS.

  • REST API Ιδιωτικό: Δημιουργήστε ένα REST API που είναι προσβάσιμο μόνο από μέσα σε ένα VPC.

Κύρια Στοιχεία Πύλης API

  1. Πόροι: Στην Πύλη API, οι πόροι είναι τα στοιχεία που συνθέτουν τη δομή του API σας. Αντιπροσωπεύουν τα διαφορετικά μονοπάτια ή σημεία πρόσβασης του API σας και αντιστοιχούν στις διάφορες ενέργειες που υποστηρίζει το API σας. Ένας πόρος είναι κάθε μέθοδος (π.χ., GET, POST, PUT, DELETE) μέσα σε κάθε μονοπάτι (/, ή /users, ή /user/{id}.

  2. Στάδια: Τα στάδια στην Πύλη API αντιπροσωπεύουν διαφορετικές εκδόσεις ή περιβάλλοντα του API σας, όπως ανάπτυξη, σταδιοποίηση ή παραγωγή. Μπορείτε να χρησιμοποιήσετε στάδια για να διαχειριστείτε και να αναπτύξετε πολλαπλές εκδόσεις του API σας ταυτόχρονα, επιτρέποντάς σας να δοκιμάσετε νέα χαρακτηριστικά ή διορθώσεις σφαλμάτων χωρίς να επηρεάζετε το περιβάλλον παραγωγής. Τα στάδια υποστηρίζουν επίσης μεταβλητές σταδίου, οι οποίες είναι ζεύγη κλειδιών-τιμών που μπορούν να χρησιμοποιηθούν για να διαμορφώσουν τη συμπεριφορά του API σας με βάση το τρέχον στάδιο. Για παράδειγμα, θα μπορούσατε να χρησιμοποιήσετε μεταβλητές σταδίου για να κατευθύνετε τις αιτήσεις API σε διαφορετικές λειτουργίες Lambda ή άλλες υπηρεσίες πίσω από το στάδιο.

  • Το στάδιο εμφανίζεται στην αρχή του URL του σημείου πρόσβασης της Πύλης API.

  1. Εξουσιοδότες: Οι εξουσιοδότες στην Πύλη API είναι υπεύθυνοι για τον έλεγχο της πρόσβασης στο API σας επαληθεύοντας την ταυτότητα του καλούντος πριν επιτραπεί η εκτέλεση του αιτήματος. Μπορείτε να χρησιμοποιήσετε συναρτήσεις AWS Lambda ως προσαρμοσμένους εξουσιοδότες, που σας επιτρέπει να υλοποιήσετε τη δική σας λογική πιστοποίησης και εξουσιοδότησης. Όταν έρχεται ένα αίτημα, η Πύλη API περνά το διακριτικό εξουσιοδότησης του αιτήματος στον εξουσιοδότη Lambda, ο οποίος επεξεργάζεται το διακριτικό και επιστρέφει μια πολιτική IAM που καθορίζει ποιες ενέργειες επιτρέπεται στον καλούντα να εκτελέσει. Η Πύλη API υποστηρίζει επίσης ενσωματωμένους εξουσιοδότες, όπως Διαχείριση Ταυτότητας και Πρόσβασης AWS (IAM) και Amazon Cognito.

  2. Πολιτική Πόρου: Μια πολιτική πόρου στην Πύλη API είναι ένα JSON έγγραφο που ορίζει τα δικαιώματα για την πρόσβαση στο API σας. Είναι παρόμοιο με μια πολιτική IAM αλλά ειδικά σχεδιασμένο για την Πύλη API. Μπορείτε να χρησιμοποιήσετε μια πολιτική πόρου για να ελέγξετε ποιος μπορεί να έχει πρόσβαση στο API σας, ποιες μεθόδους μπορεί να καλέσει και από ποιες διευθύνσεις IP ή VPCs μπορεί να συνδεθεί. Οι πολιτικές πόρων μπορούν να χρησιμοποιηθούν σε συνδυασμό με τους εξουσιοδότες για να παρέχουν ελεγχόμενη πρόσβαση στο API σας.

  • Για να τεθεί σε ισχύ η πολιτική πόρου, το API πρέπει να αναπτυχθεί ξανά μετά την τροπ

# 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

Αναγνώριση Υπηρεσιών API Gateway v2

Η υπηρεσία API Gateway v2 μπορεί να αναγνωριστεί μέσω του DNS όνοματος execute-api.{region}.amazonaws.com. Επιπλέον, μπορεί να υπάρχουν επιπλέον υπηρεσίες με τη μορφή *.execute-api.{region}.amazonaws.com.

Για παράδειγμα, η υπηρεσία myapi123.execute-api.us-west-2.amazonaws.com αναγνωρίζεται ως υπηρεσία API Gateway v2.

# Generic info
aws apigatewayv2 get-account --
aws apigatewayv2 get-domain-names
aws apigatewayv2 get-domain-name --domain-name <name>
aws apigatewayv2 get-usage-plans --
aws apigatewayv2 get-vpc-links
aws apigatewayv2 get-client-certificates --

# Enumerate APIs
aws apigatewayv2 get-apis # This will also show the resource policy (if any)
aws apigatewayv2 get-api --api-id <id>

## Get all the info from an api at once
aws apigatewayv2 export-api --api-id <id> --output-type YAML --specification OAS30 /tmp/api.yaml

## Get stages
aws apigatewayv2 get-stages --api-id <id>

## Get routes
aws apigatewayv2 get-routes --api-id <id>
aws apigatewayv2 get-route --api-id <id> --route-id <route-id>

## Get deployments
aws apigatewayv2 get-deployments --api-id <id>
aws apigatewayv2 get-deployment --api-id <id> --deployment-id <dep-id>

## Get integrations
aws apigatewayv2 get-integrations --api-id <id>

## Get authorizers
aws apigatewayv2 get-authorizers --api-id <id>
aws apigatewayv2 get-authorizer --api-id <id> --authorizer-id <uth-id>

## Get domain mappings
aws apigatewayv2 get-api-mappings --api-id <id> --domain-name <dom-name>
aws apigatewayv2 get-api-mapping --api-id <id> --api-mapping-id <map-id> --domain-name <dom-name>

## Get models
aws apigatewayv2 get-models --api-id <id>

## Call API
https://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>

Διαφορετικές Εξουσιοδοτήσεις για πρόσβαση στα σημεία άκρης της API Gateway

Πολιτική Πόρων

Είναι δυνατόν να χρησιμοποιηθούν πολιτικές πόρων για να οριστεί ποιος μπορεί να καλέσει τα σημεία άκρης της API. Στο ακόλουθο παράδειγμα μπορείτε να δείτε ότι η συγκεκριμένη IP δεν μπορεί να καλέσει το σημείο άκρης /resource_policy μέσω GET.

Εξουσιοδότηση IAM

Είναι δυνατόν να οριστεί ότι ένας μέθοδος μέσα σε ένα μονοπάτι (ένας πόρος) απαιτεί αυθεντικοποίηση IAM για να τον καλέσει.

Όταν αυτό οριστεί, θα λάβετε το σφάλμα {"message":"Missing Authentication Token"} όταν προσπαθήσετε να φτάσετε στο σημείο άκρης χωρίς καμία εξουσιοδότηση.

Ένας εύκολος τρόπος να δημιουργήσετε το αναμενόμενο τοκέν από την εφαρμογή είναι να χρησιμοποιήσετε τον τύπο Authorization AWS Signature μέσα στο Postman.

Ορίστε το accessKey και το SecretKey του λογαριασμού που θέλετε να χρησιμοποιήσετε και μπορείτε να πιστοποιηθείτε ενάντια στο σημείο άκρης της API.

Θα δημιουργήσει ένα header Αυθεντικοποίησης όπως:

AWS4-HMAC-SHA256 Credential=AKIAYY7XU6ECUDOTWB7W/20220726/us-east-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date, Signature=9f35579fa85c0d089c5a939e3d711362e92641e8c14cc571df8c71b4bc62a5c2

Σημειώστε ότι σε άλλες περιπτώσεις ο Εξουσιοδότης μπορεί να έχει γραφτεί κακά και απλά να στέλνονται οτιδήποτε μέσα στην κεφαλίδα Εξουσιοδότησης θα επιτρέψει να δείτε το κρυφό περιεχόμενο.

Υπογραφή Αιτήσεων Χρησιμοποιώντας την 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)

Προσαρμοσμένος Lambda Εξουσιοδότης

Είναι δυνατόν να χρησιμοποιήσετε ένα lambda που με βάση ένα δεδομένο τοκέν θα επιστρέφει μια πολιτική IAM που υποδηλώνει εάν ο χρήστης έχει εξουσιοδοτηθεί να καλέσει το τέλος του API. Μπορείτε να ορίσετε κάθε μέθοδο πόρου που θα χρησιμοποιεί τον εξουσιοδότη.

Παράδειγμα Κώδικα Εξουσιοδότη Lambda

```python import json

def 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>

Καλέστε το με κάτι παρόμοιο:

<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'>

Ανάλογα με τον κώδικα Lambda, αυτή η εξουσιοδότηση μπορεί να είναι ευάλωτη

</div>

Σημειώστε ότι αν δημιουργηθεί και επιστραφεί μια **απόρριψη πολιτικής**, το σφάλμα που επιστρέφεται από το API Gateway είναι: `{"Message":"User is not authorized to access this resource with an explicit deny"}`

Με αυτόν τον τρόπο θα μπορούσατε **να αναγνωρίσετε αυτήν την εξουσιοδότηση** που είναι σε ισχύ.

### Απαιτείται Κλειδί API

Είναι δυνατόν να οριστούν σημεία API που απαιτούν ένα έγκυρο κλειδί API για να επικοινωνήσουν μαζί του.

<figure><img src="../../../.gitbook/assets/image (92) (1).png" alt=""><figcaption></figcaption></figure>

Είναι δυνατόν να δημιουργήσετε κλειδιά API στο πύλη API Gateway και ακόμη να ορίσετε πόσο μπορεί να χρησιμοποιηθεί (σε αιτήσεις ανά δευτερόλεπτο και αιτήσεις ανά μήνα).

Για να λειτουργήσει ένα κλειδί API, πρέπει να το προσθέσετε σε ένα **Σχέδιο Χρήσης**, αυτό το σχέδιο χρήσης πρέπει να προστεθεί στο **Στάδιο API** και το σχετικό στάδιο API πρέπει να έχει ρυθμιστεί ένα **περιορισμό μεθόδου** στο **σημείο πρόσβασης** που απαιτεί το κλειδί API:

<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>

## Ανεξέλεγκτη Πρόσβαση

<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>

## Ανύψωση Δικαιωμάτων

<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>

## Μετά την Εκμετάλλευση

<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>

### Διατήρηση

<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>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

Άλλοι τρόποι υποστήριξης του HackTricks:

* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΩΝ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).

</details>

Last updated