Az - Blob Storage

Support HackTricks

Grundinformationen

Aus den Dokumenten: Azure Blob Storage ist Microsofts Objekt-Speicherlösung für die Cloud. Blob-Speicher ist optimiert für die Speicherung massiver Mengen unstrukturierter Daten. Unstrukturierte Daten sind Daten, die sich nicht an ein bestimmtes Datenmodell oder eine Definition halten, wie z.B. Text- oder Binärdaten.

Blob-Speicher bietet drei Arten von Ressourcen:

  • Das Speicherkonto (einzigartiger Name)

  • Ein Container im Speicherkonto (Ordner)

  • Ein Blob in einem Container

Verschiedene Arten von Speicher

Blob-Speicher

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-Speicher

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

Tabellen-Speicher

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

Zugriff auf Speicher

  • Verwenden Sie Azure AD-Prinzipien über RBAC-Rollen.

  • Zugriffsschlüssel: Verwenden Sie die Zugriffsschlüssel des Speicherkontos. Dies bietet vollen Zugriff auf das Speicherkonto.

  • Shared Access Signature (SAS): Zeitlich begrenzt und spezifische Berechtigungen.

  • Sie können eine SAS-URL mit einem Zugriffsschlüssel generieren (schwieriger zu erkennen).

  • Da die SAS aus dem Zugriffsschlüssel generiert wird, funktioniert die SAS nicht mehr, wenn der Schlüssel erneuert wird.

Öffentliche Exposition

Wenn "Öffentlichen Zugriff auf Blobs erlauben" aktiviert ist (standardmäßig deaktiviert), ist es möglich:

  • Öffentlichen Zugriff zum Lesen von Blobs zu gewähren (Sie müssen den Namen kennen).

  • Container-Blobs aufzulisten und sie zu lesen.

Verbindung zum Speicher

Wenn Sie einen Speicher finden, zu dem Sie eine Verbindung herstellen können, können Sie das Tool Microsoft Azure Storage Explorer verwenden, um dies zu tun.

SAS-URLs

Aus den Dokumenten: Eine Shared Access Signature (SAS) bietet sicheren delegierten Zugriff auf Ressourcen in Ihrem Speicherkonto. Mit einer SAS haben Sie granularen Zugriff darauf, wie ein Client auf Ihre Daten zugreifen kann. Zum Beispiel:

  • Auf welche Ressourcen der Client zugreifen darf.

  • Welche Berechtigungen er für diese Ressourcen hat.

  • Wie lange die SAS gültig ist.

Eine SAS-URL sieht so aus: 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

Verwenden Sie Storage Explorer, um auf die Daten zuzugreifen oder 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())

Benutzerdelegation SAS

Sie können ein Shared Access Signature (SAS)-Token für den Zugriff auf einen Container, ein Verzeichnis oder ein Blob sichern, indem Sie entweder Azure Active Directory (Azure AD) Anmeldeinformationen oder einen Kontoschlüssel verwenden. Um eine Benutzerdelegation SAS zu erstellen, müssen Sie zunächst einen Benutzerdelegationsschlüssel anfordern, den Sie dann verwenden, um die SAS zu signieren.

Unterstützung wird für eine User Delegation Shared Access Signature (SAS) sowohl in Azure Blob Storage als auch in Azure Data Lake Storage Gen2 bereitgestellt. Es ist jedoch wichtig zu beachten, dass Stored Access Policies nicht mit einer Benutzerdelegation SAS kompatibel sind.

Beachten Sie, dass die Benutzerdelegation SAS mit Azure AD-Anmeldeinformationen anstelle von Speicherkontenschlüsseln gesichert ist. Dies verhindert, dass Clients/Anwendungen Speicherschlüssel speichern/abrufen, um SAS zu erstellen.

Service SAS

Eine Service SAS ist mit dem Speicherkontenschlüssel gesichert. Eine Service SAS delegiert den Zugriff auf eine Ressource nur in einem der Azure Storage-Dienste: Blob-Speicher, Warteschlangen-Speicher, Tabellen-Speicher oder Azure Files. Die URI für eine servicelevel SAS besteht aus der URI zur Ressource, für die die SAS den Zugriff delegiert, gefolgt vom SAS-Token.

Um Azure Active Directory (Azure AD)-Anmeldeinformationen zu verwenden, um eine SAS für einen Container oder ein Blob zu sichern, verwenden Sie eine Benutzerdelegation SAS.

Konto SAS

Eine Konto SAS ist mit einem der Speicherkontenschlüssel (es gibt 2) gesichert. Eine Konto SAS delegiert den Zugriff auf Ressourcen in einem oder mehreren der Speicherdienste. Alle Operationen, die über eine Service- oder Benutzerdelegation SAS verfügbar sind, sind auch über eine Konto SAS verfügbar.

from the docs: Durch die Erstellung einer Konto SAS können Sie:

  • Den Zugriff auf servicelevel Operationen delegieren, die derzeit nicht mit einer service-spezifischen SAS verfügbar sind, wie die Get/Set Service Properties und Get Service Stats Operationen.

  • Den Zugriff auf mehr als einen Dienst in einem Speicherkonto gleichzeitig delegieren. Zum Beispiel können Sie den Zugriff auf Ressourcen sowohl in Azure Blob Storage als auch in Azure Files durch die Verwendung einer Konto SAS delegieren.

  • Den Zugriff auf Schreib- und Löschoperationen für Container, Warteschlangen, Tabellen und Dateifreigaben delegieren, die mit einer objekt-spezifischen SAS nicht verfügbar sind.

  • Eine IP-Adresse oder einen Bereich von IP-Adressen angeben, von denen Anfragen akzeptiert werden.

  • Das HTTP-Protokoll angeben, von dem Anfragen akzeptiert werden (entweder HTTPS oder HTTP/HTTPS).

Aufzählung

# 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>

Referenzen

Unterstütze HackTricks

Last updated