AWS - DynamoDB Enum

Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team di HackTricks AWS)!

Altri modi per supportare HackTricks:

DynamoDB

Informazioni di Base

Amazon DynamoDB è presentato da AWS come un database NoSQL chiave-valore completamente gestito, serverless, progettato per alimentare applicazioni ad alte prestazioni indipendentemente dalle loro dimensioni. Il servizio garantisce funzionalità robuste, tra cui misure di sicurezza intrinseche, backup continui, replica automatica su più regioni, caching in memoria integrato e utilità di esportazione dati comode.

Nel contesto di DynamoDB, invece di stabilire un database tradizionale, vengono create tabelle. Ogni tabella richiede la specifica di una chiave di partizione come componente integrante della chiave primaria della tabella. Questa chiave di partizione, essenzialmente un valore hash, svolge un ruolo critico sia nel recupero degli elementi che nella distribuzione dei dati su vari host. Questa distribuzione è fondamentale per mantenere sia la scalabilità che la disponibilità del database. Inoltre, c'è la possibilità di incorporare una chiave di ordinamento per ulteriori raffinamenti nell'organizzazione dei dati.

Crittografia

Per impostazione predefinita, DynamoDB utilizza una chiave KMS che **appartiene ad Amazon DynamoDB,**non nemmeno la chiave gestita da AWS che almeno appartiene al tuo account.

Backup & Esportazione su S3

È possibile programmare la generazione di backup delle tabelle o crearli su richiesta. Inoltre, è anche possibile abilitare il recovery a un punto nel tempo (PITR) per una tabella. Il recovery a un punto nel tempo fornisce backup continui dei dati di DynamoDB per 35 giorni per proteggerti da operazioni di scrittura o cancellazione accidentali.

È inoltre possibile esportare i dati di una tabella su S3, ma la tabella deve avere PITR abilitato.

GUI

Esiste una GUI per servizi Dynamo locali come DynamoDB Local, dynalite, localstack, ecc, che potrebbe essere utile: https://github.com/aaronshaf/dynamodb-admin

Enumerazione

# 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

Accesso non autenticato

pageAWS - DynamoDB Unauthenticated Access

Privesc

pageAWS - DynamoDB Privesc

Post Esploitation

pageAWS - DynamoDB Post Exploitation

Persistenza

pageAWS - DynamoDB Persistence

Iniezione DynamoDB

Iniezione SQL

Esistono modi per accedere ai dati di DynamoDB con sintassi SQL, pertanto, sono possibili anche iniezioni SQL tipiche.

Iniezione NoSQL

In DynamoDB possono essere utilizzate diverse condizioni per recuperare dati, come in una comune Iniezione NoSQL se è possibile concatenare più condizioni per recuperare dati si potrebbero ottenere dati nascosti (o scaricare l'intera tabella). Qui puoi trovare le condizioni supportate da DynamoDB: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html

Nota che sono supportate diverse condizioni se i dati vengono accessi tramite query o tramite scan.

Attualmente, le azioni di Query devono specificare la condizione "EQ" (uguale) nella chiave primaria per funzionare, rendendola molto meno suscettibile alle iniezioni NoSQL (e rendendo anche l'operazione molto limitata).

Se puoi modificare il confronto eseguito o aggiungerne di nuovi, potresti recuperare più dati.

# 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

Iniezione di Json grezzo

DynamoDB accetta oggetti Json per ricercare dati all'interno del DB. Se scopri che puoi scrivere nell'oggetto json inviato per la ricerca, potresti fare il dump del DB, di tutti i contenuti.

Ad esempio, iniettando in una richiesta come:

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

un attaccante potrebbe iniettare qualcosa del genere:

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

correggere la condizione "EQ" cercando l'ID 1000 e quindi cercando tutti i dati con un ID maggiore di 0, che sono tutti.

Iniezione di proprietà

Alcune SDK consentono di utilizzare una stringa che indica il filtro da eseguire come:

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

È necessario sapere che quando si cerca in DynamoDB di sostituire un valore dell'attributo nelle espressioni di filtro durante la scansione degli elementi, i token dovrebbero iniziare con il carattere :. Tali token verranno sostituiti con il valore effettivo dell'attributo durante l'esecuzione.

Pertanto, un accesso come quello precedente può essere bypassato con qualcosa del genere:

:username = :username or :username
# This will generate the query:
# :username = :username or :username = :username and Password = :password
# which is always true
Impara l'hacking AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated