Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation

This commit is contained in:
Translator
2025-01-04 03:48:35 +00:00
parent 093ada742a
commit 0b0ec41159
2 changed files with 37 additions and 51 deletions

View File

@@ -23,7 +23,7 @@ az webapp ssh --name <name> --resource-group <res-group>
```bash
az webapp create-remote-connection --name <name> --resource-group <res-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 <app-name> --resource-group
}
]
```
Зверніть увагу, що **ім'я користувача завжди однакове** (за винятком FTP, де на початку додається назва програми), але **пароль однаковий** для всіх.
Зверніть увагу, що **ім'я користувача завжди однакове** (за винятком FTP, яке додає назву програми на початку), але **пароль однаковий** для всіх.
Крім того, **SCM URL є `<app-name>.scm.azurewebsites.net`**.
@@ -118,7 +118,7 @@ az webapp deployment list-publishing-credentials --name <app-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 "<SMC-URL>/api/publish?type=zip" --data-binary "@./app.zip" -u '<username>:<password>' -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 "<SCM-URL>/vfs/data/jobs/continuous/job_name/job_log.txt" \
--user '<username>:<password>>' -v
--user '<username>:<password>' -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 '<username>:<password>'
```
### Microsoft.Web/sites/config/list/action
Ця дозволяє перераховувати **рядки з'єднання** та **налаштування додатка** служби додатків, які можуть містити чутливу інформацію, таку як облікові дані бази даних.
```bash
az webapp config connection-string list --name <name> --resource-group <res-group>
az webapp config appsettings list --name <name> --resource-group <res-group>
```
### Microsoft.Web/sites/write, Microsoft.Web/sites/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
Ці дозволи дозволяють **призначити керовану ідентичність** для служби App, тому якщо служба App була раніше скомпрометована, це дозволить зловмиснику призначити нові керовані ідентичності для служби App і **підвищити привілеї** до них.
```bash
az webapp identity assign --name <app-name> --resource-group <res-group> --identities /subscriptions/<subcripttion-id>/resourceGroups/<res_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>
```
### Microsoft.Web/sites/config/list/action
Ця дозволяє перераховувати **рядки з'єднання** та **appsettings** служби додатків, які можуть містити чутливу інформацію, таку як облікові дані бази даних.
```bash
az webapp config connection-string list --name <name> --resource-group <res-group>
az webapp config appsettings list --name <name> --resource-group <res-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 <app-name> --resource-group <res-group>`
- Використовуючи дозвіл **`Microsoft.Web/sites/config/list/action`**:
- `az webapp deployment list-publishing-credentials --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"`
- Якщо програма налаштована на використання **локального git-репозиторію**, можливо **клонувати репозиторій** та **вносити зміни** до нього:
- Використовуючи дозвіл **`Microsoft.Web/sites/sourcecontrols/read`**: Ви можете отримати URL git-репозиторію за допомогою `az webapp deployment source show --name <app-name> --resource-group <res-group>`, але це буде те ж саме, що і SCM URL програми з шляхом `/<app-name>.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 <app-name> --resource-group <res-group>`, але він буде таким же, як SCM URL програми з шляхом `/<app-name>.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 <res-group> -n <name>`.
- **`Microsoft.Web/sites/config/list/action`**: Потім виконайте `az webapp deployment list-publishing-credentials --name <name> --resource-group <res-group>`

View File

@@ -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 <name> --resource-group <res-group>
# Get configured container (if any) in the webapp, it could contain credentials
az webapp config container show --name <name> --resource-group <res-group>
# Get git URL to access the code
az webapp deployment source config-local-git --resource-group <res-group> -n <name>
# Get Webjobs
az webapp webjob continuous list --resource-group <res-group> --name <app-name>
az webapp webjob triggered list --resource-group <res-group> --name <app-name>
@@ -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 <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}}
@@ -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`, який містить код веб-додатку.