AWS - DynamoDB Enum
DynamoDB
Informations de base
Amazon DynamoDB est présenté par AWS comme une base de données NoSQL clé-valeur entièrement gérée, sans serveur, conçue pour alimenter des applications haute performance quelle que soit leur taille. Le service garantit des fonctionnalités robustes, notamment des mesures de sécurité intégrées, des sauvegardes ininterrompues, une réplication automatisée dans plusieurs régions, un cache en mémoire intégré et des utilitaires pratiques d'exportation de données.
Dans le contexte de DynamoDB, au lieu d'établir une base de données traditionnelle, des tables sont créées. Chaque table exige la spécification d'une clé de partition en tant que composant essentiel de la clé primaire de la table. Cette clé de partition, essentiellement une valeur de hachage, joue un rôle crucial à la fois dans la récupération des éléments et dans la distribution des données à travers divers hôtes. Cette distribution est essentielle pour maintenir à la fois la scalabilité et la disponibilité de la base de données. De plus, il est possible d'incorporer une clé de tri pour affiner davantage l'organisation des données.
Chiffrement
Par défaut, DynamoDB utilise une clé KMS qui **appartient à Amazon DynamoDB,**pas même la clé gérée par AWS qui appartient au moins à votre compte.
Sauvegardes & Export vers S3
Il est possible de planifier la génération de sauvegardes de table ou de les créer à la demande. De plus, il est également possible d'activer la récupération à un instant donné (PITR) pour une table. La récupération à un instant donné assure des sauvegardes continues de vos données DynamoDB pendant 35 jours pour vous aider à vous protéger contre des opérations d'écriture ou de suppression accidentelles.
Il est également possible d'exporter les données d'une table vers S3, mais la table doit avoir PITR activé.
Interface graphique
Il existe une interface graphique pour les services Dynamo locaux comme DynamoDB Local, dynalite, localstack, etc, qui pourrait être utile : https://github.com/aaronshaf/dynamodb-admin
Énumération
Accès non authentifié
pageAWS - DynamoDB Unauthenticated AccessÉlévation de privilèges
pageAWS - DynamoDB PrivescPost-exploitation
pageAWS - DynamoDB Post ExploitationPersistance
pageAWS - DynamoDB PersistenceInjection DynamoDB
Injection SQL
Il existe des moyens d'accéder aux données DynamoDB avec une syntaxe SQL, par conséquent, les injections SQL classiques sont également possibles.
Injection NoSQL
Dans DynamoDB, différentes conditions peuvent être utilisées pour récupérer des données, comme dans une injection NoSQL classique s'il est possible de chaîner plus de conditions pour récupérer des données, vous pourriez obtenir des données cachées (ou extraire toute la table). Vous pouvez trouver ici les conditions prises en charge par DynamoDB : https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
Notez que différentes conditions sont prises en charge si les données sont accessibles via query
ou via scan
.
En fait, les actions de Requête doivent spécifier la condition "EQ" (égal) dans la clé primaire pour fonctionner, ce qui rend la vulnérabilité aux injections NoSQL beaucoup moins probable (et rend également l'opération très limitée).
Si vous pouvez modifier la comparaison effectuée ou en ajouter de nouvelles, vous pourriez récupérer plus de données.
Injection de Json brut
DynamoDB accepte les objets Json pour rechercher des données dans la base de données. Si vous découvrez que vous pouvez écrire dans l'objet json envoyé pour la recherche, vous pourriez obtenir une extraction complète de la base de données, incluant tout son contenu.
Par exemple, en injectant dans une requête comme :
un attaquant pourrait injecter quelque chose comme :
1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0
corriger la condition "EQ" en recherchant l'ID 1000 puis en cherchant toutes les données avec une chaîne d'ID supérieure à 0, ce qui est tout.
Injection de propriété
Certains SDK permettent d'utiliser une chaîne indiquant le filtrage à effectuer comme :
Vous devez savoir que lors de la recherche dans DynamoDB pour substituer une valeur d'attribut dans les expressions de filtre lors du balayage des éléments, les jetons doivent commencer par le caractère :
. Ces jetons seront remplacés par la valeur d'attribut réelle au moment de l'exécution.
Par conséquent, une connexion comme la précédente peut être contournée avec quelque chose comme :
Dernière mise à jour