Az - App Services
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 गिटहब रिपोजिटरी में सबमिट करके।
App Service Basic Information
Azure App Services डेवलपर्स को वेब एप्लिकेशन, मोबाइल ऐप बैकएंड, और APIs को बिना किसी रुकावट के बनाने, तैनात करने और स्केल करने की अनुमति देता है। यह कई प्रोग्रामिंग भाषाओं का समर्थन करता है और कार्यक्षमता और प्रबंधन के लिए विभिन्न Azure उपकरणों और सेवाओं के साथ एकीकृत होता है।
प्रत्येक ऐप एक सैंडबॉक्स के अंदर चलता है लेकिन अलगाव App Service योजनाओं पर निर्भर करता है:
- फ्री और शेयर किए गए स्तरों में ऐप्स शेयर किए गए VMs पर चलते हैं।
- स्टैंडर्ड और प्रीमियम स्तरों में ऐप्स विशेष VMs पर चलते हैं जो केवल उसी App Service योजना में ऐप्स द्वारा साझा किए जाते हैं।
- आइसोलेटेड स्तर विशेष VMs पर विशेष वर्चुअल नेटवर्क पर चलते हैं, जो ऐप्स के अलगाव में सुधार करते हैं।
warning
ध्यान दें कि कोई भी उन अलगावों में से अन्य सामान्य वेब कमजोरियों (जैसे फ़ाइल अपलोड, या इंजेक्शन) को रोकता नहीं है। और यदि एक प्रबंधन पहचान का उपयोग किया जाता है, तो यह उन पर विशेषाधिकार बढ़ा सकता है।
ऐप्स में कुछ दिलचस्प कॉन्फ़िगरेशन होते हैं:
- हमेशा चालू: सुनिश्चित करता है कि ऐप हमेशा चल रहा है। यदि सक्षम नहीं किया गया है, तो ऐप 20 मिनट की निष्क्रियता के बाद चलना बंद कर देगा और जब एक अनुरोध प्राप्त होगा तो फिर से शुरू होगा।
- यदि आपके पास एक वेबजॉब है जिसे लगातार चलाने की आवश्यकता है तो यह आवश्यक है क्योंकि यदि ऐप रुक जाता है तो वेबजॉब भी रुक जाएगा।
- SSH: यदि सक्षम है, तो पर्याप्त अनुमतियों वाला एक उपयोगकर्ता SSH का उपयोग करके ऐप से कनेक्ट कर सकता है।
- डीबगिंग: यदि सक्षम है, तो पर्याप्त अनुमतियों वाला एक उपयोगकर्ता ऐप को डीबग कर सकता है। हालाँकि, यह हर 48 घंटे में स्वचालित रूप से बंद हो जाता है।
- वेब ऐप + डेटाबेस: वेब कंसोल एक डेटाबेस के साथ एक ऐप बनाने की अनुमति देता है। इस मामले में, यह उपयोग करने के लिए डेटाबेस का चयन करना संभव है (SQLAzure, PostgreSQL, MySQL, MongoDB) और यह आपको Azure Cache for Redis बनाने की भी अनुमति देता है।
- डेटाबेस और Redis के लिए क्रेडेंशियल्स वाला URL appsettings में संग्रहीत किया जाएगा।
- कंटेनर: ऐप सेवा में कंटेनर को तैनात करना संभव है, कंटेनर के URL और इसे एक्सेस करने के लिए क्रेडेंशियल्स को इंगित करके।
- माउंट्स: स्टोरेज खातों से 5 माउंट बनाना संभव है, ये Azure Blob (पढ़ने के लिए केवल) या Azure Files हो सकते हैं। कॉन्फ़िगरेशन स्टोरेज खाते के माध्यम से एक्सेस कुंजी को संग्रहीत करेगा।
- नेटवर्किंग: यह सार्वजनिक रूप से उपलब्ध हो सकता है या केवल एक VNet से निजी एंडपॉइंट्स द्वारा सुलभ हो सकता है।
Basic Authentication
जब एक वेब ऐप (और एक Azure फ़ंक्शन आमतौर पर) बनाया जाता है, तो यह संकेत देना संभव है कि आप बुनियादी प्रमाणीकरण सक्षम करना चाहते हैं (डिफ़ॉल्ट रूप से बंद)। यह मूल रूप से SCM (स्रोत नियंत्रण प्रबंधक) और FTP (फाइल ट्रांसफर प्रोटोकॉल) को एप्लिकेशन के लिए सक्षम करता है ताकि उन तकनीकों का उपयोग करके एप्लिकेशन को तैनात करना संभव हो सके।
SCM और FTP सर्वरों तक पहुँचने के लिए, एक उपयोगकर्ता नाम और पासवर्ड की आवश्यकता होती है। इसलिए, Azure कुछ APIs प्रदान करता है जो इन प्लेटफार्मों के लिए URLs और क्रेडेंशियल्स प्राप्त करने के लिए हैं।
FTP सर्वर में कोई विशेष जादू नहीं है, बस मान्य URL, उपयोगकर्ता नाम और पासवर्ड के साथ कनेक्ट करना और ऐप वातावरण पर पढ़ने और लिखने की अनुमति प्राप्त करना संभव है।
SCM
आप एक वेब ब्राउज़र का उपयोग करके https://<SMC-URL>/BasicAuth
पर SCM से कनेक्ट कर सकते हैं और वहां सभी फ़ाइलों और तैनातियों की जांच कर सकते हैं।
Kudu
Kudu वह प्लेटफ़ॉर्म है जो SCM और एक वेब और API इंटरफ़ेस दोनों का प्रबंधन करता है ताकि एक ऐप सेवा का प्रबंधन किया जा सके, और Git-आधारित तैनातियों, दूरस्थ डीबगिंग, और फ़ाइल प्रबंधन क्षमताएँ प्रदान करता है। यह वेब ऐप में परिभाषित SCM URL के माध्यम से सुलभ है।
ध्यान दें कि ऐप सेवाओं और फ़ंक्शन ऐप्स द्वारा उपयोग किए जाने वाले Kudu संस्करण भिन्न होते हैं, फ़ंक्शन ऐप्स का संस्करण बहुत अधिक सीमित होता है।
Kudu में आप कुछ दिलचस्प एंडपॉइंट्स पा सकते हैं:
/BasicAuth
: आपको Kudu के अंदर लॉगिन करने के लिए इस पथ तक पहुँचने की आवश्यकता है।/DebugConsole
: एक कंसोल जो आपको Kudu चलने वाले वातावरण में कमांड निष्पादित करने की अनुमति देता है।- ध्यान दें कि इस वातावरण में मेटाडेटा सेवा तक पहुँच नहीं है ताकि टोकन प्राप्त किए जा सकें।
/webssh/host
: एक वेब-आधारित SSH क्लाइंट जो आपको उस कंटेनर के अंदर कनेक्ट करने की अनुमति देता है जहां ऐप चल रहा है।- इस वातावरण में मेटाडेटा सेवा तक पहुँच है ताकि असाइन किए गए प्रबंधित पहचानों से टोकन प्राप्त किए जा सकें।
/Env
: सिस्टम, ऐप सेटिंग्स, पर्यावरण चर, कनेक्शन स्ट्रिंग और HTTP हेडर के बारे में जानकारी प्राप्त करें।/wwwroot/
: वेब ऐप का रूट डायरेक्टरी। आप यहाँ से सभी फ़ाइलें डाउनलोड कर सकते हैं।
इसके अलावा, Kudu पहले https://github.com/projectkudu/kudu पर ओपन-सोर्स था लेकिन प्रोजेक्ट को बंद कर दिया गया और Azure में वर्तमान Kudu के व्यवहार की तुलना पुराने से करने पर यह देखा जा सकता है कि कई चीजें पहले ही बदल चुकी हैं।
Sources
ऐप सेवाएँ डिफ़ॉल्ट रूप से कोड को ज़िप फ़ाइल के रूप में अपलोड करने की अनुमति देती हैं, लेकिन यह एक तृतीय पक्ष सेवा से कनेक्ट करने और वहां से कोड प्राप्त करने की भी अनुमति देती है।
- वर्तमान में समर्थित तृतीय पक्ष स्रोत Github और Bitbucket हैं।
- आप
az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
चलाकर प्रमाणीकरण टोकन प्राप्त कर सकते हैं। - Azure डिफ़ॉल्ट रूप से हर बार कोड अपडेट होने पर ऐप सेवा में कोड तैनात करने के लिए एक Github Action सेट करेगा।
- यह वहाँ से कोड प्राप्त करने के लिए एक दूरस्थ git रिपॉजिटरी (उपयोगकर्ता नाम और पासवर्ड के साथ) को इंगित करना भी संभव है।
- आप
az webapp deployment source show --name <app-name> --resource-group <res-group>
याaz rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"
चलाकर दूरस्थ रिपॉजिटरी के लिए क्रेडेंशियल्स प्राप्त कर सकते हैं। - एक Azure Repository का उपयोग करना भी संभव है।
- एक स्थानीय git रिपॉजिटरी को कॉन्फ़िगर करना भी संभव है।
- आप
az webapp deployment source show --name <app-name> --resource-group <res-group>
के साथ git रिपॉजिटरी का URL प्राप्त कर सकते हैं और यह ऐप का SCM URL होगा। - इसे क्लोन करने के लिए आपको SCM क्रेडेंशियल्स की आवश्यकता होगी जिसे आप
az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>
के साथ प्राप्त कर सकते हैं।
Webjobs
Azure WebJobs Azure App Service वातावरण में चलने वाले बैकग्राउंड कार्य हैं। वे डेवलपर्स को अपने वेब एप्लिकेशनों के साथ स्क्रिप्ट या प्रोग्राम चलाने की अनुमति देते हैं, जिससे फ़ाइल प्रसंस्करण, डेटा हैंडलिंग, या अनुसूचित कार्यों जैसे असिंक्रोनस या समय-गहन संचालन को संभालना आसान हो जाता है। वेब जॉब के 2 प्रकार होते हैं:
- निरंतर: एक लूप में अनिश्चितकाल तक चलता है और इसे तुरंत बनाया जाने पर ट्रिगर किया जाता है। यह उन कार्यों के लिए आदर्श है जिन्हें निरंतर प्रसंस्करण की आवश्यकता होती है। हालाँकि, यदि ऐप चलना बंद कर देता है क्योंकि हमेशा चालू बंद है और इसे पिछले 20 मिनट में कोई अनुरोध नहीं मिला है, तो वेब जॉब भी रुक जाएगा।
- ट्रिगर किया गया: मांग पर या एक अनुसूची के आधार पर चलता है। यह आवधिक कार्यों, जैसे बैच डेटा अपडेट या रखरखाव दिनचर्या के लिए सबसे उपयुक्त है।
वेबजॉब्स हमलावरों के दृष्टिकोण से बहुत दिलचस्प होते हैं क्योंकि उनका उपयोग पर्यावरण में कोड निष्पादित करने और संलग्न प्रबंधित पहचानों के लिए विशेषाधिकार बढ़ाने के लिए किया जा सकता है।
इसके अलावा, यह हमेशा दिलचस्प होता है कि वेबजॉब्स द्वारा उत्पन्न लॉग्स की जांच करें क्योंकि वे संवेदनशील जानकारी हो सकती हैं।
Slots
Azure App Service Slots का उपयोग एक ही ऐप सेवा में एप्लिकेशन के विभिन्न संस्करणों को तैनात करने के लिए किया जाता है। यह डेवलपर्स को उत्पादन वातावरण में तैनात करने से पहले एक अलग वातावरण में नई सुविधाओं या परिवर्तनों का परीक्षण करने की अनुमति देता है।
इसके अलावा, यह एक विशिष्ट स्लॉट के लिए ट्रैफ़िक का एक प्रतिशत रूट करना संभव है, जो A/B परीक्षण के लिए उपयोगी है, और बैकडोर उद्देश्यों के लिए।
Azure Function Apps
बुनियादी रूप से Azure Function apps Azure App Service का एक उपसमुच्चय हैं और यदि आप वेब कंसोल में जाते हैं और सभी ऐप सेवाओं की सूची बनाते हैं या az cli में az webapp list
निष्पादित करते हैं, तो आप वहाँ सूचीबद्ध फ़ंक्शन ऐप्स को भी देख पाएंगे।
इसलिए, दोनों सेवाओं में वास्तव में ज्यादातर एक समान कॉन्फ़िगरेशन, सुविधाएँ और विकल्प होते हैं az cli में, हालाँकि वे उन्हें थोड़ा अलग तरीके से कॉन्फ़िगर कर सकते हैं (जैसे appsettings के डिफ़ॉल्ट मान या फ़ंक्शन ऐप्स में स्टोरेज खाते का उपयोग)।
Enumeration
# List webapps
az webapp list
## Less information
az webapp list --query "[].{hostName: defaultHostName, state: state, name: name, resourcegroup: resourceGroup}" -o table
## Get SCM URL of each webapp
az webapp list | grep '"name"' | grep "\.scm\." | awk '{print $2}' | sed 's/"//g'
# Get info about 1 app
az webapp show --name <name> --resource-group <res-group>
# Get instances of a webapp
az webapp list-instances --name <name> --resource-group <res-group>
## If you have enough perm you can go to the "consoleUrl" and access a shell inside the instance form the web
# Get access restrictions of an app
az webapp config access-restriction show --name <name> --resource-group <res-group>
# Remove access restrictions
az webapp config access-restriction remove --resource-group <res-group> -n <name> --rule-name <rule-name>
# Get connection strings of a webapp
az webapp config connection-string list --name <name> --resource-group <res-group>
# Get appsettings of an app
az webapp config appsettings list --name <name> --resource-group <res-group>
# Get SCM and FTP credentials
az webapp deployment list-publishing-profiles --name <name> --resource-group <res-group>
# Get configured Auth information
az webapp auth show --name <app-name> --resource-group <res-group>
# Get backups of a webapp
az webapp config backup list --webapp-name <name> --resource-group <res-group>
# Get backups scheduled for a webapp
az webapp config backup show --webapp-name <name> --resource-group <res-group>
# Get snapshots
az webapp config snapshot list --resource-group <res-group> -n <name>
# Restore snapshot
az webapp config snapshot restore -g <res-group> -n <name> --time 2018-12-11T23:34:16.8388367
# Get slots
az webapp deployment slot list --name <AppName> --resource-group <ResourceGroupName> --output table
az webapp show --slot <SlotName> --name <AppName> --resource-group <ResourceGroupName>
# Get traffic-routing
az webapp traffic-routing show --name <AppName> --resource-group <ResourceGroupName>
# Get used container by the app
az webapp config container show --name <name> --resource-group <res-group>
# Get storage account configurations of a webapp (contains access key)
az webapp config storage-account list --name <name> --resource-group <res-group>
# Get configured container (if any) in the webapp, it could contain credentials
az webapp config container show --name <name> --resource-group <res-group>
# Get git URL to access the code
az webapp deployment source config-local-git --resource-group <res-group> -n <name>
# Get Webjobs
az webapp webjob continuous list --resource-group <res-group> --name <app-name>
az webapp webjob triggered list --resource-group <res-group> --name <app-name>
# Read webjobs logs with Azure permissions
az rest --method GET --url "<SCM-URL>/vfs/data/jobs/<continuous | triggered>/rev5/job_log.txt" --resource "https://management.azure.com/"
az rest --method GET --url "https://lol-b5fyaeceh4e9dce0.scm.canadacentral-01.azurewebsites.net/vfs/data/jobs/continuous/rev5/job_log.txt" --resource "https://management.azure.com/"
# Read webjobs logs with SCM credentials
curl "https://windowsapptesting-ckbrg3f0hyc8fkgp.scm.canadacentral-01.azurewebsites.net/vfs/data/jobs/continuous/lala/job_log.txt" \
--user '<username>:<password>' -v
# Get connections of a webapp
az webapp conection list --name <name> --resource-group <res-group>
# Get hybrid-connections of a webapp
az webapp hybrid-connections list --name <name> --resource-group <res-group>
# Get configured SMC users by your account
az webapp deployment user show
## If any user is created, the username should appear in the "publishingUserName" field
वेब ऐप्स बनाने के उदाहरण
स्थानीय से पायथन
यह ट्यूटोरियल https://learn.microsoft.com/en-us/azure/app-service/quickstart-python से आधारित है।
# Clone repository
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart
cd msdocs-python-flask-webapp-quickstart
# Create webapp from this code
az webapp up --runtime PYTHON:3.9 --sku B1 --logs
SCM पोर्टल में लॉगिन करने या FTP के माध्यम से लॉगिन करने पर /wwwroot
में output.tar.gz
नामक संकुचित फ़ाइल देखी जा सकती है, जिसमें वेब ऐप का कोड होता है।
tip
केवल FTP के माध्यम से कनेक्ट करना और फ़ाइल output.tar.gz
को संशोधित करना वेब ऐप द्वारा निष्पादित कोड को बदलने के लिए पर्याप्त नहीं है।
एक हमलावर इस फ़ाइल को डाउनलोड कर सकता है, इसे संशोधित कर सकता है, और इसे फिर से अपलोड कर सकता है ताकि वेब ऐप में मनमाना कोड निष्पादित किया जा सके।
Github से Python
यह ट्यूटोरियल पिछले वाले पर आधारित है लेकिन एक Github रिपॉजिटरी का उपयोग कर रहा है।
- अपने Github खाते में msdocs-python-flask-webapp-quickstart रिपॉजिटरी को फोर्क करें।
- Azure में एक नया Python वेब ऐप बनाएं।
Deployment Center
में स्रोत बदलें, Github के साथ लॉगिन करें, फोर्क की गई रिपॉजिटरी का चयन करें औरSave
पर क्लिक करें।
जैसे पिछले मामले में, SCM पोर्टल में लॉगिन करने या FTP के माध्यम से लॉगिन करने पर /wwwroot
में output.tar.gz
नामक संकुचित फ़ाइल देखी जा सकती है, जिसमें वेब ऐप का कोड होता है।
tip
केवल FTP के माध्यम से कनेक्ट करना और फ़ाइल output.tar.gz
को संशोधित करना और एक डिप्लॉयमेंट को फिर से ट्रिगर करना वेब ऐप द्वारा निष्पादित कोड को बदलने के लिए पर्याप्त नहीं है।
Privilege Escalation
References
- https://learn.microsoft.com/en-in/azure/app-service/overview
- https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans
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 गिटहब रिपोजिटरी में सबमिट करके।