AWS - DynamoDB Enum

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

DynamoDB

Базова інформація

Amazon DynamoDB представлений AWS як повністю керована, безсерверна, ключ-значення NoSQL база даних, призначена для роботи з високопродуктивними додатками будь-якого розміру. Сервіс забезпечує надійні функції, включаючи вбудовані заходи безпеки, безперервні резервні копії, автоматизовану реплікацію в кількох регіонах, інтегрований кешування в оперативній пам'яті та зручні утиліти експорту даних.

У контексті DynamoDB, замість створення традиційної бази даних, створюються таблиці. Кожна таблиця вимагає вказання ключа розділення як невід'ємної складової основного ключа таблиці. Цей ключ розділення, в основному хеш-значення, відіграє критичну роль як у витягуванні елементів, так і у розподілі даних по різних хостах. Цей розподіл є ключовим для забезпечення масштабованості та доступності бази даних. Крім того, є можливість включити ключ сортування, щоб додатково уточнити організацію даних.

Шифрування

За замовчуванням DynamoDB використовує ключ KMS, який належить Amazon DynamoDB, навіть не керований ключ AWS, який принаймні належить вашому обліковому запису.

Резервні копії та експорт в S3

Можливо запланувати створення резервних копій таблиць або створювати їх на вимогу. Крім того, можливо включити відновлення до точки в часі (PITR) для таблиці. Відновлення до точки в часі забезпечує постійні резервні копії ваших даних DynamoDB протягом 35 днів, щоб допомогти захиститися від випадкових операцій запису або видалення.

Також можливо експортувати дані таблиці в S3, але таблиця повинна мати включене відновлення до точки в часі.

GUI

Є GUI для локальних служб Dynamo, таких як DynamoDB Local, dynalite, localstack, тощо, які можуть бути корисними: https://github.com/aaronshaf/dynamodb-admin

Перелік

# 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

Неаутентифікований доступ

pageAWS - DynamoDB Unauthenticated Access

Підвищення привілеїв

pageAWS - DynamoDB Privesc

Післяексплуатаційна діяльність

pageAWS - DynamoDB Post Exploitation

Постійність

pageAWS - DynamoDB Persistence

Внедрення в DynamoDB

SQL-ін'єкція

Є способи доступу до даних DynamoDB з SQL-синтаксисом, тому типові SQL-ін'єкції також можливі.

NoSQL-ін'єкція

У DynamoDB можна використовувати різні умови для отримання даних, як у звичайній NoSQL-ін'єкції, якщо можна приєднати більше умов для отримання даних, ви можете отримати приховані дані (або вивантажити всю таблицю). Тут ви можете знайти умови, підтримувані DynamoDB: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html

Зверніть увагу, що підтримуються різні умови, якщо дані отримуються через query або через scan.

Фактично, дії Query повинні вказати умову "EQ" (рівність) у первинному ключі для роботи, що робить його набагато менш вразливим на NoSQL-ін'єкції (а також обмежує операцію).

Якщо ви можете змінити порівняння, виконане або додати нові, ви можете отримати більше даних.

# 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

Внедрення Raw Json

DynamoDB приймає об'єкти Json для пошуку даних всередині БД. Якщо ви виявите, що можете записувати в об'єкт json, відправлений для пошуку, ви можете зробити витяг БД, всі вміст.

Наприклад, внедрюючи запит наступного вигляду:

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

зловмисник може впровадити щось на зразок:

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

виправити умову "EQ", шукаючи ID 1000, а потім переглядаючи всі дані з рядком Id більше 0, що є всіма.

Впровадження властивості

Деякі SDK дозволяють використовувати рядок, що вказує на фільтрування, яке потрібно виконати, наприклад:

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

Вам потрібно знати, що при пошуку в DynamoDB для заміни значення атрибута в виразах фільтрації під час сканування елементів, токени повинні починатися з символу :. Такі токени будуть замінені фактичним значенням атрибута під час виконання.

Отже, вхід, подібний до попереднього, можна обійти щось на зразок:

:username = :username or :username
# This will generate the query:
# :username = :username or :username = :username and Password = :password
# which is always true
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated