AWS - DynamoDB Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Amazon DynamoDB wird von AWS als eine vollständig verwaltete, serverlose, Schlüssel-Wert NoSQL-Datenbank präsentiert, die für leistungsstarke Anwendungen unabhängig von ihrer Größe konzipiert ist. Der Dienst bietet robuste Funktionen, einschließlich integrierter Sicherheitsmaßnahmen, unterbrechungsfreier Backups, automatisierter Replikation über mehrere Regionen, integrierter In-Memory-Caching und praktischer Datenexport-Utilities.
Im Kontext von DynamoDB werden anstelle einer traditionellen Datenbank Tabellen erstellt. Jede Tabelle erfordert die Angabe eines Partitionierungsschlüssels als integralen Bestandteil des Primärschlüssels der Tabelle. Dieser Partitionierungsschlüssel, im Wesentlichen ein Hash-Wert, 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 sowohl der Skalierbarkeit als auch der Verfügbarkeit der Datenbank. Darüber hinaus gibt es die Möglichkeit, einen Sortierschlüssel hinzuzufügen, um die Datenorganisation weiter zu verfeinern.
Standardmäßig verwendet DynamoDB einen KMS-Schlüssel, der zu Amazon DynamoDB gehört, nicht einmal den von AWS verwalteten Schlüssel, der zumindest zu Ihrem Konto gehört.
Es ist möglich, die Erstellung von Tabellen-Backups 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 Wiederherstellung zu einem bestimmten Zeitpunkt 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.
Es gibt eine GUI für lokale Dynamo-Dienste wie DynamoDB Local, dynalite, localstack usw., die nützlich sein könnte: https://github.com/aaronshaf/dynamodb-admin
Es gibt Möglichkeiten, auf DynamoDB-Daten mit SQL-Syntax zuzugreifen, daher sind typische SQL-Injectionen ebenfalls möglich.
In DynamoDB können verschiedene Bedingungen verwendet werden, um Daten abzurufen. Wie bei einer gängigen NoSQL-Injection, wenn es möglich ist, mehrere Bedingungen zu verketten, um Daten abzurufen, könnten Sie versteckte Daten (oder die gesamte Tabelle dumpen) erhalten. 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-Injectionen macht (und auch die Operation sehr eingeschränkt).
Wenn Sie die Vergleichsoperation ändern oder neue hinzufügen können, könnten Sie mehr Daten abrufen.
Diese Schwachstelle basiert auf dem dynamodb Scan Filter, der jetzt veraltet ist!
DynamoDB akzeptiert Json-Objekte, um Daten in der DB zu suchen. Wenn Sie feststellen, dass Sie im Json-Objekt, das zum Suchen gesendet wird, schreiben können, könnten Sie die DB dumpen, alle Inhalte.
Zum Beispiel, injizieren in eine Anfrage wie:
Ein Angreifer könnte etwas injizieren wie:
1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0
Beheben Sie die "EQ"-Bedingung, indem Sie nach der ID 1000 suchen und dann nach allen Daten mit einer ID-Zeichenfolge suchen, die größer als 0 ist, was alles ist.
Ein weiteres anfälliges Beispiel mit einem Login könnte sein:
Dies wäre anfällig für:
Einige SDKs erlauben die Verwendung eines Strings, der die durchzuführende Filterung angibt, wie:
Sie müssen wissen, dass das Suchen in DynamoDB für das Ersetzen eines Attributs wertes in Filterausdrücken beim Scannen der Elemente, die Tokens mit dem :
-Zeichen beginnen sollten. Solche Tokens werden zur Laufzeit mit dem tatsächlichen Attributwert ersetzt.
Daher kann ein Login wie das vorherige mit etwas wie folgendem umgangen werden:
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)