AWS - DynamoDB Enum

Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

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

DynamoDB

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

Το Amazon DynamoDB παρουσιάζεται από το AWS ως μια πλήρως διαχειριζόμενη, serverless, key-value NoSQL βάση δεδομένων, σχεδιασμένη για την υποστήριξη εφαρμογών υψηλής απόδοσης ανεξάρτητα από το μέγεθός τους. Η υπηρεσία εξασφαλίζει αξιόπιστα χαρακτηριστικά, συμπεριλαμβανομένων μέτρων ασφαλείας, αδιάκοπων αντιγράφων ασφαλείας, αυτόματης αντιγραφής σε πολλαπλές περιοχές, ενσωματωμένης μνήμης cache και ευέλικτων εργαλείων εξαγωγής δεδομένων.

Στο πλαίσιο του DynamoDB, αντί να δημιουργείται μια παραδοσιακή βάση δεδομένων, δημιουργούνται πίνακες. Κάθε πίνακας απαιτεί την καθορισμένη πρωτεύουσα κλειδαριά ως αναπόσπαστο στοιχείο του κύριου κλειδιού του πίνακα. Αυτή η πρωτεύουσα κλειδαριά, ουσιαστικά μια τιμή κατακερματισμού, παίζει κρίσιμο ρόλο τόσο στην ανάκτηση στοιχείων όσο και στη διανομή των δεδομένων σε διάφορους κόμβους. Αυτή η διανομή είναι καθοριστική για τη διατήρηση της κλιμακωσιμότητας και της διαθεσιμότητας της βάσης δεδομένων. Επιπλέον, υπάρχει η δυνατότητα ενσωμάτωσης μιας κλειδαριάς ταξινόμησης για περαιτέρω οργάνωση των δεδομένων.

Κρυπτογράφηση

Από προεπιλογή, το DynamoDB χρησιμοποιεί ένα κλειδί KMS που ανήκει στο Amazon DynamoDB, ακόμη και όχι το διαχειριζόμενο κλειδί του AWS που τουλάχιστον ανήκει στον λογαριασμό σας.

Αντίγραφα Ασφαλείας & Εξαγωγή σε S3

Είναι δυνατόν να προγραμματίσετε τη δημιουργία αντιγράφων ασφαλείας του πίνακα ή να τα δημιουργήσετε κατά απαίτηση. Επιπλέον, είναι επίσης δυνατόν να ενεργοποιήσετε τη ανάκτηση σε συγκεκριμένη χρονική στιγμή (PITR) για έναν πίνακα. Η ανάκτηση σε συγκεκριμένη χρονική στιγμή παρέχει συνεχή αντίγραφα ασφαλείας των δεδομένων του DynamoDB για 35 ημέρες για να σας βοηθήσει να προστατευτείτε από ακούσιες εγγραφές ή διαγραφές.

Είναι επίσης δυνατόν να εξάγετε τα δεδομένα ενός πίνακα σε S3, αλλά ο πίνακας πρέπει να έχει ενεργοποιημένη τη PITR.

Γραφική Διεπαφή Χρήστη

Υπάρχει μια γραφική διεπαφή χρήστη για τις τοπικές υπηρεσίες Dynamo όπως το DynamoDB Local, dynalite, localstack, κλπ, που μπορεί να είναι χρήσιμη: https://github.com/aaronshaf/dynamodb-admin

Απαρίθμηση

# Tables
aws dynamodb list-tables
aws dynamodb describe-table --table-name <t_name> #Get metadata info
## The primary key and sort key will appear inside the KeySchema field

#Check if point in time recovery is enabled
aws dynamodb describe-continuous-backups \
--table-name tablename

# Backups
aws dynamodb list-backups
aws dynamodb describe-backup --backup-arn <arn>
aws dynamodb describe-continuous-backups --table-name <t_name>

# Global tables
aws dynamodb list-global-tables
aws dynamodb describe-global-table --global-table-name <name>

# Exports
aws dynamodb list-exports
aws dynamodb describe-export --export-arn <arn>

# Misc
aws dynamodb describe-endpoints #Dynamodb endpoints

