Az - Blob Storage

Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Información Básica

Desde la documentación: Azure Blob storage es la solución de almacenamiento de objetos de Microsoft para la nube. 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 datos de texto o 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

Diferentes tipos de almacenamiento

Almacenamiento de Blob

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

Almacenamiento de Cola

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

Almacenamiento de Tabla

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

Acceso al Almacenamiento

  • Utiliza principios de Azure AD a través de roles de RBAC admitidos.

  • Claves de acceso: Utiliza las claves de acceso de la cuenta de almacenamiento. Esto proporciona acceso completo a la cuenta de almacenamiento.

  • Firma de acceso compartido (SAS): Limitada en el tiempo y con permisos específicos.

  • Puedes generar una URL de 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 la clave, el SAS deja de funcionar.

Exposición Pública

Si se habilita "Permitir acceso público a blobs" (deshabilitado de forma predeterminada), 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 utilizar la herramienta Microsoft Azure Storage Explorer para hacerlo.

URLs de SAS

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

  • A qué recursos puede acceder el cliente.

  • Qué permisos tienen para esos recursos.

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

Una URL de 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

Utiliza 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 conteiner
container = svc.get_container_client(container="<container_name>")
for b in container.list_blobs():
print(b['name']

# Download file
blob = svc.get_blob_client(container="<container_name>",blob="<blob_name>")
with open("download.out","wb") as f:
f.write(blob.download_blob().readall())

SAS de delegación de usuario

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

Se proporciona soporte para un SAS 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 Directivas de acceso almacenadas no son compatibles con un SAS de delegación de usuario.

Tenga 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.

SAS de servicio

Un SAS de servicio está asegurado con la clave de cuenta de almacenamiento. Un SAS de servicio delega acceso a un recurso en solo uno de los servicios de almacenamiento de Azure: almacenamiento de blobs, almacenamiento de colas, almacenamiento de tablas o archivos de Azure. La URI para un SAS a nivel de servicio consta de la URI al recurso para el cual el SAS delegará acceso, seguido por el token SAS.

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

SAS de cuenta

Un SAS de cuenta está asegurado con una de las claves de cuenta de almacenamiento (hay 2). Un SAS de cuenta 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 SAS de cuenta.

de la documentación: Al crear un SAS de cuenta, puede:

  • Delegar acceso a operaciones a nivel de servicio que actualmente no están disponibles con un SAS específico del 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, puede delegar acceso a recursos tanto en Azure Blob Storage como en Azure Files mediante un SAS de cuenta.

  • Delegar acceso a operaciones de escritura y eliminación para contenedores, colas, tablas y recursos compartidos de archivos, que no están disponibles con un SAS específico del 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).

Enumeración

# 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

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización