# Az - File Shares

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

## Osnovne informacije

**Azure Files** je potpuno upravljana usluga skladištenja datoteka u oblaku koja pruža deljeno skladištenje datoteka dostupno putem standardnih **SMB (Server Message Block)** i **NFS (Network File System)** protokola. Iako je glavni korišćeni protokol SMB, NFS Azure deljenja datoteka nisu podržana za Windows (prema [**docs**](https://learn.microsoft.com/en-us/azure/storage/files/files-nfs-protocol)). Omogućava vam da kreirate visoko dostupna mrežna deljenja datoteka koja mogu biti istovremeno dostupna više virtuelnih mašina (VM) ili lokalnih sistema, omogućavajući besprekornu razmenu datoteka između okruženja.

### Tiers pristupa

- **Optimizovano za transakcije**: Optimizovano za operacije sa velikim brojem transakcija.
- **Vruće**: Između transakcija i skladištenja.
- **Hladno**: Ekonomično za skladištenje.
- **Premium:** Skladištenje datoteka visokih performansi optimizovano za radne opterećenja sa niskom latencijom i IOPS-intenzivnim zadacima.

### Bekap

- **Dnevni bekap**: Tačka bekapa se kreira svakog dana u naznačeno vreme (npr. 19.30 UTC) i čuva se od 1 do 200 dana.
- **Nedeljni bekap**: Tačka bekapa se kreira svake nedelje u naznačen dan i vreme (nedelja u 19.30) i čuva se od 1 do 200 nedelja.
- **Mesečni bekap**: Tačka bekapa se kreira svakog meseca u naznačen dan i vreme (npr. prva nedelja u mesecu u 19.30) i čuva se od 1 do 120 meseci.
- **Godišnji bekap**: Tačka bekapa se kreira svake godine u naznačen dan i vreme (npr. prva nedelja u januaru u 19.30) i čuva se od 1 do 10 godina.
- Takođe je moguće izvršiti **ručne bekape i snimke u bilo kojem trenutku**. Bekap i snimci su zapravo isto u ovom kontekstu.

### Podržane autentifikacije putem SMB

- **Autentifikacija putem lokalnog AD DS**: Koristi lokalne Active Directory akreditive sinhronizovane sa Microsoft Entra ID za pristup zasnovan na identitetu. Zahteva mrežnu povezanost sa lokalnim AD DS.
- **Autentifikacija putem Microsoft Entra Domain Services**: Koristi Microsoft Entra Domain Services (oblaku zasnovan AD) za pružanje pristupa koristeći Microsoft Entra akreditive.
- **Microsoft Entra Kerberos za hibridne identitete**: Omogućava Microsoft Entra korisnicima da autentifikuju Azure deljenja datoteka putem interneta koristeći Kerberos. Podržava hibridne Microsoft Entra pridružene ili Microsoft Entra pridružene VM bez potrebe za povezivanjem sa lokalnim kontrolerima domena. Ali ne podržava identitete koji su samo u oblaku.
- **AD Kerberos autentifikacija za Linux klijente**: Omogućava Linux klijentima da koriste Kerberos za SMB autentifikaciju putem lokalnog AD DS ili Microsoft Entra Domain Services.

## Enumeracija

{{#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]
> Podrazumevano `az` cli će koristiti ključ naloga za potpisivanje ključa i izvršavanje akcije. Da biste koristili privilegije Entra ID principa, koristite parametre `--auth-mode login --enable-file-backup-request-intent`.

> [!TIP]
> Koristite parametar `--account-key` da naznačite ključ naloga koji će se koristiti\
> Koristite parametar `--sas-token` sa SAS tokenom za pristup putem SAS tokena

### Povezivanje

Ovo su skripte koje je predložio Azure u vreme pisanja za povezivanje sa File Share:

Morate zameniti `<STORAGE-ACCOUNT>`, `<ACCESS-KEY>` i `<FILE-SHARE-NAME>` mesta. 

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

### Redovna enumeracija skladišta (pristupni ključevi, SAS...)

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

## Eskalacija privilegija

Isto kao skladišna eskalacija privilegija:

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

## Post eksploatacija

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

## Postojanost

Isto kao postojanost skladišta:

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

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