Az - Storage Accounts & Blobs
Reading time: 16 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
Basic Information
Azure Storage Accounts Microsoft Azure में मौलिक सेवाएँ हैं जो विभिन्न डेटा प्रकारों के लिए स्केलेबल, सुरक्षित और अत्यधिक उपलब्ध क्लाउड स्टोरेज प्रदान करती हैं, जिसमें ब्लॉब (बाइनरी बड़े ऑब्जेक्ट), फ़ाइलें, कतारें और तालिकाएँ शामिल हैं। ये विभिन्न स्टोरेज सेवाओं को एकल नामस्थान के तहत एक साथ समूहित करने के लिए कंटेनर के रूप में कार्य करते हैं ताकि प्रबंधन आसान हो सके।
मुख्य कॉन्फ़िगरेशन विकल्प:
- प्रत्येक स्टोरेज खाता का सभी Azure में एक अद्वितीय नाम होना चाहिए।
- प्रत्येक स्टोरेज खाता एक क्षेत्र या Azure विस्तारित क्षेत्र में तैनात किया जाता है।
- बेहतर प्रदर्शन के लिए स्टोरेज खाते का प्रीमियम संस्करण चुनना संभव है।
- रैक, ड्राइव और डेटा सेंटर विफलताओं के खिलाफ सुरक्षा के लिए 4 प्रकार की पुनरावृत्ति में से चुनना संभव है।
सुरक्षा कॉन्फ़िगरेशन विकल्प:
- REST API संचालन के लिए सुरक्षित ट्रांसफर की आवश्यकता: स्टोरेज के साथ किसी भी संचार में TLS की आवश्यकता होती है।
- व्यक्तिगत कंटेनरों पर गुमनाम पहुंच सक्षम करने की अनुमति: यदि नहीं, तो भविष्य में गुमनाम पहुंच सक्षम करना संभव नहीं होगा।
- स्टोरेज खाता कुंजी पहुंच सक्षम करें: यदि नहीं, तो साझा कुंजी के साथ पहुंच वर्जित होगी।
- न्यूनतम TLS संस्करण।
- कॉपी संचालन के लिए अनुमत दायरा: किसी भी स्टोरेज खाते से, उसी Entra टेनेन्ट से किसी भी स्टोरेज खाते से या समान वर्चुअल नेटवर्क में निजी एंडपॉइंट वाले स्टोरेज खाते से अनुमति दें।
Blob Storage विकल्प:
- क्रॉस-टेनेन्ट पुनरावृत्ति की अनुमति दें।
- एक्सेस स्तर: हॉट (बार-बार एक्सेस किया गया डेटा), कूल और कोल्ड (कभी-कभी एक्सेस किया गया डेटा)।
नेटवर्किंग विकल्प:
- नेटवर्क एक्सेस:
- सभी नेटवर्क से अनुमति दें।
- चयनित वर्चुअल नेटवर्क और IP पते से अनुमति दें।
- सार्वजनिक पहुंच को अक्षम करें और निजी पहुंच का उपयोग करें।
- निजी एंडपॉइंट: यह वर्चुअल नेटवर्क से स्टोरेज खाते के लिए एक निजी कनेक्शन की अनुमति देता है।
डेटा सुरक्षा विकल्प:
- कंटेनरों के लिए समय-निर्धारित पुनर्स्थापना: यह कंटेनरों को पहले की स्थिति में पुनर्स्थापित करने की अनुमति देता है।
- इसके लिए संस्करणन, परिवर्तन फ़ीड, और ब्लॉब सॉफ़्ट डिलीट सक्षम होना आवश्यक है।
- ब्लॉब के लिए सॉफ़्ट डिलीट सक्षम करें: यह हटाए गए ब्लॉब (यहां तक कि ओवरराइट किए गए) के लिए दिनों में एक संरक्षण अवधि सक्षम करता है।
- कंटेनरों के लिए सॉफ़्ट डिलीट सक्षम करें: यह हटाए गए कंटेनरों के लिए दिनों में एक संरक्षण अवधि सक्षम करता है।
- फ़ाइल शेयरों के लिए सॉफ़्ट डिलीट सक्षम करें: यह हटाए गए फ़ाइल शेयरों के लिए दिनों में एक संरक्षण अवधि सक्षम करता है।
- ब्लॉब के लिए संस्करणन सक्षम करें: अपने ब्लॉब के पिछले संस्करणों को बनाए रखें।
- ब्लॉब परिवर्तन फ़ीड सक्षम करें: ब्लॉब में निर्माण, संशोधन, और हटाने के परिवर्तनों के लॉग रखें।
- संस्करण-स्तरीय अपरिवर्तनीयता समर्थन सक्षम करें: यह आपको खाता स्तर पर समय-आधारित संरक्षण नीति सेट करने की अनुमति देता है जो सभी ब्लॉब संस्करणों पर लागू होगी।
- संस्करण-स्तरीय अपरिवर्तनीयता समर्थन और कंटेनरों के लिए समय-निर्धारित पुनर्स्थापना को एक साथ सक्षम नहीं किया जा सकता है।
एन्क्रिप्शन कॉन्फ़िगरेशन विकल्प:
- एन्क्रिप्शन प्रकार: Microsoft-प्रबंधित कुंजी (MMK) या ग्राहक-प्रबंधित कुंजी (CMK) का उपयोग करना संभव है।
- इन्फ्रास्ट्रक्चर एन्क्रिप्शन सक्षम करें: डेटा को "अधिक सुरक्षा के लिए" डबल एन्क्रिप्ट करने की अनुमति देता है।
Storage endpoints
Storage Service | Endpoint |
---|---|
Blob storage | https:// https:// |
Data Lake Storage | https:// |
Azure Files | https:// |
Queue storage | https:// |
Table storage | https:// |
Public Exposure
यदि "Allow Blob public access" सक्षम है (डिफ़ॉल्ट रूप से अक्षम), तो कंटेनर बनाते समय यह संभव है:
- ब्लॉब पढ़ने के लिए सार्वजनिक पहुंच दें (आपको नाम जानना होगा)।
- कंटेनर ब्लॉब की सूची बनाएं और उन्हें पढ़ें।
- इसे पूरी तरह से निजी बनाएं।
Connect to Storage
यदि आप कोई स्टोरेज पाते हैं जिससे आप कनेक्ट कर सकते हैं, तो आप ऐसा करने के लिए Microsoft Azure Storage Explorer उपकरण का उपयोग कर सकते हैं।
Access to Storage
RBAC
स्टोरेज खातों तक पहुंच के लिए RBAC भूमिकाओं के साथ Entra ID प्रिंसिपल का उपयोग करना संभव है और यह अनुशंसित तरीका है।
Access Keys
स्टोरेज खातों में एक्सेस कुंजी होती हैं जिनका उपयोग इसे एक्सेस करने के लिए किया जा सकता है। यह स्टोरेज खाते तक पूर्ण पहुंच प्रदान करता है।
.png)
Shared Keys & Lite Shared Keys
यह संभव है कि Shared Keys उत्पन्न करें जो एक्सेस कुंजियों के साथ हस्ताक्षरित होते हैं ताकि एक हस्ताक्षरित URL के माध्यम से कुछ संसाधनों तक पहुंच को अधिकृत किया जा सके।
note
ध्यान दें कि CanonicalizedResource
भाग स्टोरेज सेवाओं के संसाधन (URI) का प्रतिनिधित्व करता है। और यदि URL में कोई भाग एन्कोड किया गया है, तो इसे CanonicalizedResource
के अंदर भी एन्कोड किया जाना चाहिए।
note
यह डिफ़ॉल्ट रूप से az
cli द्वारा उपयोग किया जाता है ताकि अनुरोधों को प्रमाणित किया जा सके। इसे Entra ID प्रिंसिपल क्रेडेंशियल्स का उपयोग करने के लिए --auth-mode login
पैरामीटर निर्दिष्ट करें।
- यह ब्लॉब, कतार और फ़ाइल सेवाओं के लिए एक साझा कुंजी उत्पन्न करना संभव है, निम्नलिखित जानकारी पर हस्ताक्षर करके:
StringToSign = VERB + "\n" +
Content-Encoding + "\n" +
Content-Language + "\n" +
Content-Length + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
If-Modified-Since + "\n" +
If-Match + "\n" +
If-None-Match + "\n" +
If-Unmodified-Since + "\n" +
Range + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
- यह संभव है कि table services के लिए एक shared key उत्पन्न किया जाए निम्नलिखित जानकारी पर हस्ताक्षर करके:
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedResource;
- यह ब्लॉब, कतार और फ़ाइल सेवाओं के लिए एक लाइट साझा कुंजी उत्पन्न करना संभव है, निम्नलिखित जानकारी पर हस्ताक्षर करके:
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
- यह संभव है कि टेबल सेवाओं के लिए एक लाइट साझा कुंजी उत्पन्न की जाए, निम्नलिखित जानकारी पर हस्ताक्षर करके:
StringToSign = Date + "\n"
CanonicalizedResource
फिर, कुंजी का उपयोग करने के लिए, इसे Authorization हेडर में निम्नलिखित सिंटैक्स का पालन करते हुए किया जा सकता है:
Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"
#e.g.
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
PUT http://myaccount/mycontainer?restype=container&timeout=30 HTTP/1.1
x-ms-version: 2014-02-14
x-ms-date: Fri, 26 Jun 2015 23:39:12 GMT
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
Content-Length: 0
Shared Access Signature (SAS)
Shared Access Signatures (SAS) सुरक्षित, समय-सीमित URLs हैं जो Azure Storage खाते में संसाधनों तक पहुँचने के लिए विशिष्ट अनुमतियाँ प्रदान करती हैं बिना खाते की पहुँच कुंजियों को उजागर किए। जबकि पहुँच कुंजियाँ सभी संसाधनों के लिए पूर्ण प्रशासनिक पहुँच प्रदान करती हैं, SAS अनुमतियों (जैसे पढ़ना या लिखना) को निर्दिष्ट करके और समाप्ति समय को परिभाषित करके सूक्ष्म नियंत्रण की अनुमति देती है।
SAS प्रकार
- User delegation SAS: यह एक Entra ID principal से बनाया जाता है जो SAS पर हस्ताक्षर करेगा और उपयोगकर्ता से SAS को अनुमतियाँ सौंपेगा। इसका उपयोग केवल blob और data lake storage के साथ किया जा सकता है (docs). सभी उत्पन्न उपयोगकर्ता प्रतिनिधि SAS को रद्द करना संभव है।
- भले ही "अधिक" अनुमतियों के साथ एक प्रतिनिधित्व SAS उत्पन्न करना संभव है जो उपयोगकर्ता के पास हैं। हालाँकि, यदि प्रमुख के पास वे नहीं हैं, तो यह काम नहीं करेगा (कोई प्रिवेस्क नहीं)।
- Service SAS: यह एक स्टोरेज खाता access keys में से एक का उपयोग करके हस्ताक्षरित होता है। इसका उपयोग एकल स्टोरेज सेवा में विशिष्ट संसाधनों तक पहुँच प्रदान करने के लिए किया जा सकता है। यदि कुंजी नवीनीकरण की जाती है, तो SAS काम करना बंद कर देगा।
- Account SAS: यह भी एक स्टोरेज खाता access keys में से एक के साथ हस्ताक्षरित होता है। यह एक स्टोरेज खाता सेवाओं (Blob, Queue, Table, File) में संसाधनों तक पहुँच प्रदान करता है और सेवा-स्तरीय संचालन को शामिल कर सकता है।
एक SAS URL जो एक access key द्वारा हस्ताक्षरित होता है, ऐसा दिखता है:
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
एक SAS URL जो user delegation के रूप में हस्ताक्षरित होता है, ऐसा दिखता है:
https://<container_name>.blob.core.windows.net/testing-container?sp=r&st=2024-11-22T15:07:40Z&se=2024-11-22T23:07:40Z&skoid=d77c71a1-96e7-483d-bd51-bd753aa66e62&sktid=fdd066e1-ee37-49bc-b08f-d0e152119b04&skt=2024-11-22T15:07:40Z&ske=2024-11-22T23:07:40Z&sks=b&skv=2022-11-02&spr=https&sv=2022-11-02&sr=c&sig=7s5dJyeE6klUNRulUj9TNL0tMj2K7mtxyRc97xbYDqs%3D
कुछ http params पर ध्यान दें:
se
पैरामीटर SAS की समाप्ति तिथि को इंगित करता हैsp
पैरामीटर SAS की अनुमतियों को इंगित करता हैsig
SAS को मान्य करने वाला हस्ताक्षर है
SAS अनुमतियाँ
SAS उत्पन्न करते समय यह आवश्यक है कि यह निर्दिष्ट किया जाए कि यह कौन सी अनुमतियाँ प्रदान करेगा। जिस वस्तु पर SAS उत्पन्न किया जा रहा है, उसके आधार पर विभिन्न अनुमतियाँ शामिल की जा सकती हैं। उदाहरण के लिए:
- (a)dd, (c)reate, (d)elete, (e)xecute, (f)ilter_by_tags, (i)set_immutability_policy, (l)ist, (m)ove, (r)ead, (t)ag, (w)rite, (x)delete_previous_version, (y)permanent_delete
SFTP Support for Azure Blob Storage
Azure Blob Storage अब SSH File Transfer Protocol (SFTP) का समर्थन करता है, जो सुरक्षित फ़ाइल स्थानांतरण और प्रबंधन को सीधे Blob Storage में सक्षम बनाता है बिना कस्टम समाधानों या तृतीय-पक्ष उत्पादों की आवश्यकता के।
मुख्य विशेषताएँ
- प्रोटोकॉल समर्थन: SFTP उन Blob Storage खातों के साथ काम करता है जो हायरार्किकल नेमस्पेस (HNS) के साथ कॉन्फ़िगर किए गए हैं। यह ब्लॉब्स को निर्देशिकाओं और उपनिर्देशिकाओं में व्यवस्थित करता है ताकि नेविगेशन आसान हो सके।
- सुरक्षा: SFTP प्रमाणीकरण के लिए स्थानीय उपयोगकर्ता पहचान का उपयोग करता है और RBAC या ABAC के साथ एकीकृत नहीं होता है। प्रत्येक स्थानीय उपयोगकर्ता प्रमाणीकरण कर सकता है:
- Azure-जनित पासवर्ड
- सार्वजनिक-निजी SSH कुंजी जोड़े
- सूक्ष्म अनुमतियाँ: स्थानीय उपयोगकर्ताओं को 100 कंटेनरों तक पढ़ने, लिखने, हटाने और सूचीबद्ध करने जैसी अनुमतियाँ सौंपी जा सकती हैं।
- नेटवर्किंग विचार: SFTP कनेक्शन पोर्ट 22 के माध्यम से बनाए जाते हैं। Azure SFTP ट्रैफ़िक को सुरक्षित करने के लिए फ़ायरवॉल, निजी एंडपॉइंट या वर्चुअल नेटवर्क जैसी नेटवर्क कॉन्फ़िगरेशन का समर्थन करता है।
सेटअप आवश्यकताएँ
- हायरार्किकल नेमस्पेस: स्टोरेज खाता बनाते समय HNS सक्षम होना चाहिए।
- समर्थित एन्क्रिप्शन: Microsoft Security Development Lifecycle (SDL) द्वारा अनुमोदित क्रिप्टोग्राफिक एल्गोरिदम की आवश्यकता होती है (जैसे, rsa-sha2-256, ecdsa-sha2-nistp256)।
- SFTP कॉन्फ़िगरेशन:
- स्टोरेज खाते पर SFTP सक्षम करें।
- उचित अनुमतियों के साथ स्थानीय उपयोगकर्ता पहचान बनाएं।
- उपयोगकर्ताओं के लिए होम निर्देशिकाएँ कॉन्फ़िगर करें ताकि वे कंटेनर के भीतर अपनी प्रारंभिक स्थिति को परिभाषित कर सकें।
अनुमतियाँ
अनुमति | प्रतीक | विवरण |
---|---|---|
पढ़ें | r | फ़ाइल सामग्री पढ़ें। |
लिखें | w | फ़ाइलें अपलोड करें और निर्देशिकाएँ बनाएं। |
सूची | l | निर्देशिकाओं की सामग्री सूचीबद्ध करें। |
हटाएँ | d | फ़ाइलें या निर्देशिकाएँ हटाएँ। |
बनाएँ | c | फ़ाइलें या निर्देशिकाएँ बनाएं। |
स्वामित्व संशोधित करें | o | स्वामित्व उपयोगकर्ता या समूह बदलें। |
अनुमतियाँ संशोधित करें | p | फ़ाइलों या निर्देशिकाओं पर ACLs बदलें। |
Enumeration
# Get storage accounts
az storage account list #Get the account name from here
# BLOB STORAGE
## List containers
az storage container list --account-name <name>
## Check if public access is allowed
az storage container show-permission \
--account-name <acc-name> \
-n <container-name>
## Make a container public
az storage container set-permission \
--public-access container \
--account-name <acc-name> \
-n <container-name>
## List blobs in a container
az storage blob list \
--container-name <container name> \
--account-name <account name>
## Download blob
az storage blob download \
--account-name <account name> \
--container-name <container name> \
--name <blob name> \
--file </path/to/local/file>
## Create container policy
az storage container policy create \
--account-name mystorageaccount \
--container-name mycontainer \
--name fullaccesspolicy \
--permissions racwdl \
--start 2023-11-22T00:00Z \
--expiry 2024-11-22T00:00Z
# QUEUE
az storage queue list --account-name <name>
az storage message peek --account-name <name> --queue-name <queue-name>
# ACCESS KEYS
az storage account keys list --account-name <name>
## Check key policies (expiration time?)
az storage account show -n <name> --query "{KeyPolicy:keyPolicy}"
## Once having the key, it's possible to use it with the argument --account-key
## Enum blobs with account key
az storage blob list \
--container-name <container name> \
--account-name <account name> \
--account-key "ZrF40pkVKvWPUr[...]v7LZw=="
## Download a file using an account key
az storage blob download \
--account-name <account name> \
--account-key "ZrF40pkVKvWPUr[...]v7LZw==" \
--container-name <container name> \
--name <blob name> \
--file </path/to/local/file>
## Upload a file using an account key
az storage blob upload \
--account-name <account name> \
--account-key "ZrF40pkVKvWPUr[...]v7LZw==" \
--container-name <container name> \
--file </path/to/local/file>
# SAS
## List access policies
az storage <container|queue|share|table> policy list \
--account-name <acc name> \
--container-name <container name>
## Generate SAS with all permissions using an access key
az storage <container|queue|share|table|blob> generate-sas \
--permissions acdefilmrtwxy \
--expiry 2024-12-31T23:59:00Z \
--account-name <acc-name> \
-n <container-name>
## Generate SAS with all permissions using via user delegation
az storage <container|queue|share|table|blob> generate-sas \
--permissions acdefilmrtwxy \
--expiry 2024-12-31T23:59:00Z \
--account-name <acc-name> \
--as-user --auth-mode login \
-n <container-name>
## Generate account SAS
az storage account generate-sas \
--expiry 2024-12-31T23:59:00Z \
--account-name <acc-name> \
--services qt \
--resource-types sco \
--permissions acdfilrtuwxy
## Use the returned SAS key with the param --sas-token
## e.g.
az storage blob show \
--account-name <account name> \
--container-name <container name> \
--sas-token 'se=2024-12-31T23%3A59%3A00Z&sp=racwdxyltfmei&sv=2022-11-02&sr=c&sig=ym%2Bu%2BQp5qqrPotIK5/rrm7EMMxZRwF/hMWLfK1VWy6E%3D' \
--name 'asd.txt'
#Local-Users
## List users
az storage account local-user list \
--account-name <storage-account-name> \
--resource-group <resource-group-name>
## Get user
az storage account local-user show \
--account-name <storage-account-name> \
--resource-group <resource-group-name> \
--name <local-user-name>
## List keys
az storage account local-user list \
--account-name <storage-account-name> \
--resource-group <resource-group-name>
फ़ाइल शेयर
विशेषाधिकार वृद्धि
पोस्ट एक्सप्लोइटेशन
Az - Blob Storage Post Exploitation
स्थिरता
संदर्भ
- https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction
- https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview
- https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।