Az - Blob Storage

Support HackTricks

Basic Information

From the docs: O Azure Blob storage é a solução de armazenamento de objetos da Microsoft para a nuvem. O armazenamento de blobs é otimizado para armazenar grandes quantidades de dados não estruturados. Dados não estruturados são dados que não seguem um modelo ou definição de dados específicos, como texto ou dados binários.

O armazenamento de blobs oferece três tipos de recursos:

  • A conta de armazenamento (nome único)

  • Um container na conta de armazenamento (pasta)

  • Um blob em um container

Different types of 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

Access to Storage

  • Use princípios do Azure AD via funções RBAC suportadas.

  • Chaves de Acesso: Use chaves de acesso da conta de armazenamento. Isso fornece acesso total à conta de armazenamento.

  • Assinatura de Acesso Compartilhado (SAS): Tempo limitado e permissões específicas.

  • Você pode gerar uma URL SAS com uma chave de acesso (mais complicado de detectar).

  • Como a SAS é gerada a partir da chave de acesso, se ela for renovada, a SAS para de funcionar.

Public Exposure

Se "Permitir acesso público a blobs" estiver ativado (desativado por padrão), é possível:

  • Dar acesso público para ler blobs (você precisa saber o nome).

  • Listar blobs do container e lê-los.

Connect to Storage

Se você encontrar algum armazenamento ao qual possa se conectar, pode usar a ferramenta Microsoft Azure Storage Explorer para isso.

SAS URLs

From the docs: Uma assinatura de acesso compartilhado (SAS) fornece acesso delegado seguro a recursos em sua conta de armazenamento. Com uma SAS, você tem controle granular sobre como um cliente pode acessar seus dados. Por exemplo:

  • Quais recursos o cliente pode acessar.

  • Quais permissões eles têm sobre esses recursos.

  • Quanto tempo a SAS é válida.

Uma URL SAS se parece com isto: 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 acessar os dados ou 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

Você pode proteger um token de assinatura de acesso compartilhado (SAS) para acesso a um contêiner, diretório ou blob usando credenciais do Azure Active Directory (Azure AD) ou uma chave de conta. Para criar um user delegation SAS, você deve primeiro solicitar uma chave de delegação de usuário, que você usará para assinar o SAS.

O suporte é fornecido para uma Assinatura de Acesso Compartilhado de Delegação de Usuário (SAS) tanto no Azure Blob Storage quanto no Azure Data Lake Storage Gen2. No entanto, é importante notar que Políticas de Acesso Armazenadas não são compatíveis com um User Delegation SAS.

Observe que o user delegation SAS é protegido com credenciais do Azure AD em vez de chaves de conta de armazenamento. Isso impede que clientes/aplicações armazenem/recuperem chaves de armazenamento para criar SAS.

Service SAS

Um service SAS é protegido com a chave da conta de armazenamento. Um service SAS delegates acesso a um recurso em apenas um dos serviços de Armazenamento do Azure: Blob storage, Queue storage, Table storage ou Azure Files. O URI para um SAS de nível de serviço consiste no URI do recurso para o qual o SAS delegará acesso, seguido pelo token SAS.

Para usar credenciais do Azure Active Directory (Azure AD) para proteger um SAS para um contêiner ou blob, use um user delegation SAS.

Account SAS

Um account SAS é protegido com uma das chaves da conta de armazenamento (existem 2). Um account SAS delega acesso a recursos em um ou mais dos serviços de armazenamento. Todas as operações disponíveis via um service ou user delegation SAS também estão disponíveis via um account SAS.

from the docs: Ao criar um account SAS, você pode:

  • Delegar acesso a operações de nível de serviço que não estão atualmente disponíveis com um SAS específico de serviço, como as operações Get/Set Service Properties e Get Service Stats.

  • Delegar acesso a mais de um serviço em uma conta de armazenamento ao mesmo tempo. Por exemplo, você pode delegar acesso a recursos tanto no Azure Blob Storage quanto no Azure Files usando um account SAS.

  • Delegar acesso a operações de escrita e exclusão para contêineres, filas, tabelas e compartilhamentos de arquivos, que não estão disponíveis com um SAS específico de objeto.

  • Especificar um endereço IP ou um intervalo de endereços IP dos quais aceitar solicitações.

  • Especificar o protocolo HTTP do qual aceitar solicitações (seja HTTPS ou 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>

Referências

Support HackTricks

Last updated