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 b61ef8f41..0c777e015 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 @@ -23,7 +23,7 @@ az webapp ssh --name --resource-group ```bash az webapp create-remote-connection --name --resource-group -## If successfull you will get a message such as: +## If successful you will get a message such as: #Verifying if app is running.... #App is running. Trying to establish tunnel connection... #Opening tunnel on port: 39895 @@ -34,7 +34,7 @@ ssh root@127.0.0.1 -p 39895 ``` - **Налагодження програми**: 1. Встановіть розширення Azure у VScode. -2. Увійдіть у розширення за допомогою облікового запису Azure. +2. Увійдіть у розширення з обліковим записом Azure. 3. Перерахуйте всі служби App у підписці. 4. Виберіть службу App, яку ви хочете налагоджувати, клацніть правою кнопкою миші та виберіть "Почати налагодження". 5. Якщо у програми не ввімкнено налагодження, розширення спробує його ввімкнути, але ваш обліковий запис повинен мати дозвіл `Microsoft.Web/sites/config/write`, щоб це зробити. @@ -94,7 +94,7 @@ az webapp deployment list-publishing-profiles --name --resource-group } ] ``` -Зверніть увагу, що **ім'я користувача завжди однакове** (за винятком FTP, де на початку додається назва програми), але **пароль однаковий** для всіх. +Зверніть увагу, що **ім'я користувача завжди однакове** (за винятком FTP, яке додає назву програми на початку), але **пароль однаковий** для всіх. Крім того, **SCM URL є `.scm.azurewebsites.net`**. @@ -118,7 +118,7 @@ az webapp deployment list-publishing-credentials --name --resource-gr ``` Зверніть увагу, що **облікові дані однакові** з попередньою командою. -- Інший варіант полягає в тому, щоб **встановити свої власні облікові дані** та використовувати їх: +- Інший варіант - **встановити свої власні облікові дані** та використовувати їх: ```bash az webapp deployment user set \ --user-name hacktricks \ @@ -131,7 +131,7 @@ az webapp deployment user set \ > [!WARNING] > Зверніть увагу, що кожен користувач може налаштувати свої власні облікові дані, викликавши попередню команду, але якщо у користувача недостатньо прав для доступу до SCM або FTP, облікові дані не працюватимуть. -- Якщо ви бачите, що ці облікові дані **REDACTED**, це тому, що вам **потрібно увімкнути опцію базової аутентифікації SCM**, і для цього вам потрібен другий дозвіл (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):` +- Якщо ви бачите, що ці облікові дані **REDACTED**, це тому, що вам **потрібно увімкнути опцію базової аутентифікації SCM**, і для цього вам потрібен другий дозвіл (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`): ```bash # Enable basic authentication for SCM az rest --method PUT \ @@ -149,21 +149,21 @@ az rest --method PUT \ "properties": { "allow": true } -} +}' ``` ### Публікація коду за допомогою облікових даних SCM -Просто маючи дійсні облікові дані SCM, можливо **опублікувати код** в сервісі App. Це можна зробити за допомогою наступної команди. +Просто маючи дійсні облікові дані 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 облікові дані +### Webjobs: Microsoft.Web/sites/publish/Action | SCM credentials -Зазначене дозволи Azure дозволяє виконувати кілька цікавих дій, які також можна виконати з обліковими даними SCM: +Зазначене дозволення Azure дозволяє виконувати кілька цікавих дій, які також можна виконати з обліковими даними SCM: - Читати **Webjobs** журнали: ```bash @@ -173,9 +173,9 @@ az rest --method GET --url "https://lol-b5fyaeceh4e9dce0.scm.canadacentral-01.az # Using SCM username and password: curl "/vfs/data/jobs/continuous/job_name/job_log.txt" \ ---user ':>' -v +--user ':' -v ``` -- Читайте вихідний код **Webjobs**: +- Читайте **Webjobs** вихідний код: ```bash # Using SCM username and password: # Find all the webjobs inside: @@ -203,22 +203,22 @@ curl -X PUT \ --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/ ``` +### Microsoft.Web/sites/config/list/action + +Ця дозволяє перераховувати **рядки з'єднання** та **appsettings** служби додатків, які можуть містити чутливу інформацію, таку як облікові дані бази даних. +```bash +az webapp config connection-string list --name --resource-group +az webapp config appsettings list --name --resource-group +``` ### Читання налаштованих облікових даних третьої сторони -Запустивши наступну команду, можна **прочитати облікові дані третьої сторони**, налаштовані в поточному обліковому записі. Зверніть увагу, що якщо, наприклад, деякі облікові дані Github налаштовані в іншому користувачеві, ви не зможете отримати доступ до токена з іншого. +Запустивши наступну команду, можна **прочитати облікові дані третьої сторони**, налаштовані в поточному обліковому записі. Зверніть увагу, що якщо, наприклад, деякі облікові дані Github налаштовані для іншого користувача, ви не зможете отримати доступ до токена з іншого. ```bash az rest --method GET \ --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01" @@ -250,14 +250,14 @@ https://graph.microsoft.com/v1.0/me/drive/root/children ``` ### Оновлення коду програми з джерела -- Якщо налаштоване джерело є стороннім постачальником, таким як Github, BitBucket або Azure Repository, ви можете **оновити код** служби програми, зламавши вихідний код у репозиторії. +- Якщо налаштоване джерело є стороннім постачальником, таким як 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`). +- Використовуючи дозвіл **`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 ` diff --git a/src/pentesting-cloud/azure-security/az-services/az-app-services.md b/src/pentesting-cloud/azure-security/az-services/az-app-services.md index f78b5a502..97a8f2d1c 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-app-services.md +++ b/src/pentesting-cloud/azure-security/az-services/az-app-services.md @@ -18,17 +18,17 @@ Azure App Services дозволяє розробникам **створюват Додатки мають деякі цікаві конфігурації: - **Always On**: Забезпечує, щоб додаток завжди працював. Якщо не ввімкнено, додаток зупиниться після 20 хвилин бездіяльності і знову запуститься, коли буде отримано запит. -- Це необхідно, якщо у вас є вебробота, яка повинна працювати безперервно, оскільки вебробота зупиниться, якщо додаток зупиниться. +- Це необхідно, якщо у вас є веб-робота, яка повинна працювати безперервно, оскільки веб-робота зупиниться, якщо додаток зупиниться. - **SSH**: Якщо ввімкнено, користувач з достатніми правами може підключитися до додатка за допомогою SSH. - **Debugging**: Якщо ввімкнено, користувач з достатніми правами може налагоджувати додаток. Однак це автоматично вимикається кожні 48 годин. - **Веб-додаток + База даних**: Веб-консоль дозволяє створити додаток з базою даних. У цьому випадку можна вибрати базу даних для використання (SQLAzure, PostgreSQL, MySQL, MongoDB), а також створити Azure Cache для Redis. - URL, що містить облікові дані для бази даних та Redis, буде зберігатися в **appsettings**. - **Контейнер**: Можна розгорнути контейнер в App Service, вказавши URL контейнера та облікові дані для доступу до нього. -- **Монтажі**: Можна створити 5 монтажів з облікових записів зберігання, які є Azure Blob (тільки для читання) або Azure Files. Конфігурація зберігатиме ключ доступу над обліковим записом зберігання. +- **Монтажі**: Можна створити 5 монтажів з облікових записів зберігання, які є Azure Blob (тільки для читання) або Azure Files. Конфігурація зберігатиме ключ доступу в обліковому записі зберігання. ## Basic Authentication -При створенні веб-додатка (а також Azure функції зазвичай) можна вказати, чи хочете ви, щоб **базова аутентифікація була ввімкнена** (за замовчуванням вимкнена). Це в основному **включає SCM (менеджер контролю версій) та FTP (протокол передачі файлів)** для програми, тому буде можливим розгортати програму, використовуючи ці технології. +При створенні веб-додатка (а також Azure функції зазвичай) можна вказати, чи хочете ви, щоб **базова аутентифікація була ввімкнена** (за замовчуванням вимкнена). Це в основному **включає SCM (менеджер контролю версій) та FTP (протокол передачі файлів)** для програми, тому буде можливим розгорнути програму, використовуючи ці технології. Для доступу до серверів SCM та FTP потрібні **ім'я користувача та пароль**. Тому Azure надає деякі **API для отримання URL** до цих платформ та облікових даних. @@ -49,7 +49,7 @@ Kudu - це платформа, яка **керує як SCM, так і веб- - Зверніть увагу, що це середовище **не має доступу** до служби метаданих для отримання токенів. - `/webssh/host`: Веб-клієнт SSH, який дозволяє підключитися всередину контейнера, де працює додаток. - Це середовище **має доступ до служби метаданих** для отримання токенів від призначених керованих ідентичностей. -- `/Env`: Отримати інформацію про систему, налаштування додатка, змінні середовища, рядки підключення та HTTP заголовки. +- `/Env`: Отримати інформацію про систему, налаштування програми, змінні середовища, рядки підключення та HTTP заголовки. - `/wwwroot/`: Коренева директорія веб-додатка. Ви можете завантажити всі файли звідси. Більше того, Kudu раніше був з відкритим кодом на [https://github.com/projectkudu/kudu](https://github.com/projectkudu/kudu), але проект був застарілий, і порівнюючи поведінку поточного Kudu в Azure з старим, можна побачити, що **декілька речей вже змінилися**. @@ -58,7 +58,7 @@ Kudu - це платформа, яка **керує як SCM, так і веб- App Services дозволяють завантажувати код у вигляді zip-файлу за замовчуванням, але також дозволяють підключатися до стороннього сервісу та отримувати код звідти. -- Наразі підтримувані сторонні джерела - це **Github** та **Bitbucket**. +- В даний час підтримувані сторонні джерела - це **Github** та **Bitbucket**. - Ви можете отримати токени аутентифікації, запустивши `az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"` - Azure за замовчуванням налаштує **Github Action** для розгортання коду в App Service щоразу, коли код оновлюється. - Також можливо вказати **віддалений git-репозиторій** (з ім'ям користувача та паролем), щоб отримати код звідти. @@ -71,13 +71,13 @@ App Services дозволяють завантажувати код у вигл ## Webjobs Azure WebJobs - це **фонові завдання, які працюють у середовищі Azure App Service**. Вони дозволяють розробникам виконувати скрипти або програми разом з їх веб-додатками, що полегшує обробку асинхронних або трудомістких операцій, таких як обробка файлів, обробка даних або заплановані завдання. -Існує 2 типи вебробіт: -- **Безперервні**: Працюють безперервно в циклі і запускаються, щойно створюються. Вони ідеальні для завдань, які потребують постійної обробки. Однак, якщо додаток перестане працювати, оскільки Always On вимкнено і не отримав запит за останні 20 хвилин, вебробота також зупиниться. +Існує 2 типи веб-робіт: +- **Безперервні**: Працюють безперервно в циклі і запускаються, як тільки створюються. Вони ідеальні для завдань, які потребують постійної обробки. Однак, якщо додаток перестане працювати, оскільки Always On вимкнено і не отримав запит за останні 20 хвилин, веб-робота також зупиниться. - **Запущені**: Працюють за запитом або за розкладом. Вони найкраще підходять для періодичних завдань, таких як пакетні оновлення даних або рутинні обслуговування. -Веброботи є дуже цікавими з точки зору атакуючого, оскільки їх можна використовувати для **виконання коду** в середовищі та **підвищення привілеїв** до прикріплених керованих ідентичностей. +Webjobs є дуже цікавими з точки зору атакуючого, оскільки їх можна використовувати для **виконання коду** в середовищі та **підвищення привілеїв** до прикріплених керованих ідентичностей. -Більше того, завжди цікаво перевіряти **журнали**, згенеровані веброботами, оскільки вони можуть містити **чутливу інформацію**. +Більше того, завжди цікаво перевіряти **журнали**, згенеровані Webjobs, оскільки вони можуть містити **чутливу інформацію**. ## Slots @@ -87,9 +87,9 @@ Azure WebJobs - це **фонові завдання, які працюють у ## Azure Function Apps -В основному **Azure Function apps є підмножиною Azure App Service** у веб-консолі, і якщо ви перейдете до веб-консолі та перелікуєте всі служби додатків або виконаєте `az webapp list` в az cli, ви зможете **побачити, що функціональні додатки також перераховані там**. +В основному **Azure Function apps є підмножиною Azure App Service** у веб-консолі, і якщо ви перейдете до веб-консолі та перелікуєте всі служби додатків або виконаєте `az webapp list` в az cli, ви зможете **побачити, що функціональні програми також перераховані там**. -Отже, обидві служби насправді мають в основному **однакові конфігурації, функції та опції в az cli**, хоча вони можуть налаштовувати їх трохи по-різному (наприклад, значення за замовчуванням appsettings або використання облікового запису зберігання в функціональних додатках). +Отже, обидві служби насправді мають в основному **однакові конфігурації, функції та опції в az cli**, хоча вони можуть налаштовувати їх трохи по-різному (наприклад, значення за замовчуванням appsettings або використання облікового запису зберігання в функціональних програмах). ## Enumeration @@ -156,6 +156,9 @@ 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 git URL to access the code +az webapp deployment source config-local-git --resource-group -n + # Get Webjobs az webapp webjob continuous list --resource-group --name az webapp webjob triggered list --resource-group --name @@ -217,24 +220,7 @@ done {{#endtab }} {{#endtabs }} -#### Отримати облікові дані та отримати доступ до коду веб-додатку -```bash -# Get connection strings that could contain credentials (with DBs for example) -az webapp config connection-string list --name --resource-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 -n - - -# Get git URL to access the code -az webapp deployment source config-local-git --resource-group -n - -# Access/Modify the code via git -git clone 'https://:@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}} @@ -265,7 +251,7 @@ az webapp up --runtime PYTHON:3.9 --sku B1 --logs 1. Форкніть репозиторій msdocs-python-flask-webapp-quickstart у вашому обліковому записі Github. 2. Створіть новий веб-додаток на Python в Azure. -3. У `Deployment Center` змініть джерело, увійдіть з Github, виберіть форкнутий репозиторій і натисніть `Save`. +3. У `Deployment Center` змініть джерело, увійдіть за допомогою Github, виберіть форкнутий репозиторій і натисніть `Save`. Як і в попередньому випадку, увійшовши в SCM портал або через FTP, можна побачити в `/wwwroot` стиснутий файл `output.tar.gz`, який містить код веб-додатку.