AWS - DynamoDB Enum

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

DynamoDB

Grundlegende Informationen

Amazon DynamoDB wird von AWS als eine vollständig verwaltete, serverlose, Key-Value-NoSQL-Datenbank präsentiert, die für die Bereitstellung leistungsstarker Anwendungen unabhängig von ihrer Größe entwickelt wurde. Der Service bietet robuste Funktionen, darunter integrierte Sicherheitsmaßnahmen, unterbrechungsfreie Backups, automatische Replikation in mehreren Regionen, integriertes In-Memory-Caching und praktische Datenexportdienstprogramme.

Im Kontext von DynamoDB werden anstelle einer herkömmlichen Datenbank Tabellen erstellt. Jede Tabelle erfordert die Spezifikation eines Partitionsschlüssels als integralen Bestandteil des Primärschlüssels der Tabelle. Dieser Partitionsschlüssel, im Wesentlichen ein Hashwert, spielt eine entscheidende Rolle sowohl bei der Abfrage von Elementen als auch bei der Verteilung von Daten über verschiedene Hosts. Diese Verteilung ist entscheidend für die Aufrechterhaltung von Skalierbarkeit und Verfügbarkeit der Datenbank. Darüber hinaus besteht die Möglichkeit, einen Sortierschlüssel einzubeziehen, um die Datenorganisation weiter zu verfeinern.

Verschlüsselung

Standardmäßig verwendet DynamoDB einen KMS-Schlüssel, der **zu Amazon DynamoDB gehört,**nicht einmal den von AWS verwalteten Schlüssel, der zumindest Ihrem Konto gehört.

Backups & Export nach S3

Es ist möglich, die Generierung von Tabellensicherungen zu planen oder sie auf Anfrage zu erstellen. Darüber hinaus ist es auch möglich, Point-in-Time-Recovery (PITR) für eine Tabelle zu aktivieren. Die Point-in-Time-Recovery bietet kontinuierliche Backups Ihrer DynamoDB-Daten für 35 Tage, um Sie vor versehentlichen Schreib- oder Löschvorgängen zu schützen.

Es ist auch möglich, die Daten einer Tabelle nach S3 zu exportieren, aber die Tabelle muss PITR aktiviert haben.

GUI

Es gibt eine GUI für lokale Dynamo-Services wie DynamoDB Local, dynalite, localstack usw., die nützlich sein könnte: 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

Nicht authentifizierter Zugriff

pageAWS - DynamoDB Unauthenticated Access

Privilege Eskalation

pageAWS - DynamoDB Privesc

Post-Exploitation

pageAWS - DynamoDB Post Exploitation

Persistenz

pageAWS - DynamoDB Persistence

DynamoDB Injection

SQL-Injection

Es gibt Möglichkeiten, auf DynamoDB-Daten mit SQL-Syntax zuzugreifen, daher sind auch typische SQL-Injections möglich.

NoSQL-Injection

In DynamoDB können verschiedene Bedingungen verwendet werden, um Daten abzurufen, wie bei einer üblichen NoSQL-Injection, wenn es möglich ist, weitere Bedingungen zu verknüpfen, um Daten abzurufen, könnten Sie versteckte Daten erhalten (oder die gesamte Tabelle dumpen). Hier finden Sie die von DynamoDB unterstützten Bedingungen: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html

Beachten Sie, dass verschiedene Bedingungen unterstützt werden, wenn auf die Daten über query oder über scan zugegriffen wird.

Tatsächlich müssen Query-Aktionen die Bedingung "EQ" (gleich) im Primärschlüssel angeben, um zu funktionieren, was sie viel weniger anfällig für NoSQL-Injections macht (und die Operation auch sehr begrenzt macht).

Wenn Sie den Vergleich ändern oder neue hinzufügen können, könnten Sie mehr Daten abrufen.

# 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

Rohes Json-Injection

DynamoDB akzeptiert Json-Objekte, um nach Daten in der Datenbank zu suchen. Wenn Sie feststellen, dass Sie im Json-Objekt, das zur Suche gesendet wird, schreiben können, könnten Sie das Datenbank-Dump, alle Inhalte machen.

Zum Beispiel, das Einschleusen in eine Anfrage wie:

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

Ein Angreifer könnte etwas wie folgt einschleusen:

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

die "EQ"-Bedingung für die Suche nach der ID 1000 zu korrigieren und dann nach allen Daten mit einer Id-Zeichenfolge größer als 0 zu suchen, was alles ist.

:property Injection

Einige SDKs ermöglichen die Verwendung einer Zeichenfolge, die angibt, welche Filterung durchgeführt werden soll, wie:

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

Sie müssen wissen, dass bei der Suche in DynamoDB zum Ersetzen eines Attribut-Werts in Filterausdrücken beim Scannen der Elemente die Token mit dem :-Zeichen beginnen sollten. Solche Token werden zur Laufzeit durch den tatsächlichen Attributwert ersetzt.

Daher kann sich ein Login wie der vorherige mit etwas ähnlichem umgehen lassen:

:username = :username or :username
# This will generate the query:
# :username = :username or :username = :username and Password = :password
# which is always true
Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated