Az - Blob Storage

Support HackTricks

Informações Básicas

Dos documentos: Azure Blob storage é a solução de armazenamento de objetos na nuvem da Microsoft. O Blob storage é 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 específica, como dados de texto ou binários.

O Blob storage oferece três tipos de recursos:

  • A conta de armazenamento (nome único)

  • Um container na conta de armazenamento (pasta)

  • Um blob em um container

Diferentes tipos de armazenamento

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

Acesso ao Armazenamento

  • Use os principais 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.

  • Shared Access Signature (SAS): Tempo limitado e permissões específicas.

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

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

Exposição Pública

Se "Permitir acesso público ao Blob" estiver habilitado (desabilitado por padrão), é possível:

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

  • Listar blobs do container e lê-los.

Conectar ao Armazenamento

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

URLs SAS

Dos documentos: Uma assinatura de acesso compartilhado (SAS) fornece acesso delegado seguro a recursos na sua conta de armazenamento. Com um 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 para esses recursos.

  • Quanto tempo o SAS é válido.

Uma URL SAS se parece com isso: 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 SAS de delegação de usuário, você deve primeiro solicitar uma chave de delegação de usuário, que você então usa para assinar o SAS.

O suporte é fornecido para uma User Delegation Shared Access Signature (SAS) tanto no Azure Blob Storage quanto no Azure Data Lake Storage Gen2. No entanto, é importante notar que Stored Access Policies não são compatíveis com um User Delegation SAS.

Observe que o SAS de delegação de usuário é 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 delega 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 service-level SAS 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.

dos documentos: 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 gravação 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 (HTTPS ou HTTP/HTTPS).

Enumeração

# 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

Suporte HackTricks

Last updated