Az - Blob Storage

Support HackTricks

Informazioni di base

From the docs: Azure Blob storage è la soluzione di storage di Microsoft per il cloud. Blob storage è ottimizzato per memorizzare enormi quantità di dati non strutturati. I dati non strutturati sono dati che non aderiscono a un particolare modello o definizione di dati, come testo o dati binari.

Blob storage offre tre tipi di risorse:

  • L'account di storage (nome unico)

  • Un contenitore nell'account di storage (cartella)

  • Un blob in un contenitore

Diversi tipi di storage

Blob storage

https://<storage-account>.blob.core.windows.net https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list

Azure Data Lake Storage Gen2

https://<storage-account>.dfs.core.windows.net

Azure Files

https://<storage-account>.file.core.windows.net

Queue storage

https://<storage-account>.queue.core.windows.net

Table storage

https://<storage-account>.table.core.windows.net

Accesso allo Storage

  • Utilizza i principi di Azure AD tramite ruoli RBAC supportati.

  • Chiavi di accesso: Usa le chiavi di accesso dell'account di storage. Questo fornisce accesso completo all'account di storage.

  • Firma di accesso condiviso (SAS): Limitata nel tempo e permessi specifici.

  • Puoi generare un URL SAS con una chiave di accesso (più complicato da rilevare).

  • Poiché il SAS è generato dalla chiave di accesso, se viene rinnovato, il SAS smette di funzionare.

Esposizione Pubblica

Se "Consenti accesso pubblico ai blob" è abilitato (disabilitato per impostazione predefinita), è possibile:

  • Dare accesso pubblico per leggere i blob (è necessario conoscere il nome).

  • Elencare i blob del contenitore e leggerli.

Connettersi allo Storage

Se trovi qualche storage a cui puoi connetterti, puoi utilizzare lo strumento Microsoft Azure Storage Explorer per farlo.

URL SAS

From the docs: Una firma di accesso condiviso (SAS) fornisce accesso delegato sicuro alle risorse nel tuo account di storage. Con un SAS, hai un controllo granulare su come un client può accedere ai tuoi dati. Ad esempio:

  • Quali risorse il client può accedere.

  • Quali permessi ha su quelle risorse.

  • Quanto tempo è valido il SAS.

Un URL SAS appare così: https://<container_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D

Usa Storage Explorer per accedere ai dati o python:

#pip3 install azure-storage-blob
from azure.storage.blob import BlobServiceClient

# List containers
conn_str="<SAS URL>"
svc = BlobServiceClient.from_connection_string(conn_str=conn_str)
for c in svc.list_containers():
print(c['name'])

# List blobs inside the containers
container = svc.get_container_client(container=c['name'])

for b in container.list_blobs():
print(b['name'])


# Download all the blobs
blob_name = b['name'].split("/")[::-1][0]
blob = svc.get_blob_client(container=c['name'],blob=b['name'])
with open(blob_name,"wb") as f:
f.write(blob.download_blob().readall())

User delegation SAS

Puoi proteggere un token di firma di accesso condiviso (SAS) per l'accesso a un contenitore, directory o blob utilizzando le credenziali di Azure Active Directory (Azure AD) o una chiave dell'account. Per creare un SAS di delega utente, devi prima richiedere una chiave di delega utente, che poi utilizzi per firmare il SAS.

Il supporto è fornito per un User Delegation Shared Access Signature (SAS) sia in Azure Blob Storage che in Azure Data Lake Storage Gen2. Tuttavia, è importante notare che le Stored Access Policies non sono compatibili con un SAS di delega utente.

Nota che il SAS di delega utente è protetto con le credenziali di Azure AD invece delle chiavi dell'account di archiviazione. Questo impedisce ai client/applicazioni di memorizzare/recuperare le chiavi di archiviazione per creare SAS.

Service SAS

Un service SAS è protetto con la chiave dell'account di archiviazione. Un service SAS delega l'accesso a una risorsa in solo uno dei servizi di archiviazione di Azure: Blob storage, Queue storage, Table storage o Azure Files. L'URI per un SAS a livello di servizio consiste nell'URI della risorsa per la quale il SAS delega l'accesso, seguito dal token SAS.

Per utilizzare le credenziali di Azure Active Directory (Azure AD) per proteggere un SAS per un contenitore o blob, utilizza un SAS di delega utente.

Account SAS

Un account SAS è protetto con una delle chiavi dell'account di archiviazione (ce ne sono 2). Un account SAS delega l'accesso alle risorse in uno o più dei servizi di archiviazione. Tutte le operazioni disponibili tramite un service o user delegation SAS sono disponibili anche tramite un account SAS.

from the docs: Creando un account SAS, puoi:

  • Delegare l'accesso a operazioni a livello di servizio che non sono attualmente disponibili con un SAS specifico per il servizio, come le operazioni Get/Set Service Properties e Get Service Stats.

  • Delegare l'accesso a più di un servizio in un account di archiviazione alla volta. Ad esempio, puoi delegare l'accesso a risorse sia in Azure Blob Storage che in Azure Files utilizzando un account SAS.

  • Delegare l'accesso a operazioni di scrittura e cancellazione per contenitori, code, tabelle e condivisioni di file, che non sono disponibili con un SAS specifico per l'oggetto.

  • Specificare un indirizzo IP o un intervallo di indirizzi IP da cui accettare richieste.

  • Specificare il protocollo HTTP da cui accettare richieste (sia HTTPS che HTTP/HTTPS).

Enumeration

# Get storage accounts
az storage account list #Get the account name from here

# Get keys to authenticate
az storage account keys list --account-name <name>

# Get shares
az storage share list --account-name <name> --account-key <key>

# Get dirs/files inside the share
az storage file list --account-name <name> --share-name <share-name> --account-key <key>
## If type is "dir", you can continue enumerationg files inside of it
az storage file list --account-name <name> --share-name <prev_dir/share-name> --account-key <key>

# Download a complete share (with directories and files inside of them)
az storage file download-batch -d . --source <share-name> --account-name <name> --account-key <key>

Riferimenti

Supporta HackTricks

Last updated