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 представлений AWS як повністю керована, безсерверна, ключ-значення NoSQL база даних, призначена для підтримки високопродуктивних додатків незалежно від їх розміру. Сервіс забезпечує надійні функції, включаючи вбудовані заходи безпеки, безперервні резервні копії, автоматичну реплікацію в кількох регіонах, інтегроване кешування в пам'яті та зручні утиліти експорту даних.
У контексті DynamoDB, замість створення традиційної бази даних, створюються таблиці. Кожна таблиця вимагає вказівки ключа розділу як невід'ємної частини первинного ключа таблиці. Цей ключ розділу, по суті, є хеш-значенням, відіграє критичну роль як у отриманні елементів, так і в розподілі даних між різними хостами. Цей розподіл є вирішальним для підтримки як масштабованості, так і доступності бази даних. Крім того, є можливість додати ключ сортування для подальшого уточнення організації даних.
За замовчуванням, DynamoDB використовує ключ KMS, який **належить Amazon DynamoDB,** навіть не керований ключ AWS, який принаймні належить вашому обліковому запису.
Можливо планувати створення резервних копій таблиць або створювати їх на замовлення. Крім того, також можливо активувати відновлення на момент часу (PITR) для таблиці. Відновлення на момент часу забезпечує безперервні резервні копії ваших даних DynamoDB на 35 днів, щоб допомогти вам захиститися від випадкових операцій запису або видалення.
Також можливо експортувати дані таблиці до S3, але таблиця повинна мати активоване PITR.
Існує GUI для локальних сервісів Dynamo, таких як DynamoDB Local, dynalite, localstack тощо, які можуть бути корисними: https://github.com/aaronshaf/dynamodb-admin
Існують способи доступу до даних DynamoDB з SQL-синтаксисом, тому типові SQL-ін'єкції також можливі.
У DynamoDB можна використовувати різні умови для отримання даних, як у звичайній NoSQL-ін'єкції, якщо можливо з'єднати більше умов для отримання даних, ви могли б отримати приховані дані (або вивантажити всю таблицю). Тут ви можете знайти умови, підтримувані DynamoDB: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
Зверніть увагу, що різні умови підтримуються, якщо дані отримуються через query
або через scan
.
Насправді, Query дії повинні вказувати умову "EQ" (дорівнює) в первинному ключі, щоб працювати, що робить їх набагато менш вразливими до NoSQL-ін'єкцій (і також обмежує операцію).
Якщо ви можете змінити порівняння, що виконується, або додати нові, ви могли б отримати більше даних.
Ця вразливість базується на Scan Filter dynamodb, який тепер застарілий!
DynamoDB приймає Json об'єкти для пошуку даних у БД. Якщо ви виявите, що можете записувати в json об'єкт, надісланий для пошуку, ви зможете зробити дамп БД, всієї її вмісту.
Наприклад, ін'єкція в запит, як:
зловмисник міг би ввести щось на кшталт:
1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0
виправити умову "EQ", шукаючи ID 1000, а потім шукати всі дані з рядком Id, що перевищує 0, що є всіма.
Ще один вразливий приклад з використанням входу міг би бути:
Це буде вразливим до:
Деякі SDK дозволяють використовувати рядок, що вказує на фільтрацію, яка має бути виконана, наприклад:
Вам потрібно знати, що при пошуку в DynamoDB для заміни значення атрибута в виразах фільтра під час сканування елементів, токени повинні починатися з символу :
. Такі токени будуть замінені на фактичне значення атрибута під час виконання.
Отже, вхід, подібний до попереднього, можна обійти за допомогою чогось на зразок:
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)