AWS - DynamoDB Enum

Aprende hacking en AWS de cero a héroe con htARTE (Experto en Equipos Rojos de HackTricks en AWS)!

Otras formas de apoyar a HackTricks:

DynamoDB

Información Básica

Amazon DynamoDB es presentado por AWS como una base de datos NoSQL de clave-valor totalmente gestionada y sin servidor, diseñada para impulsar aplicaciones de alto rendimiento independientemente de su tamaño. El servicio garantiza características robustas que incluyen medidas de seguridad inherentes, copias de seguridad ininterrumpidas, replicación automatizada en múltiples regiones, almacenamiento en caché en memoria integrado y utilidades de exportación de datos convenientes.

En el contexto de DynamoDB, en lugar de establecer una base de datos tradicional, se crean tablas. Cada tabla exige la especificación de una clave de partición como un componente integral de la clave primaria de la tabla. Esta clave de partición, esencialmente un valor hash, desempeña un papel crítico tanto en la recuperación de elementos como en la distribución de datos entre varios hosts. Esta distribución es fundamental para mantener tanto la escalabilidad como la disponibilidad de la base de datos. Además, existe la opción de incorporar una clave de ordenación para refinar aún más la organización de datos.

Encriptación

Por defecto, DynamoDB utiliza una clave KMS que **pertenece a Amazon DynamoDB,**ni siquiera la clave gestionada por AWS que al menos pertenece a tu cuenta.

Copias de Seguridad y Exportación a S3

Es posible programar la generación de copias de seguridad de tablas o crearlas bajo demanda. Además, también es posible habilitar la recuperación en un momento específico (PITR) para una tabla. La recuperación en un momento específico proporciona copias de seguridad continuas de los datos de tu DynamoDB durante 35 días para ayudarte a protegerte contra operaciones de escritura o eliminación accidentales.

También es posible exportar los datos de una tabla a S3, pero la tabla necesita tener PITR habilitado.

GUI

Existe una interfaz gráfica de usuario para servicios Dynamo locales como DynamoDB Local, dynalite, localstack, etc, que podría ser útil: https://github.com/aaronshaf/dynamodb-admin

Enumeración

# 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

Acceso no autenticado

pageAWS - DynamoDB Unauthenticated Access

Elevación de privilegios

pageAWS - DynamoDB Privesc

Post Explotación

pageAWS - DynamoDB Post Exploitation

Persistencia

pageAWS - DynamoDB Persistence

Inyección en DynamoDB

Inyección SQL

Existen formas de acceder a los datos de DynamoDB con sintaxis SQL, por lo tanto, las inyecciones SQL típicas también son posibles.

Inyección NoSQL

En DynamoDB se pueden utilizar diferentes condiciones para recuperar datos, al igual que en una inyección NoSQL común, si es posible encadenar más condiciones para recuperar datos, podrías obtener datos ocultos (o volcar toda la tabla). Aquí puedes encontrar las condiciones admitidas por DynamoDB: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html

Ten en cuenta que se admiten diferentes condiciones si los datos se están accediendo a través de query o a través de scan.

De hecho, las acciones de Consulta necesitan especificar la condición "EQ" (igual) en la clave primaria para funcionar, lo que hace que sea mucho menos propenso a inyecciones NoSQL (y también limita mucho la operación).

Si puedes cambiar la comparación realizada o agregar nuevas, podrías recuperar más datos.

# 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

Inyección de Json crudo

DynamoDB acepta objetos Json para buscar datos dentro de la base de datos. Si descubres que puedes escribir en el objeto json enviado para buscar, podrías hacer que la base de datos volcara todos los contenidos.

Por ejemplo, inyectando en una solicitud como:

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

un atacante podría inyectar algo como:

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

corregir la condición "EQ" buscando el ID 1000 y luego buscando todos los datos con un Id mayor a 0, que es todo.

Inyección de :property

Algunos SDK permiten usar una cadena que indica el filtrado a realizar como:

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

Necesitas saber que al buscar en DynamoDB para sustituir un valor de atributo en expresiones de filtro mientras se escanean los elementos, los tokens deben comenzar con el carácter :. Estos tokens serán reemplazados con el valor real del atributo en tiempo de ejecución.

Por lo tanto, un inicio de sesión como el anterior puede ser evadido con algo como:

:username = :username or :username
# This will generate the query:
# :username = :username or :username = :username and Password = :password
# which is always true
Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización