Files
hacktricks-cloud/src/pentesting-cloud/azure-security/az-services/az-table-storage.md

3.9 KiB

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"}}

# Get storage accounts
az storage account list

# List tables
az storage table list --account-name <name>

# Read table
az storage entity query \
--account-name <name> \
--table-name <t-name> \
--top 10

# Write table
az storage entity insert \
--account-name <STORAGE_ACCOUNT_NAME> \
--table-name <TABLE_NAME> \
--entity PartitionKey=<PARTITION_KEY> RowKey=<ROW_KEY> <PROPERTY_KEY>=<PROPERTY_VALUE>

# 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"}}

# Get storage accounts
Get-AzStorageAccount

# List tables
Get-AzStorageTable -Context (Get-AzStorageAccount -Name <mystorageaccount> -ResourceGroupName <ResourceGroupName>).Context

Get-AzStorageTableStoredAccessPolicy -Table <Table> -Context (Get-AzStorageAccount -Name <mystorageaccount -ResourceGroupName <ResourceGroupName>).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}}