Az - Blob Storage

Support HackTricks

Basic Information

From the docs: Azure Blob storage es la solución de almacenamiento de objetos en la nube de Microsoft. El almacenamiento de blobs está optimizado para almacenar grandes cantidades de datos no estructurados. Los datos no estructurados son datos que no se adhieren a un modelo o definición de datos particular, como texto o datos binarios.

El almacenamiento de blobs ofrece tres tipos de recursos:

  • La cuenta de almacenamiento (nombre único)

  • Un contenedor en la cuenta de almacenamiento (carpeta)

  • Un blob en un contenedor

Different types of storage

Access to Storage

  • Use Azure AD principals via RBAC roles supported.

  • Access Keys: Use access keys of the storage account. This provides full access to the storage account.

  • Shared Access Signature (SAS): Time limited and specific permissions.

  • You can generate a SAS url with an access key (more complicated to detect).

  • As the SAS is generated from the access key, if it gets renewed the SAS stops working.

Public Exposure

If "Allow Blob public access" is enabled (disabled by default), it's possible to:

  • Give public access to read blobs (you need to know the name).

  • List container blobs and read them.

Connect to Storage

If you find any storage you can connect to you could use the tool Microsoft Azure Storage Explorer to do so.

SAS URLs

From the docs: Una firma de acceso compartido (SAS) proporciona acceso delegado seguro a los recursos en su cuenta de almacenamiento. Con un SAS, tiene control granular sobre cómo un cliente puede acceder a sus datos. Por ejemplo:

  • Qué recursos puede acceder el cliente.

  • Qué permisos tiene sobre esos recursos.

  • Cuánto tiempo es válido el SAS.

Una URL SAS se ve así: 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

Use Storage Explorer para acceder a los datos 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

Puedes asegurar un token de firma de acceso compartido (SAS) para acceder a un contenedor, directorio o blob utilizando credenciales de Azure Active Directory (Azure AD) o una clave de cuenta. Para crear un SAS de delegación de usuario, primero debes solicitar una clave de delegación de usuario, que luego usarás para firmar el SAS.

Se proporciona soporte para un SAS de firma de acceso compartido de delegación de usuario tanto en Azure Blob Storage como en Azure Data Lake Storage Gen2. Sin embargo, es importante tener en cuenta que las Políticas de Acceso Almacenadas no son compatibles con un SAS de delegación de usuario.

Ten en cuenta que el SAS de delegación de usuario está asegurado con credenciales de Azure AD en lugar de claves de cuenta de almacenamiento. Esto evita que los clientes/aplicaciones almacenen/recuperen claves de almacenamiento para crear SAS.

Service SAS

Un service SAS está asegurado con la clave de cuenta de almacenamiento. Un service SAS delegará acceso a un recurso en solo uno de los servicios de almacenamiento de Azure: Blob storage, Queue storage, Table storage o Azure Files. La URI para un SAS a nivel de servicio consiste en la URI del recurso para el cual el SAS delegará acceso, seguida del token SAS.

Para usar credenciales de Azure Active Directory (Azure AD) para asegurar un SAS para un contenedor o blob, usa un SAS de delegación de usuario.

Account SAS

Un account SAS está asegurado con una de las claves de cuenta de almacenamiento (hay 2). Un account SAS delega acceso a recursos en uno o más de los servicios de almacenamiento. Todas las operaciones disponibles a través de un SAS de servicio o de delegación de usuario también están disponibles a través de un account SAS.

from the docs: Al crear un account SAS, puedes:

  • Delegar acceso a operaciones a nivel de servicio que no están actualmente disponibles con un SAS específico de servicio, como las operaciones Get/Set Service Properties y Get Service Stats.

  • Delegar acceso a más de un servicio en una cuenta de almacenamiento a la vez. Por ejemplo, puedes delegar acceso a recursos tanto en Azure Blob Storage como en Azure Files utilizando un account SAS.

  • Delegar acceso a operaciones de escritura y eliminación para contenedores, colas, tablas y comparticiones de archivos, que no están disponibles con un SAS específico de objeto.

  • Especificar una dirección IP o un rango de direcciones IP desde las cuales aceptar solicitudes.

  • Especificar el protocolo HTTP desde el cual aceptar solicitudes (ya sea HTTPS o 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>

Referencias

Apoya a HackTricks

Last updated