Az - Blob Storage

Apoya a HackTricks

Información Básica

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

Blob storage ofrece tres tipos de recursos:

  • La cuenta de almacenamiento (nombre único)

  • Un contenedor en la cuenta de almacenamiento (carpeta)

  • Un blob en un contenedor

Diferentes tipos de almacenamiento

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

Acceso al Almacenamiento

  • Usar los principales de Azure AD a través de roles RBAC soportados.

  • Access Keys: Usar las claves de acceso de la cuenta de almacenamiento. Esto proporciona acceso completo a la cuenta de almacenamiento.

  • Shared Access Signature (SAS): Tiempo limitado y permisos específicos.

  • Puedes generar una URL SAS con una clave de acceso (más complicado de detectar).

  • Como el SAS se genera a partir de la clave de acceso, si se renueva, el SAS deja de funcionar.

Exposición Pública

Si "Permitir acceso público a Blob" está habilitado (deshabilitado por defecto), es posible:

  • Dar acceso público para leer blobs (necesitas conocer el nombre).

  • Listar blobs del contenedor y leerlos.

Conectar al Almacenamiento

Si encuentras algún almacenamiento al que puedas conectarte, podrías usar la herramienta Microsoft Azure Storage Explorer para hacerlo.

URLs SAS

De la documentación: Una firma de acceso compartido (SAS) proporciona acceso delegado seguro a recursos en tu cuenta de almacenamiento. Con un SAS, tienes control granular sobre cómo un cliente puede acceder a tus datos. Por ejemplo:

  • Qué recursos puede acceder el cliente.

  • Qué permisos tienen para 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

Usa 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 una Firma de Acceso Compartido de Delegación de Usuario (SAS) tanto en Azure Blob Storage como en Azure Data Lake Storage Gen2. Sin embargo, es importante notar 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 delegates access to a resource in only one de los servicios de almacenamiento de Azure: Blob storage, Queue storage, Table storage, o Azure Files. El URI para un SAS a nivel de servicio consiste en el URI al recurso para el cual el SAS delegará acceso, seguido del token SAS.

Para usar credenciales de Azure Active Directory (Azure AD) para asegurar un SAS para un container o blob, usa un user delegation SAS.

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 service o user delegation SAS también están disponibles a través de un account SAS.

de la documentación: Al crear un account SAS, puedes:

  • Delegar acceso a operaciones a nivel de servicio que actualmente no están 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 HackTricks

Last updated