# Az - File Shares

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

## Basiese Inligting

**Azure Files** is 'n volledig bestuurde wolk lêeropbergingsdiens wat gedeelde lêeropberging bied wat toeganklik is via standaard **SMB (Server Message Block)** en **NFS (Network File System)** protokolle. Alhoewel die hoof protokol wat gebruik word SMB is, word NFS Azure lêer deel nie ondersteun vir Windows (volgens die [**docs**](https://learn.microsoft.com/en-us/azure/storage/files/files-nfs-protocol)). Dit stel jou in staat om hoogs beskikbare netwerk lêer dele te skep wat gelyktydig deur verskeie virtuele masjiene (VMs) of plaaslike stelsels toeganklik gemaak kan word, wat naatlose lêerdeling oor omgewings moontlik maak.

### Toegang Lae

- **Transaksie Geoptimaliseer**: Geoptimaliseer vir transaksie-sware operasies.
- **Warm**: Gebalanseerd tussen transaksies en stoor.
- **Koel**: Kostedoeltreffend vir stoor.
- **Premium:** Hoë-prestasie lêeropberging geoptimaliseer vir lae-latensie en IOPS-intensiewe werklas.

### Rugsteun

- **Daaglikse rugsteun**: 'n Rugsteunpunt word elke dag op 'n aangeduide tyd (bv. 19.30 UTC) geskep en gestoor vir 1 tot 200 dae.
- **Weeklikse rugsteun**: 'n Rugsteunpunt word elke week op 'n aangeduide dag en tyd (Sondag om 19.30) geskep en gestoor vir 1 tot 200 weke.
- **Maandelikse rugsteun**: 'n Rugsteunpunt word elke maand op 'n aangeduide dag en tyd (bv. eerste Sondag om 19.30) geskep en gestoor vir 1 tot 120 maande.
- **Jaarlikse rugsteun**: 'n Rugsteunpunt word elke jaar op 'n aangeduide dag en tyd (bv. Januarie eerste Sondag om 19.30) geskep en gestoor vir 1 tot 10 jaar.
- Dit is ook moontlik om **handmatige rugsteun en snappshots op enige tyd** uit te voer. Rugsteun en snappshots is eintlik dieselfde in hierdie konteks.

### Gesteunde Outentikasies via SMB

- **Plaaslike AD DS Outentikasie**: Dit gebruik plaaslike Active Directory akrediteerlinge wat gesinkroniseer is met Microsoft Entra ID vir identiteitsgebaseerde toegang. Dit vereis netwerkverbinding met plaaslike AD DS.
- **Microsoft Entra Domein Dienste Outentikasie**: Dit benut Microsoft Entra Domein Dienste (wolk-gebaseerde AD) om toegang te bied met Microsoft Entra akrediteerlinge.
- **Microsoft Entra Kerberos vir Hibrid Identiteite**: Dit stel Microsoft Entra gebruikers in staat om Azure lêer dele oor die internet te outentiseer met behulp van Kerberos. Dit ondersteun hibrid Microsoft Entra-verbonden of Microsoft Entra-verbonden VMs sonder om verbinding met plaaslike domeinbeheerders te vereis. Maar dit ondersteun nie wolk-slegs identiteite nie.
- **AD Kerberos Outentikasie vir Linux Kliënte**: Dit stel Linux kliënte in staat om Kerberos te gebruik vir SMB outentikasie via plaaslike AD DS of Microsoft Entra Domein Dienste.

## Enumerasie

