AWS - DynamoDB Enum
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
Nicht authentifizierter Zugriff
AWS - DynamoDB Unauthenticated AccessPrivilege Eskalation
AWS - DynamoDB PrivescPost-Exploitation
AWS - DynamoDB Post ExploitationPersistenz
AWS - DynamoDB PersistenceDynamoDB 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.
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:
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:
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:
Last updated