Μη εξουσιοδοτημένη πρόσβαση

pageAWS - DynamoDB Unauthenticated Access

Ανέβασμα δικαιωμάτων

pageAWS - DynamoDB Privesc

Μετά από εκμετάλλευση

pageAWS - DynamoDB Post Exploitation

Διατήρηση

pageAWS - DynamoDB Persistence

Ενσωμάτωση DynamoDB

Ενσωμάτωση SQL

Υπάρχουν τρόποι να αποκτήσετε πρόσβαση σε δεδομένα DynamoDB με σύνταξη SQL, επομένως, είναι δυνατές και οι κλασικές ενσωματώσεις SQL.

Ενσωμάτωση NoSQL

Στο DynamoDB μπορούν να χρησιμοποιηθούν διάφορες συνθήκες για την ανάκτηση δεδομένων, όπως σε μια κοινή ενσωμάτωση NoSQL, αν είναι δυνατόν να αλυσοδεθούν περισσότερες συνθήκες για την ανάκτηση δεδομένων, μπορείτε να ανακτήσετε κρυφά δεδομένα (ή να αντλήσετε ολόκληρο τον πίνακα). Μπορείτε να βρείτε εδώ τις συνθήκες που υποστηρίζονται από το DynamoDB: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html

Σημειώστε ότι υποστηρίζονται διάφορες συνθήκες αν η πρόσβαση στα δεδομένα γίνεται μέσω query ή μέσω scan.

Πράγματι, οι ενέργειες Query πρέπει να καθορίσουν τη συνθήκη "EQ" (ίσο) στον κύριο κλειδί για να λειτουργήσουν, καθιστώντας τις πολύ λιγότερο ευάλωτες σε ενσωματώσεις NoSQL (και περιορίζοντας επίσης πολύ τη λειτουργία).

Αν μπορείτε να αλλάξετε τη σύγκριση που γίνεται ή να προσθέσετε νέες, μπορείτε να ανακτήσετε περισσότερα δεδομένα.

# Comparators to dump the database
"NE": "a123" #Get everything that doesn't equal "a123"
"NOT_CONTAINS": "a123" #What you think
"GT": " " #All strings are greater than a space

Ενέργεια εισαγωγής Raw Json

Το DynamoDB δέχεται αντικείμενα Json για να αναζητήσει δεδομένα μέσα στη βάση δεδομένων. Αν ανακαλύψετε ότι μπορείτε να γράψετε στο αντικείμενο json που στέλνετε για αναζήτηση, μπορείτε να κάνετε αντιγραφή της βάσης δεδομένων, όλο το περιεχόμενο.

Για παράδειγμα, εισάγοντας σε ένα αίτημα όπως:

'{"Id": {"ComparisonOperator": "EQ","AttributeValueList": [{"N": "' + user_input + '"}]}}'

Ένας επιτιθέμενος μπορεί να εισαγάγει κάτι όπως:

1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0

διορθώστε την συνθήκη "EQ" αναζητώντας το ID 1000 και στη συνέχεια αναζητήστε όλα τα δεδομένα με ένα συμβολοσειρά Id μεγαλύτερη από 0, που είναι όλα.

:Ιδιότητα Εισαγωγής

Ορισμένα SDK επιτρέπουν τη χρήση μιας συμβολοσειράς που υποδηλώνει το φιλτράρισμα που πρέπει να γίνει, όπως:

new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap)

Πρέπει να γνωρίζετε ότι κατά την αναζήτηση στο DynamoDB για την αντικατάσταση μιας τιμής γνωρίσματος στις έκφρασεις φίλτρου κατά τη σάρωση των στοιχείων, οι δείκτες πρέπει να αρχίζουν με τον χαρακτήρα :. Τέτοιοι δείκτες θα αντικατασταθούν με την πραγματική τιμή γνωρίσματος κατά την εκτέλεση.

Επομένως, μια σύνδεση όπως η προηγούμενη μπορεί να παρακαμφθεί με κάτι τέτοιο:

:username = :username or :username
# This will generate the query:
# :username = :username or :username = :username and Password = :password
# which is always true
Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated