From 73cc7b3b76c622dbcb6a471abc416dacbc585860 Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 3 Jan 2025 19:25:32 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-enumeration-tools.md --- .../azure-security/az-enumeration-tools.md | 42 ++- .../az-app-services-privesc.md | 253 +++++++++++++++++- .../az-services/az-app-service.md | 198 +++++++++----- 3 files changed, 403 insertions(+), 90 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-enumeration-tools.md b/src/pentesting-cloud/azure-security/az-enumeration-tools.md index e72bf1b1c..0741e1648 100644 --- a/src/pentesting-cloud/azure-security/az-enumeration-tools.md +++ b/src/pentesting-cloud/azure-security/az-enumeration-tools.md @@ -1,4 +1,4 @@ -# Az - Enumeration Tools +# Az - Інструменти Перерахунку {{#include ../../banners/hacktricks-training.md}} @@ -6,27 +6,25 @@ > [!TIP] > У Linux вам потрібно буде встановити PowerShell Core: -> -> ```bash -> sudo apt-get update -> sudo apt-get install -y wget apt-transport-https software-properties-common -> -> # Ubuntu 20.04 -> wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -> -> # Оновлення репозиторіїв -> sudo apt-get update -> sudo add-apt-repository universe -> -> # Встановлення та запуск powershell -> sudo apt-get install -y powershell -> pwsh -> -> # Az cli -> curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash -> ``` +```bash +sudo apt-get update +sudo apt-get install -y wget apt-transport-https software-properties-common -## Встановлення PowerShell в MacOS +# Ubuntu 20.04 +wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb + +# Update repos +sudo apt-get update +sudo add-apt-repository universe + +# Install & start powershell +sudo apt-get install -y powershell +pwsh + +# Az cli +curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash +``` +## Встановлення PowerShell на MacOS Інструкції з [**документації**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4): @@ -123,7 +121,7 @@ Get-MgUser -Debug ``` ### ~~**AzureAD Powershell**~~ -Модуль Azure Active Directory (AD), тепер **застарілий**, є частиною Azure PowerShell для управління ресурсами Azure AD. Він надає cmdlet для завдань, таких як управління користувачами, групами та реєстрацією додатків в Entra ID. +Модуль Azure Active Directory (AD), який зараз **застарілий**, є частиною Azure PowerShell для управління ресурсами Azure AD. Він надає cmdlet для завдань, таких як управління користувачами, групами та реєстрацією додатків в Entra ID. > [!TIP] > Це замінено на Microsoft Graph PowerShell diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md index c10b74a55..b61ef8f41 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md @@ -10,16 +10,16 @@ ../az-services/az-app-service.md {{#endref}} -### Microsoft.Web/sites/publish/Action, Microsoft.Web/sites/basicPublishingCredentialsPolicies/read, Microsoft.Web/sites/config/read, Microsoft.Web/sites/read, +### Microsoft.Web/sites/publish/Action, Microsoft.Web/sites/basicPublishingCredentialsPolicies/read, Microsoft.Web/sites/config/read, Microsoft.Web/sites/read -Ці дозволи дозволяють викликати наступні команди для отримання **SSH shell** всередині веб-додатку +Ці дозволи дозволяють отримати **SSH shell** всередині веб-додатку. Вони також дозволяють **налагоджувати** додаток. -- Прямий варіант: +- **SSH в одній команді**: ```bash # Direct option az webapp ssh --name --resource-group ``` -- Створіть тунель, а потім підключіться до SSH: +- **Створіть тунель, а потім підключіться до SSH**: ```bash az webapp create-remote-connection --name --resource-group @@ -32,4 +32,249 @@ az webapp create-remote-connection --name --resource-group ## So from that machine ssh into that port (you might need generate a new ssh session to the jump host) ssh root@127.0.0.1 -p 39895 ``` +- **Налагодження програми**: +1. Встановіть розширення Azure у VScode. +2. Увійдіть у розширення за допомогою облікового запису Azure. +3. Перерахуйте всі служби App у підписці. +4. Виберіть службу App, яку ви хочете налагоджувати, клацніть правою кнопкою миші та виберіть "Почати налагодження". +5. Якщо у програми не ввімкнено налагодження, розширення спробує його ввімкнути, але ваш обліковий запис повинен мати дозвіл `Microsoft.Web/sites/config/write`, щоб це зробити. + +### Отримання облікових даних SCM та увімкнення базової аутентифікації + +Щоб отримати облікові дані SCM, ви можете використовувати наступні **команди та дозволи**: + +- Дозвіл **`Microsoft.Web/sites/publishxml/action`** дозволяє викликати: +```bash +az webapp deployment list-publishing-profiles --name --resource-group +# Example output +[ +{ +"SQLServerDBConnectionString": "", +"controlPanelLink": "https://portal.azure.com", +"databases": null, +"destinationAppUrl": "https://happy-bay-0d8f842ef57843c89185d452c1cede2a.azurewebsites.net", +"hostingProviderForumLink": "", +"msdeploySite": "happy-bay-0d8f842ef57843c89185d452c1cede2a", +"mySQLDBConnectionString": "", +"profileName": "happy-bay-0d8f842ef57843c89185d452c1cede2a - Web Deploy", +"publishMethod": "MSDeploy", +"publishUrl": "happy-bay-0d8f842ef57843c89185d452c1cede2a.scm.azurewebsites.net:443", +"userName": "$happy-bay-0d8f842ef57843c89185d452c1cede2a", +"userPWD": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS", +"webSystem": "WebSites" +}, +{ +"SQLServerDBConnectionString": "", +"controlPanelLink": "https://portal.azure.com", +"databases": null, +"destinationAppUrl": "https://happy-bay-0d8f842ef57843c89185d452c1cede2a.azurewebsites.net", +"ftpPassiveMode": "True", +"hostingProviderForumLink": "", +"mySQLDBConnectionString": "", +"profileName": "happy-bay-0d8f842ef57843c89185d452c1cede2a - FTP", +"publishMethod": "FTP", +"publishUrl": "ftps://waws-prod-yt1-067.ftp.azurewebsites.windows.net/site/wwwroot", +"userName": "happy-bay-0d8f842ef57843c89185d452c1cede2a\\$happy-bay-0d8f842ef57843c89185d452c1cede2a", +"userPWD": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS", +"webSystem": "WebSites" +}, +{ +"SQLServerDBConnectionString": "", +"controlPanelLink": "https://portal.azure.com", +"databases": null, +"destinationAppUrl": "https://happy-bay-0d8f842ef57843c89185d452c1cede2a.azurewebsites.net", +"hostingProviderForumLink": "", +"mySQLDBConnectionString": "", +"profileName": "happy-bay-0d8f842ef57843c89185d452c1cede2a - Zip Deploy", +"publishMethod": "ZipDeploy", +"publishUrl": "happy-bay-0d8f842ef57843c89185d452c1cede2a.scm.azurewebsites.net:443", +"userName": "$happy-bay-0d8f842ef57843c89185d452c1cede2a", +"userPWD": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS", +"webSystem": "WebSites" +} +] +``` +Зверніть увагу, що **ім'я користувача завжди однакове** (за винятком FTP, де на початку додається назва програми), але **пароль однаковий** для всіх. + +Крім того, **SCM URL є `.scm.azurewebsites.net`**. + +- Дозвіл **`Microsoft.Web/sites/config/list/action`** дозволяє викликати: +```bash +az webapp deployment list-publishing-credentials --name --resource-group +# Example output +{ +"id": "/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/carlos_rg_3170/providers/Microsoft.Web/sites/happy-bay-0d8f842ef57843c89185d452c1cede2a/publishingcredentials/$happy-bay-0d8f842ef57843c89185d452c1cede2a", +"kind": null, +"location": "Canada Central", +"name": "happy-bay-0d8f842ef57843c89185d452c1cede2a", +"publishingPassword": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS", +"publishingPasswordHash": null, +"publishingPasswordHashSalt": null, +"publishingUserName": "$happy-bay-0d8f842ef57843c89185d452c1cede2a", +"resourceGroup": "carlos_rg_3170", +"scmUri": "https://$happy-bay-0d8f842ef57843c89185d452c1cede2a:bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS@happy-bay-0d8f842ef57843c89185d452c1cede2a.scm.azurewebsites.net", +"type": "Microsoft.Web/sites/publishingcredentials" +} +``` +Зверніть увагу, що **облікові дані однакові** з попередньою командою. + +- Інший варіант полягає в тому, щоб **встановити свої власні облікові дані** та використовувати їх: +```bash +az webapp deployment user set \ +--user-name hacktricks \ +--password 'W34kP@ssw0rd123!' +``` +Тоді ви можете використовувати ці облікові дані для **доступу до платформ SCM та FTP**. Це також чудовий спосіб підтримувати постійність. + +Пам'ятайте, що для доступу до платформи SCM з **вебу вам потрібно перейти за адресою `/BasicAuth`**. + +> [!WARNING] +> Зверніть увагу, що кожен користувач може налаштувати свої власні облікові дані, викликавши попередню команду, але якщо у користувача недостатньо прав для доступу до SCM або FTP, облікові дані не працюватимуть. + +- Якщо ви бачите, що ці облікові дані **REDACTED**, це тому, що вам **потрібно увімкнути опцію базової аутентифікації SCM**, і для цього вам потрібен другий дозвіл (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):` +```bash +# Enable basic authentication for SCM +az rest --method PUT \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//basicPublishingCredentialsPolicies/scm?api-version=2022-03-01" \ +--body '{ +"properties": { +"allow": true +} +}' + +# Enable basic authentication for FTP +az rest --method PUT \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//basicPublishingCredentialsPolicies/ftp?api-version=2022-03-01" \ +--body '{ +"properties": { +"allow": true +} +} +``` +### Публікація коду за допомогою облікових даних SCM + +Просто маючи дійсні облікові дані SCM, можливо **опублікувати код** в сервісі App. Це можна зробити за допомогою наступної команди. + +Для цього прикладу на python ви можете завантажити репозиторій з https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart, внести будь-які **зміни**, які ви бажаєте, а потім **запакувати його, виконавши: `zip -r app.zip .`**. + +Потім ви можете **опублікувати код** за допомогою наступної команди: +```bash +curl -X POST "/api/publish?type=zip" --data-binary "@./app.zip" -u ':' -H "Content-Type: application/octet-stream" +``` +### Microsoft.Web/sites/publish/Action | SCM облікові дані + +Зазначене дозволи Azure дозволяє виконувати кілька цікавих дій, які також можна виконати з обліковими даними SCM: + +- Читати **Webjobs** журнали: +```bash +# Using Azure credentials +az rest --method GET --url "/vfs/data/jobs//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/" + +# Using SCM username and password: +curl "/vfs/data/jobs/continuous/job_name/job_log.txt" \ +--user ':>' -v +``` +- Читайте вихідний код **Webjobs**: +```bash +# Using SCM username and password: +# Find all the webjobs inside: +curl "/wwwroot/App_Data/jobs/" \ +--user ':' + +# e.g. +curl "https://nodewebapp-agamcvhgg3gkd3hs.scm.canadacentral-01.azurewebsites.net/wwwroot/App_Data/jobs/continuous/job_name/rev.js" \ +--user ':' +``` +- Створити **безперервний Webjob**: +```bash +# Using Azure permissions +az rest \ +--method put \ +--uri "https://windowsapptesting-ckbrg3f0hyc8fkgp.scm.canadacentral-01.azurewebsites.net/api/Continuouswebjobs/reverse_shell" \ +--headers '{"Content-Disposition": "attachment; filename=\"rev.js\""}' \ +--body "@/Users/username/Downloads/rev.js" \ +--resource "https://management.azure.com/" + +# Using SCM credentials +curl -X PUT \ +"/api/Continuouswebjobs/reverse_shell2" \ +-H 'Content-Disposition: attachment; filename=rev.js' \ +--data-binary "@/Users/carlospolop/Downloads/rev.js" \ +--user ':' +``` +### Microsoft.Web/sites/config/list/action + +Ця дозволяє перераховувати **рядки з'єднання** та **налаштування додатка** служби додатків, які можуть містити чутливу інформацію, таку як облікові дані бази даних. +```bash +az webapp config connection-string list --name --resource-group +az webapp config appsettings list --name --resource-group +``` +### Microsoft.Web/sites/write, Microsoft.Web/sites/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action + +Ці дозволи дозволяють **призначити керовану ідентичність** для служби App, тому якщо служба App була раніше скомпрометована, це дозволить зловмиснику призначити нові керовані ідентичності для служби App і **підвищити привілеї** до них. +```bash +az webapp identity assign --name --resource-group --identities /subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/ +``` +### Читання налаштованих облікових даних третьої сторони + +Запустивши наступну команду, можна **прочитати облікові дані третьої сторони**, налаштовані в поточному обліковому записі. Зверніть увагу, що якщо, наприклад, деякі облікові дані 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 " \ +-H "Accept: application/vnd.github.v3+json" \ +https://api.github.com/user/repos + +# Bitbucket – List Repositories +curl -H "Authorization: Bearer " \ +-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 " \ +-H "Content-Type: application/json" \ +--data '{"path": ""}' + +# OneDrive – List Files in Root Folder +curl -H "Authorization: Bearer " \ +-H "Accept: application/json" \ +https://graph.microsoft.com/v1.0/me/drive/root/children +``` +### Оновлення коду програми з джерела + +- Якщо налаштоване джерело є стороннім постачальником, таким як Github, BitBucket або Azure Repository, ви можете **оновити код** служби програми, зламавши вихідний код у репозиторії. +- Якщо програма налаштована з використанням **віддаленого git-репозиторію** (з ім'ям користувача та паролем), можливо отримати **URL та базові облікові дані для авторизації** для клонування та внесення змін за допомогою: +- Використовуючи дозвіл **`Microsoft.Web/sites/sourcecontrols/read`**: `az webapp deployment source show --name --resource-group ` +- Використовуючи дозвіл **`Microsoft.Web/sites/config/list/action`**: +- `az webapp deployment list-publishing-credentials --name --resource-group ` +- `az rest --method POST --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"` +- Якщо програма налаштована на використання **локального git-репозиторію**, можливо **клонувати репозиторій** та **вносити зміни** до нього: +- Використовуючи дозвіл **`Microsoft.Web/sites/sourcecontrols/read`**: Ви можете отримати URL git-репозиторію за допомогою `az webapp deployment source show --name --resource-group `, але це буде те ж саме, що і SCM URL програми з шляхом `/.git` (наприклад, `https://pythonwebapp-audeh9f5fzeyhhed.scm.canadacentral-01.azurewebsites.net:443/pythonwebapp.git`). +- Щоб отримати облікові дані SCM, вам потрібен дозвіл: +- **`Microsoft.Web/sites/publishxml/action`**: Потім виконайте `az webapp deployment list-publishing-profiles --resource-group -n `. +- **`Microsoft.Web/sites/config/list/action`**: Потім виконайте `az webapp deployment list-publishing-credentials --name --resource-group ` + +> [!WARNING] +> Зверніть увагу, що наявність дозволу `Microsoft.Web/sites/config/list/action` та облікових даних SCM завжди дозволяє розгорнути веб-додаток (навіть якщо він був налаштований на використання стороннього постачальника), як зазначено в попередньому розділі. + +> [!WARNING] +> Зверніть увагу, що наявність наведених нижче дозволів також **дозволяє виконати довільний контейнер**, навіть якщо веб-додаток був налаштований інакше. + +### `Microsoft.Web/sites/config/Write`, `Microsoft.Web/sites/config/Read`, `Microsoft.Web/sites/config/list/Action`, `Microsoft.Web/sites/Read` + +Це набір дозволів, який дозволяє **модифікувати контейнер, що використовується** веб-додатком. Зловмисник може зловживати цим, щоб змусити веб-додаток виконувати шкідливий контейнер. +```bash +az webapp config container set \ +--name \ +--resource-group \ +--docker-custom-image-name mcr.microsoft.com/appsvc/staticsite:latest +``` {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-app-service.md b/src/pentesting-cloud/azure-security/az-services/az-app-service.md index 124e4d858..ef1cba8e5 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-app-service.md +++ b/src/pentesting-cloud/azure-security/az-services/az-app-service.md @@ -12,26 +12,77 @@ Azure App Services дозволяє розробникам **створюват - Додатки в стандартних та преміум тарифах працюють на виділених віртуальних машинах > [!WARNING] -> Зверніть увагу, що **жодна** з цих ізоляцій **не запобігає** іншим поширеним **веб-вразливостям** (таким як завантаження файлів або ін'єкції). І якщо використовується **ідентифікатор управління**, він може мати можливість **підвищити привілеї до них**. +> Зверніть увагу, що **жодна** з цих ізоляцій **не запобігає** іншим загальним **веб-вразливостям** (таким як завантаження файлів або ін'єкції). І якщо використовується **ідентифікатор управління**, він може мати можливість **підвищити привілеї до них**. + +Додатки мають деякі цікаві конфігурації: + +- **Always On**: Забезпечує, щоб додаток завжди працював. Якщо не ввімкнено, додаток зупиниться після 20 хвилин бездіяльності і знову запуститься, коли буде отримано запит. +- Це необхідно, якщо у вас є веб-робота, яка повинна працювати безперервно, оскільки веб-робота зупиниться, якщо додаток зупиниться. +- **SSH**: Якщо ввімкнено, користувач з достатніми правами може підключитися до додатку за допомогою SSH. +- **Debugging**: Якщо ввімкнено, користувач з достатніми правами може налагоджувати додаток. Однак це автоматично вимикається кожні 48 годин. +- **Web App + Database**: Веб-консоль дозволяє створити додаток з базою даних. У цьому випадку можна вибрати базу даних для використання (SQLAzure, PostgreSQL, MySQL, MongoDB), а також дозволяє створити Azure Cache для Redis. +- URL, що містить облікові дані для бази даних та Redis, буде зберігатися в **appsettings**. +- **Container**: Можна розгорнути контейнер в App Service, вказавши URL контейнера та облікові дані для доступу до нього. + +## Basic Authentication + +При створенні веб-додатку (а також Azure функції зазвичай) можна вказати, чи хочете ви, щоб була ввімкнена базова аутентифікація. Це в основному **включає SCM та FTP** для програми, тому буде можливість розгорнути програму, використовуючи ці технології.\ +Більше того, щоб підключитися до них, Azure надає **API, який дозволяє отримати ім'я користувача, пароль та URL** для підключення до серверів SCM та FTP. + +Можна підключитися до SCM, використовуючи веб-браузер за адресою `https:///BasicAuth` і перевірити всі файли та розгортання там. + +### Kudu + +Kudu є **движком розгортання та платформою управління для Azure App Service та Function Apps**, що надає можливості розгортання на основі Git, віддаленого налагодження та управління файлами для веб-додатків. Він доступний через URL SCM веб-додатку. + +Зверніть увагу, що версії Kudu, які використовуються App Services та Function Apps, різні, причому версія Function apps значно обмежена. + +Деякі цікаві кінцеві точки, які ви можете знайти в Kudu, це: +- `/DebugConsole`: Консоль, яка дозволяє виконувати команди в середовищі, де працює Kudu. +- Зверніть увагу, що це середовище **не має доступу** до служби метаданих для отримання токенів. +- `/webssh/host`: Веб-клієнт SSH, який дозволяє підключитися всередину контейнера, де працює додаток. +- Це середовище **має доступ до служби метаданих** для отримання токенів від призначених керованих ідентичностей. +- `/Env`: Отримати інформацію про систему, налаштування додатка, змінні середовища, рядки підключення та HTTP заголовки. +- `/wwwroot/`: Коренева директорія веб-додатку. Ви можете завантажити всі файли звідси. + +## Sources + +App Services дозволяють завантажувати код у вигляді zip-файлу за замовчуванням, але також дозволяють підключатися до стороннього сервісу та отримувати код звідти. + +- В даний час підтримувані сторонні джерела - це **Github** та **Bitbucket**. +- Ви можете отримати токени аутентифікації, запустивши `az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"` +- Azure за замовчуванням налаштує **Github Action** для розгортання коду в App Service щоразу, коли код оновлюється. +- Також можливо вказати **віддалений git-репозиторій** (з ім'ям користувача та паролем), щоб отримати код звідти. +- Ви можете отримати облікові дані для віддаленого репозиторію, запустивши `az webapp deployment source show --name --resource-group ` або `az rest --method POST --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"` +- Також можливо використовувати **Azure Repository**. +- Також можливо налаштувати **локальний git-репозиторій**. +- Ви можете отримати URL git-репозиторію за допомогою `az webapp deployment source show --name --resource-group ` і це буде SCM URL додатку. +- Щоб клонувати його, вам знадобляться облікові дані SCM, які ви можете отримати за допомогою `az webapp deployment list-publishing-profiles --resource-group -n ` + + +## Webjobs + +Azure WebJobs є **фоновими завданнями, які працюють в середовищі Azure App Service**. Вони дозволяють розробникам виконувати скрипти або програми разом з їх веб-додатками, що полегшує обробку асинхронних або трудомістких операцій, таких як обробка файлів, обробка даних або заплановані завдання. +Існує 2 типи веб-робіт: +- **Continuous**: Працює безперервно в циклі і запускається, як тільки створюється. Це ідеально підходить для завдань, які потребують постійної обробки. Однак, якщо додаток зупиняється, оскільки Always On вимкнено і він не отримав запит за останні 20 хвилин, веб-робота також зупиниться. +- **Triggered**: Працює за запитом або на основі розкладу. Найкраще підходить для періодичних завдань, таких як пакетні оновлення даних або рутинні обслуговування. + +Webjobs є дуже цікавими з точки зору атакуючого, оскільки їх можна використовувати для **виконання коду** в середовищі та **підвищення привілеїв** до прикріплених керованих ідентичностей. + +Більше того, завжди цікаво перевіряти **журнали**, згенеровані Webjobs, оскільки вони можуть містити **чутливу інформацію**. + +### Slots + +Слоти Azure App Service використовуються для **розгортання різних версій програми** в одному й тому ж App Service. Це дозволяє розробникам тестувати нові функції або зміни в окремому середовищі перед їх розгортанням у виробничому середовищі. + +Більше того, можливо направити **відсоток трафіку** на конкретний слот, що корисно для **A/B тестування** та для цілей бекдору. ### Azure Function Apps В основному **Azure Function apps є підмножиною Azure App Service** в вебі, і якщо ви перейдете до веб-консолі та перелікуєте всі служби додатків або виконаєте `az webapp list` в az cli, ви зможете **побачити, що функціональні додатки також тут перераховані**. -Насправді деякі з **функцій, пов'язаних із безпекою**, які використовують служби додатків (`webapp` в az cli), **також використовуються функціональними додатками**. +Насправді деякі з **функцій безпеки**, які використовують служби додатків (`webapp` в az cli), **також використовуються функціональними додатками**. -## Basic Authentication - -При створенні веб-додатку (і зазвичай Azure функції) можливо вказати, чи хочете ви, щоб була увімкнена базова аутентифікація. Це в основному **включає SCM та FTP** для програми, тому буде можливість розгорнути програму, використовуючи ці технології.\ -Більше того, для підключення до них Azure надає **API, який дозволяє отримати ім'я користувача, пароль та URL** для підключення до серверів SCM та FTP. - -- Аутентифікація: az webapp auth show --name lol --resource-group lol_group - -SSH - -Always On - -Debugging ### Enumeration @@ -40,9 +91,10 @@ Debugging ```bash # List webapps az webapp list - ## Less information -az webapp list --query "[].{hostName: defaultHostName, state: state, name: name, resourcegroup: resourceGroup}" +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 --resource-group @@ -51,18 +103,24 @@ az webapp show --name --resource-group az webapp list-instances --name --resource-group ## If you have enough perm you can go to the "consoleUrl" and access a shell inside the instance form the web -# Get configured Auth information -az webapp auth show --name --resource-group - # Get access restrictions of an app az webapp config access-restriction show --name --resource-group # Remove access restrictions az webapp config access-restriction remove --resource-group -n --rule-name +# Get connection strings of a webapp +az webapp config connection-string list --name --resource-group + # Get appsettings of an app az webapp config appsettings list --name --resource-group +# Get SCM and FTP credentials +az webapp deployment list-publishing-profiles --name --resource-group + +# Get configured Auth information +az webapp auth show --name --resource-group + # Get backups of a webapp az webapp config backup list --webapp-name --resource-group @@ -75,61 +133,39 @@ az webapp config snapshot list --resource-group -n # Restore snapshot az webapp config snapshot restore -g -n --time 2018-12-11T23:34:16.8388367 -# Get connection strings of a webapp -az webapp config connection-string list --name --resource-group +# Get slots +az webapp deployment slot list --name --resource-group --output table +az webapp show --slot --name --resource-group + +# Get traffic-routing +az webapp traffic-routing show --name --resource-group # Get used container by the app az webapp config container show --name --resource-group # Get storage account configurations of a webapp -az webapp config storage-account list --name --resource-gl_group +az webapp config storage-account list --name --resource-group +# Get configured container (if any) in the webapp, it could contain credentials +az webapp config container show --name --resource-group +# Get Webjobs +az webapp webjob continuous list --resource-group --name +az webapp webjob triggered list --resource-group --name +# Read webjobs logs with Azure permissions +az rest --method GET --url "/vfs/data/jobs//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/" -# List all the functions -az functionapp list +# Read webjobs logs with SCM credentials +curl "https://windowsapptesting-ckbrg3f0hyc8fkgp.scm.canadacentral-01.azurewebsites.net/vfs/data/jobs/continuous/lala/job_log.txt" \ +--user ':' -v -# Get info of 1 funciton (although in the list you already get this info) -az functionapp show --name --resource-group -## If "linuxFxVersion" has something like: "DOCKER|mcr.microsoft.com/..." -## This is using a container +# Get connections of a webapp +az webapp conection list --name --resource-group -# Get details about the source of the function code -az functionapp deployment source show \ ---name \ ---resource-group -## If error like "This is currently not supported." -## Then, this is probalby using a container - -# Get more info if a container is being used -az functionapp config container show \ ---name \ ---resource-group - -# Get settings (and privesc to the sorage account) -az functionapp config appsettings list --name --resource-group - -# Check if a domain was assigned to a function app -az functionapp config hostname list --webapp-name --resource-group - -# Get SSL certificates -az functionapp config ssl list --resource-group - -# Get network restrictions -az functionapp config access-restriction show --name --resource-group - -# Get more info about a function (invoke_url_template is the URL to invoke and script_href allows to see the code) -az rest --method GET \ ---url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions?api-version=2024-04-01" - -# Get source code with Master Key of the function -curl "?code=" -## Python example -curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/function_app.py?code=" -v - -# Get source code -az rest --url "https://management.azure.com//resourceGroups//providers/Microsoft.Web/sites//hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01" +# Get hybrid-connections of a webapp +az webapp hybrid-connections list --name --resource-group ``` {{#endtab }} @@ -196,7 +232,41 @@ git clone 'https://:@name.scm.azurewebsites.net/repo-name.gi ../az-privilege-escalation/az-app-services-privesc.md {{#endref}} -## Посилання +## Приклади для створення веб-додатків + +### Python з локального + +Цей посібник оснований на [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` недостатньо, щоб змінити код, що виконується веб-додатком. + +**Зловмисник може завантажити цей файл, змінити його та знову завантажити, щоб виконати довільний код у веб-додатку.** + +### Python з Github + +Цей посібник базується на попередньому, але використовує репозиторій Github. + +1. Зробіть форк репозиторію msdocs-python-flask-webapp-quickstart у вашому обліковому записі Github. +2. Створіть новий веб-додаток на Python в Azure. +3. У `Deployment Center` змініть джерело, увійдіть з Github, виберіть форкнутий репозиторій і натисніть `Save`. + +Як і в попередньому випадку, увійшовши в SCM портал або підключившись через FTP, можна побачити в `/wwwroot` стиснутий файл `output.tar.gz`, який містить код веб-додатку. + +> [!TIP] +> Просто підключення через FTP та модифікація файлу `output.tar.gz` і повторне ініціювання розгортання недостатньо, щоб змінити код, що виконується веб-додатком. + + +## References - [https://learn.microsoft.com/en-in/azure/app-service/overview](https://learn.microsoft.com/en-in/azure/app-service/overview)