# Az - Table Storage {{#include ../../../banners/hacktricks-training.md}} ## Información Básica **Azure Table Storage** es un almacén de clave-valor NoSQL diseñado para almacenar grandes volúmenes de datos estructurados y no relacionales. Ofrece alta disponibilidad, baja latencia y escalabilidad para manejar grandes conjuntos de datos de manera eficiente. Los datos se organizan en tablas, con cada entidad identificada por una clave de partición y una clave de fila, lo que permite búsquedas rápidas. Soporta características como cifrado en reposo, control de acceso basado en roles y firmas de acceso compartido para un almacenamiento seguro y gestionado adecuado para una amplia gama de aplicaciones. No **hay un mecanismo de respaldo incorporado** para el almacenamiento de tablas. ### Claves #### **PartitionKey** - El **PartitionKey agrupa entidades en particiones lógicas**. Las entidades con el mismo PartitionKey se almacenan juntas, lo que mejora el rendimiento de las consultas y la escalabilidad. - Ejemplo: En una tabla que almacena datos de empleados, `PartitionKey` podría representar un departamento, por ejemplo, `"HR"` o `"IT"`. #### **RowKey** - El **RowKey es el identificador único** para una entidad dentro de una partición. Cuando se combina con el PartitionKey, asegura que cada entidad en la tabla tenga un identificador único a nivel global. - Ejemplo: Para la partición `"HR"`, `RowKey` podría ser un ID de empleado, por ejemplo, `"12345"`. #### **Otras Propiedades (Propiedades Personalizadas)** - Además del PartitionKey y RowKey, una entidad puede tener **propiedades personalizadas adicionales para almacenar datos**. Estas son definidas por el usuario y actúan como columnas en una base de datos tradicional. - Las propiedades se almacenan como **pares clave-valor**. - Ejemplo: `Name`, `Age`, `Title` podrían ser propiedades personalizadas para un empleado. ## Enumeración {{#tabs}} {{#tab name="az cli"}} ```bash # Get storage accounts az storage account list # List tables az storage table list --account-name # Read table az storage entity query \ --account-name \ --table-name \ --top 10 # Write table az storage entity insert \ --account-name \ --table-name \ --entity PartitionKey= RowKey= = # Write example az storage entity insert \ --account-name mystorageaccount \ --table-name mytable \ --entity PartitionKey=HR RowKey=12345 Name="John Doe" Age=30 Title="Manager" # Update row az storage entity merge \ --account-name mystorageaccount \ --table-name mytable \ --entity PartitionKey=pk1 RowKey=rk1 Age=31 ``` {{#endtab}} {{#tab name="PowerShell"}} ```bash # Get storage accounts Get-AzStorageAccount # List tables Get-AzStorageTable -Context (Get-AzStorageAccount -Name -ResourceGroupName ).Context Get-AzStorageTableStoredAccessPolicy -Table -Context (Get-AzStorageAccount -Name ).Context ``` {{#endtab}} {{#endtabs}} > [!NOTE] > Por defecto, `az` cli utilizará una clave de cuenta para firmar una clave y realizar la acción. Para usar los privilegios del principal de Entra ID, utiliza los parámetros `--auth-mode login`. > [!TIP] > Usa el parámetro `--account-key` para indicar la clave de cuenta a utilizar\ > Usa el parámetro `--sas-token` con el token SAS para acceder a través de un token SAS ## Escalación de Privilegios Igual que la escalación de privilegios de almacenamiento: {{#ref}} ../az-privilege-escalation/az-storage-privesc.md {{#endref}} ## Post Explotación {{#ref}} ../az-post-exploitation/az-table-storage-post-exploitation.md {{#endref}} ## Persistencia Igual que la persistencia de almacenamiento: {{#ref}} ../az-persistence/az-storage-persistence.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}}