# Az - Table Storage

{{#include ../../../banners/hacktricks-training.md}}

## Basiese Inligting

**Azure Table Storage** is 'n NoSQL sleutel-waarde stoor wat ontwerp is om groot volumes van gestruktureerde, nie-relationele data te stoor. Dit bied hoë beskikbaarheid, lae latensie, en skaalbaarheid om groot datastelle doeltreffend te hanteer. Data is georganiseer in tabelle, met elke entiteit geïdentifiseer deur 'n partisie sleutel en ry sleutel, wat vinnige soektogte moontlik maak. Dit ondersteun funksies soos versleuteling in rus, rol-gebaseerde toegangbeheer, en gedeelde toegang handtekeninge vir veilige, bestuurde stoor wat geskik is vir 'n wye reeks toepassings.

Daar **is nie 'n ingeboude rugsteunmeganisme** vir tabel stoor nie.

### Sleutels

#### **PartitionKey**

- Die **PartitionKey groepeer entiteite in logiese partisie**. Entiteite met dieselfde PartitionKey word saam gestoor, wat die navraagprestasie en skaalbaarheid verbeter.
- Voorbeeld: In 'n tabel wat werknemerdata stoor, kan `PartitionKey` 'n departement verteenwoordig, bv. `"HR"` of `"IT"`.

#### **RowKey**

- Die **RowKey is die unieke identifiseerder** vir 'n entiteit binne 'n partisie. Wanneer dit gekombineer word met die PartitionKey, verseker dit dat elke entiteit in die tabel 'n wêreldwyd unieke identifiseerder het.
- Voorbeeld: Vir die `"HR"` partisie, kan `RowKey` 'n werknemer ID wees, bv. `"12345"`.

#### **Ander Eienskappe (Pasgemaakte Eienskappe)**

- Benewens die PartitionKey en RowKey, kan 'n entiteit addisionele **pasgemaakte eienskappe hê om data te stoor**. Hierdie is gebruikersgedefinieer en funksioneer soos kolomme in 'n tradisionele databasis.
- Eienskappe word gestoor as **sleutel-waarde pare**.
- Voorbeeld: `Name`, `Age`, `Title` kan pasgemaakte eienskappe vir 'n werknemer wees.

## Enumerasie

{{#tabs}}
{{#tab name="az cli"}}
```bash
# 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"}}
```bash
# 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]
> Standaard sal `az` cli 'n rekeningsleutel gebruik om 'n sleutel te teken en die aksie uit te voer. Om die Entra ID-prinsipaal bevoegdhede te gebruik, gebruik die parameters `--auth-mode login`.

> [!TIP]
> Gebruik die parameter `--account-key` om die rekeningsleutel aan te dui wat gebruik moet word\
> Gebruik die parameter `--sas-token` met die SAS-token om toegang te verkry via 'n SAS-token

## Privilege Escalation

Selfde as stoor privesc:

{{#ref}}
../az-privilege-escalation/az-storage-privesc.md
{{#endref}}

## Post Exploitation

{{#ref}}
../az-post-exploitation/az-table-storage-post-exploitation.md
{{#endref}}

## Persistence

Selfde as stoor volharding:

{{#ref}}
../az-persistence/az-storage-persistence.md
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
