AWS - DynamoDB Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Η Amazon DynamoDB παρουσιάζεται από την AWS ως μια πλήρως διαχειριζόμενη, χωρίς διακομιστές, βάση δεδομένων NoSQL τύπου key-value, σχεδιασμένη για την υποστήριξη εφαρμογών υψηλής απόδοσης ανεξαρτήτως μεγέθους. Η υπηρεσία εξασφαλίζει ισχυρές δυνατότητες, συμπεριλαμβανομένων των εγγενών μέτρων ασφαλείας, αδιάλειπτων αντιγράφων ασφαλείας, αυτοματοποιημένης αναπαραγωγής σε πολλές περιοχές, ενσωματωμένης προσωρινής μνήμης και βολικών εργαλείων εξαγωγής δεδομένων.
Στο πλαίσιο της DynamoDB, αντί να δημιουργηθεί μια παραδοσιακή βάση δεδομένων, δημιουργούνται πίνακες. Κάθε πίνακας απαιτεί τον καθορισμό ενός κλειδιού διαμερίσματος ως αναπόσπαστο μέρος του κύριου κλειδιού του πίνακα. Αυτό το κλειδί διαμερίσματος, που είναι ουσιαστικά μια τιμή hash, παίζει κρίσιμο ρόλο τόσο στην ανάκτηση στοιχείων όσο και στη διανομή δεδομένων σε διάφορους διακομιστές. Αυτή η διανομή είναι καθοριστική για τη διατήρηση τόσο της κλιμάκωσης όσο και της διαθεσιμότητας της βάσης δεδομένων. Επιπλέον, υπάρχει η επιλογή να προστεθεί ένα κλειδί ταξινόμησης για περαιτέρω βελτίωση της οργάνωσης των δεδομένων.
Από προεπιλογή, η DynamoDB χρησιμοποιεί ένα κλειδί KMS που **ανήκει στην Amazon DynamoDB,** ούτε καν το διαχειριζόμενο κλειδί της AWS που τουλάχιστον ανήκει στον λογαριασμό σας.
Είναι δυνατή η προγραμματισμένη δημιουργία αντιγράφων ασφαλείας πίνακα ή η δημιουργία τους κατόπιν αιτήματος. Επιπλέον, είναι επίσης δυνατή η ενεργοποίηση της Ανάκτησης σε συγκεκριμένο χρόνο (PITR) για έναν πίνακα. Η ανάκτηση σε συγκεκριμένο χρόνο παρέχει συνεχόμενα αντίγραφα ασφαλείας των δεδομένων σας στη DynamoDB για 35 ημέρες για να σας βοηθήσει να προστατευθείτε από τυχαίες εγγραφές ή διαγραφές.
Είναι επίσης δυνατή η εξαγωγή των δεδομένων ενός πίνακα σε S3, αλλά ο πίνακας πρέπει να έχει ενεργοποιημένο το PITR.
Υπάρχει ένα GUI για τοπικές υπηρεσίες Dynamo όπως DynamoDB Local, dynalite, localstack, κ.λπ., που θα μπορούσε να είναι χρήσιμο: https://github.com/aaronshaf/dynamodb-admin
Υπάρχουν τρόποι πρόσβασης στα δεδομένα του DynamoDB με SQL σύνταξη, επομένως, είναι επίσης δυνατές οι τυπικές SQL εισαγωγές.
Στο DynamoDB μπορούν να χρησιμοποιηθούν διαφορετικές συνθήκες για την ανάκτηση δεδομένων, όπως σε μια κοινή NoSQL Εισαγωγή. Αν είναι δυνατό να αλυσιδωθούν περισσότερες συνθήκες για την ανάκτηση δεδομένων, θα μπορούσατε να αποκτήσετε κρυφά δεδομένα (ή να εξάγετε ολόκληρο τον πίνακα). Μπορείτε να βρείτε εδώ τις υποστηριζόμενες συνθήκες από το DynamoDB: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
Σημειώστε ότι υποστηρίζονται διαφορετικές συνθήκες αν τα δεδομένα προσπελάζονται μέσω query
ή μέσω scan
.
Στην πραγματικότητα, οι ενέργειες Query χρειάζονται να καθορίσουν τη συνθήκη "EQ" (ίσο) στο κύριο κλειδί για να λειτουργήσουν, καθιστώντας τις πολύ λιγότερο επιρρεπείς σε NoSQL εισαγωγές (και επίσης περιορίζοντας πολύ τη λειτουργία).
Αν μπορείτε να αλλάξετε τη σύγκριση που εκτελείται ή να προσθέσετε νέες, θα μπορούσατε να ανακτήσετε περισσότερα δεδομένα.
Αυτή η ευπάθεια βασίζεται στο dynamodb Scan Filter το οποίο είναι πλέον απαρχαιωμένο!
DynamoDB δέχεται Json αντικείμενα για αναζήτηση δεδομένων μέσα στη βάση δεδομένων. Αν διαπιστώσετε ότι μπορείτε να γράψετε στο json αντικείμενο που αποστέλλεται για αναζήτηση, θα μπορούσατε να κάνετε dump της βάσης δεδομένων, όλων των περιεχομένων.
Για παράδειγμα, εισάγοντας σε ένα αίτημα όπως:
ένας επιτιθέμενος θα μπορούσε να εισάγει κάτι σαν:
1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0
διόρθωση της συνθήκης "EQ" αναζητώντας το ID 1000 και στη συνέχεια αναζητώντας όλα τα δεδομένα με μια συμβολοσειρά Id μεγαλύτερη από 0, που είναι όλα.
Ένα άλλο ευάλωτο παράδειγμα χρησιμοποιώντας μια σύνδεση θα μπορούσε να είναι:
Αυτό θα ήταν ευάλωτο σε:
Ορισμένα SDK επιτρέπουν τη χρήση μιας συμβολοσειράς που υποδεικνύει τη φιλτράρισμα που θα εκτελεστεί όπως:
Πρέπει να γνωρίζετε ότι η αναζήτηση στο DynamoDB για υποκατάσταση μιας τιμής χαρακτηριστικού σε εκφράσεις φίλτρου κατά την σάρωση των στοιχείων, οι τόκεν θα πρέπει να ξεκινούν με τον χαρακτήρα :
. Τέτοιοι τόκεν θα αντικατασταθούν με την πραγματική τιμή χαρακτηριστικού κατά την εκτέλεση.
Επομένως, μια σύνδεση όπως η προηγούμενη μπορεί να παρακαμφθεί με κάτι σαν:
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)