Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs σταHackTricks και HackTricks Cloud αποθετήρια του github.
Πύλη 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
Πόροι: Στην Πύλη API, οι πόροι είναι τα στοιχεία που συνθέτουν τη δομή του API σας. Αντιπροσωπεύουν τα διαφορετικά μονοπάτια ή σημεία πρόσβασης του API σας και αντιστοιχούν στις διάφορες ενέργειες που υποστηρίζει το API σας. Ένας πόρος είναι κάθε μέθοδος (π.χ., GET, POST, PUT, DELETE) μέσα σε κάθε μονοπάτι (/, ή /users, ή /user/{id}.
Στάδια: Τα στάδια στην Πύλη API αντιπροσωπεύουν διαφορετικές εκδόσεις ή περιβάλλοντα του API σας, όπως ανάπτυξη, σταδιοποίηση ή παραγωγή. Μπορείτε να χρησιμοποιήσετε στάδια για να διαχειριστείτε και να αναπτύξετε πολλαπλές εκδόσεις του API σας ταυτόχρονα, επιτρέποντάς σας να δοκιμάσετε νέα χαρακτηριστικά ή διορθώσεις σφαλμάτων χωρίς να επηρεάζετε το περιβάλλον παραγωγής. Τα στάδια υποστηρίζουν επίσης μεταβλητές σταδίου, οι οποίες είναι ζεύγη κλειδιών-τιμών που μπορούν να χρησιμοποιηθούν για να διαμορφώσουν τη συμπεριφορά του API σας με βάση το τρέχον στάδιο. Για παράδειγμα, θα μπορούσατε να χρησιμοποιήσετε μεταβλητές σταδίου για να κατευθύνετε τις αιτήσεις API σε διαφορετικές λειτουργίες Lambda ή άλλες υπηρεσίες πίσω από το στάδιο.
Το στάδιο εμφανίζεται στην αρχή του URL του σημείου πρόσβασης της Πύλης API.
Εξουσιοδότες: Οι εξουσιοδότες στην Πύλη API είναι υπεύθυνοι για τον έλεγχο της πρόσβασης στο API σας επαληθεύοντας την ταυτότητα του καλούντος πριν επιτραπεί η εκτέλεση του αιτήματος. Μπορείτε να χρησιμοποιήσετε συναρτήσεις AWS Lambda ως προσαρμοσμένους εξουσιοδότες, που σας επιτρέπει να υλοποιήσετε τη δική σας λογική πιστοποίησης και εξουσιοδότησης. Όταν έρχεται ένα αίτημα, η Πύλη API περνά το διακριτικό εξουσιοδότησης του αιτήματος στον εξουσιοδότη Lambda, ο οποίος επεξεργάζεται το διακριτικό και επιστρέφει μια πολιτική IAM που καθορίζει ποιες ενέργειες επιτρέπεται στον καλούντα να εκτελέσει. Η Πύλη API υποστηρίζει επίσης ενσωματωμένους εξουσιοδότες, όπως Διαχείριση Ταυτότητας και Πρόσβασης AWS (IAM) και Amazon Cognito.
Πολιτική Πόρου: Μια πολιτική πόρου στην Πύλη API είναι ένα JSON έγγραφο που ορίζει τα δικαιώματα για την πρόσβαση στο API σας. Είναι παρόμοιο με μια πολιτική IAM αλλά ειδικά σχεδιασμένο για την Πύλη API. Μπορείτε να χρησιμοποιήσετε μια πολιτική πόρου για να ελέγξετε ποιος μπορεί να έχει πρόσβαση στο API σας, ποιες μεθόδους μπορεί να καλέσει και από ποιες διευθύνσεις IP ή VPCs μπορεί να συνδεθεί. Οι πολιτικές πόρων μπορούν να χρησιμοποιηθούν σε συνδυασμό με τους εξουσιοδότες για να παρέχουν ελεγχόμενη πρόσβαση στο API σας.
Για να τεθεί σε ισχύ η πολιτική πόρου, το API πρέπει να αναπτυχθεί ξανά μετά την τροπ
# 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
Αναγνώριση Υπηρεσιών 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 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>
Διαφορετικές Εξουσιοδοτήσεις για πρόσβαση στα σημεία άκρης της API Gateway
Πολιτική Πόρων
Είναι δυνατόν να χρησιμοποιηθούν πολιτικές πόρων για να οριστεί ποιος μπορεί να καλέσει τα σημεία άκρης της API.
Στο ακόλουθο παράδειγμα μπορείτε να δείτε ότι η συγκεκριμένη IP δεν μπορεί να καλέσει το σημείο άκρης /resource_policy μέσω GET.
Εξουσιοδότηση IAM
Είναι δυνατόν να οριστεί ότι ένας μέθοδος μέσα σε ένα μονοπάτι (ένας πόρος) απαιτεί αυθεντικοποίηση IAM για να τον καλέσει.
Όταν αυτό οριστεί, θα λάβετε το σφάλμα {"message":"Missing Authentication Token"} όταν προσπαθήσετε να φτάσετε στο σημείο άκρης χωρίς καμία εξουσιοδότηση.
Ένας εύκολος τρόπος να δημιουργήσετε το αναμενόμενο τοκέν από την εφαρμογή είναι να χρησιμοποιήσετε τον τύπο AuthorizationAWS Signature μέσα στο Postman.
Ορίστε το accessKey και το SecretKey του λογαριασμού που θέλετε να χρησιμοποιήσετε και μπορείτε να πιστοποιηθείτε ενάντια στο σημείο άκρης της API.
Σημειώστε ότι σε άλλες περιπτώσεις ο Εξουσιοδότης μπορεί να έχει γραφτεί κακά και απλά να στέλνονται οτιδήποτε μέσα στην κεφαλίδα Εξουσιοδότησης θα επιτρέψει να δείτε το κρυφό περιεχόμενο.
Είναι δυνατόν να χρησιμοποιήσετε ένα lambda που με βάση ένα δεδομένο τοκέν θα επιστρέφει μια πολιτική IAM που υποδηλώνει εάν ο χρήστης έχει εξουσιοδοτηθεί να καλέσει το τέλος του API.
Μπορείτε να ορίσετε κάθε μέθοδο πόρου που θα χρησιμοποιεί τον εξουσιοδότη.
</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>