{{#tabs }}
{{#tab name="az" }}
```bash
# Get storage accounts
az storage account list #Get the account name from here

# List file shares
az storage share list --account-name <name>
az storage share-rm list --storage-account <name> # To see the deleted ones too --include-deleted
# Get dirs/files inside the share
az storage file list --account-name <name> --share-name <share-name>
## If type is "dir", you can continue enumerating files inside of it
az storage file list --account-name <name> --share-name <prev_dir/share-name>
# Download a complete share (with directories and files inside of them)
az storage file download-batch -d . --source <share-name> --account-name <name>
# List snapshots
az storage share snapshot --name <share-name>
# List file shares, including deleted ones
az rest --method GET \
--url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}/fileServices/default/shares?%24skipToken=&%24maxpagesize=20&%24filter=&%24expand=deleted&api-version=2019-06-01"

# Get snapshots/backups
az storage share list --account-name <name> --include-snapshots --query "[?snapshot != null]"
# List contents of a snapshot/backup
az storage file list --account-name <name> --share-name <share-name> --snapshot <snapshot-version> #e.g. "2024-11-25T11:26:59.0000000Z"
# Download snapshot/backup
az storage file download-batch -d . --account-name <name> --source <share-name> --snapshot <snapshot-version>
```
{{#endtab }}

{{#tab name="Az Powershell" }}
```bash
Get-AzStorageAccount

# List File Shares
Get-AzStorageShare -Context (Get-AzStorageAccount -ResourceGroupName "<resource-group-name>" -Name "<storage-account-name>").Context

# Get Directories/Files Inside the Share
Get-AzStorageFile -ShareName "<share-name>" -Context (Get-AzStorageAccount -ResourceGroupName "<resource-group-name>" -Name "<storage-account-name>").Context
Get-AzStorageFile -ShareName "<share-name>" -Path "<share-directory-path>" -Context (Get-AzStorageAccount -ResourceGroupName "<resource-group-name>" -Name "<storage-account-name>").Context

# Download a Complete Share
Get-AzStorageFileContent -ShareName "<share-name>" -Destination "C:\Download" -Path "<share-directory-path>" -Context (Get-AzStorageAccount -ResourceGroupName "<resource-group-name>" -Name "<storage-account-name>").Context

# Get Snapshots/Backups
Get-AzStorageShare -Context (Get-AzStorageAccount -ResourceGroupName "<resource-group-name>" -Name "<storage-account-name>").Context | Where-Object { $_.SnapshotTime -ne $null }

# List Contents of a Snapshot/Backup
Get-AzStorageFile -ShareName "<share-name>" -Context (New-AzStorageContext -StorageAccountName "<storage-account-name>" -StorageAccountKey (Get-AzStorageAccountKey -ResourceGroupName "<resource-group-name>" -Name "<storage-account-name>" | Select-Object -ExpandProperty Value) -SnapshotTime "<snapshot-version>")

```
{{#endtab }}
{{#endtabs }}

> [!NOTE]
> Standaard sal `az` cli 'n rekening sleutel gebruik om 'n sleutel te teken en die aksie uit te voer. Om die Entra ID hoofprivileges te gebruik, gebruik die parameters `--auth-mode login --enable-file-backup-request-intent`.

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

### Verbinding

Dit is die skripte wat deur Azure voorgestel is ten tyde van die skryf om 'n File Share te verbind:

Jy moet die `<STORAGE-ACCOUNT>`, `<ACCESS-KEY>` en `<FILE-SHARE-NAME>` plekhouers vervang.

{{#tabs}}
{{#tab name="Windows"}}
```bash
$connectTestResult = Test-NetConnection -ComputerName filescontainersrdtfgvhb.file.core.windows.net -Port 445
if ($connectTestResult.TcpTestSucceeded) {
# Save the password so the drive will persist on reboot
cmd.exe /C "cmdkey /add:`"<STORAGE-ACCOUNT>.file.core.windows.net`" /user:`"localhost\<STORAGE-ACCOUNT>`" /pass:`"<ACCESS-KEY>`""
# Mount the drive
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<STORAGE-ACCOUNT>.file.core.windows.net\<FILE-SHARE-NAME>" -Persist
} else {
Write-Error -Message "Unable to reach the Azure storage account via port 445. Check to make sure your organization or ISP is not blocking port 445, or use Azure P2S VPN, Azure S2S VPN, or Express Route to tunnel SMB traffic over a different port."
}
```
{{#endtab}}

{{#tab name="Linux"}}
```bash
sudo mkdir /mnt/disk-shareeifrube
if [ ! -d "/etc/smbcredentials" ]; then
sudo mkdir /etc/smbcredentials
fi
if [ ! -f "/etc/smbcredentials/<STORAGE-ACCOUNT>.cred" ]; then
sudo bash -c 'echo "username=<STORAGE-ACCOUNT>" >> /etc/smbcredentials/<STORAGE-ACCOUNT>.cred'
sudo bash -c 'echo "password=<ACCESS-KEY>" >> /etc/smbcredentials/<STORAGE-ACCOUNT>.cred'
fi
sudo chmod 600 /etc/smbcredentials/<STORAGE-ACCOUNT>.cred

sudo bash -c 'echo "//<STORAGE-ACCOUNT>.file.core.windows.net/<FILE-SHARE-NAME> /mnt/<FILE-SHARE-NAME> cifs nofail,credentials=/etc/smbcredentials/<STORAGE-ACCOUNT>.cred,dir_mode=0777,file_mode=0777,serverino,nosharesock,actimeo=30" >> /etc/fstab'
sudo mount -t cifs //<STORAGE-ACCOUNT>.file.core.windows.net/<FILE-SHARE-NAME> /mnt/<FILE-SHARE-NAME> -o credentials=/etc/smbcredentials/<STORAGE-ACCOUNT>.cred,dir_mode=0777,file_mode=0777,serverino,nosharesock,actimeo=30
```
{{#endtab}}

{{#tab name="macOS"}}
```bash
open smb://<STORAGE-ACCOUNT>:<ACCESS-KEY>@<STORAGE-ACCOUNT>.file.core.windows.net/<FILE-SHARE-NAME>
```
{{#endtab}}
{{#endtabs}}

### Gereelde stooropsporing (toegang sleutels, SAS...)

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

## Privilege Escalation

Dieselfde as stoor privesc:

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

## Post Exploitation

{{#ref}}
../az-post-exploitation/az-file-share-post-exploitation.md
{{#endref}}

## Persistensie

Dieselfde as stoor persistensie:

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

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