mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-13 13:26:31 -08:00
Translated ['src/pentesting-cloud/azure-security/az-enumeration-tools.md
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 <name> --resource-group <res-group>
|
||||
```
|
||||
- Створіть тунель, а потім підключіться до SSH:
|
||||
- **Створіть тунель, а потім підключіться до SSH**:
|
||||
```bash
|
||||
az webapp create-remote-connection --name <name> --resource-group <res-group>
|
||||
|
||||
@@ -32,4 +32,249 @@ az webapp create-remote-connection --name <name> --resource-group <res-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 <app-name> --resource-group <res-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 є `<app-name>.scm.azurewebsites.net`**.
|
||||
|
||||
- Дозвіл **`Microsoft.Web/sites/config/list/action`** дозволяє викликати:
|
||||
```bash
|
||||
az webapp deployment list-publishing-credentials --name <app-name> --resource-group <res-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 з **вебу вам потрібно перейти за адресою `<SCM-URL>/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/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/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/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/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 "<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 облікові дані
|
||||
|
||||
Зазначене дозволи Azure дозволяє виконувати кілька цікавих дій, які також можна виконати з обліковими даними SCM:
|
||||
|
||||
- Читати **Webjobs** журнали:
|
||||
```bash
|
||||
# Using Azure credentials
|
||||
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/"
|
||||
|
||||
# Using SCM username and password:
|
||||
curl "<SCM-URL>/vfs/data/jobs/continuous/job_name/job_log.txt" \
|
||||
--user '<username>:<password>>' -v
|
||||
```
|
||||
- Читайте вихідний код **Webjobs**:
|
||||
```bash
|
||||
# Using SCM username and password:
|
||||
# Find all the webjobs inside:
|
||||
curl "<SCM-URL>/wwwroot/App_Data/jobs/" \
|
||||
--user '<username>:<password>'
|
||||
|
||||
# e.g.
|
||||
curl "https://nodewebapp-agamcvhgg3gkd3hs.scm.canadacentral-01.azurewebsites.net/wwwroot/App_Data/jobs/continuous/job_name/rev.js" \
|
||||
--user '<username>:<password>'
|
||||
```
|
||||
- Створити **безперервний 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 \
|
||||
"<SCM-URL>/api/Continuouswebjobs/reverse_shell2" \
|
||||
-H 'Content-Disposition: attachment; filename=rev.js' \
|
||||
--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>
|
||||
```
|
||||
### Читання налаштованих облікових даних третьої сторони
|
||||
|
||||
Запустивши наступну команду, можна **прочитати облікові дані третьої сторони**, налаштовані в поточному обліковому записі. Зверніть увагу, що якщо, наприклад, деякі облікові дані 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
|
||||
```
|
||||
### Оновлення коду програми з джерела
|
||||
|
||||
- Якщо налаштоване джерело є стороннім постачальником, таким як 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`).
|
||||
- Щоб отримати облікові дані 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>`
|
||||
|
||||
> [!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 <app-name> \
|
||||
--resource-group <res-group> \
|
||||
--docker-custom-image-name mcr.microsoft.com/appsvc/staticsite:latest
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.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://<SMC-URL>/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 <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-репозиторій**.
|
||||
- Ви можете отримати URL git-репозиторію за допомогою `az webapp deployment source show --name <app-name> --resource-group <res-group>` і це буде SCM URL додатку.
|
||||
- Щоб клонувати його, вам знадобляться облікові дані SCM, які ви можете отримати за допомогою `az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>`
|
||||
|
||||
|
||||
## 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 <name> --resource-group <res-group>
|
||||
@@ -51,18 +103,24 @@ az webapp show --name <name> --resource-group <res-group>
|
||||
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 configured Auth information
|
||||
az webapp auth show --name <app-name> --resource-group <res-group>
|
||||
|
||||
# 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>
|
||||
|
||||
@@ -75,61 +133,39 @@ 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 connection strings of a webapp
|
||||
az webapp config connection-string list --name <name> --resource-group <res-group>
|
||||
# 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-gl_group
|
||||
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/"
|
||||
|
||||
# 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 '<username>:<password>' -v
|
||||
|
||||
# Get info of 1 funciton (although in the list you already get this info)
|
||||
az functionapp show --name <app-name> --resource-group <res-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 <name> --resource-group <res-group>
|
||||
|
||||
# Get details about the source of the function code
|
||||
az functionapp deployment source show \
|
||||
--name <app-name> \
|
||||
--resource-group <res-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 <name> \
|
||||
--resource-group <res-group>
|
||||
|
||||
# Get settings (and privesc to the sorage account)
|
||||
az functionapp config appsettings list --name <app-name> --resource-group <res-group>
|
||||
|
||||
# Check if a domain was assigned to a function app
|
||||
az functionapp config hostname list --webapp-name <app-name> --resource-group <res-group>
|
||||
|
||||
# Get SSL certificates
|
||||
az functionapp config ssl list --resource-group <res-group>
|
||||
|
||||
# Get network restrictions
|
||||
az functionapp config access-restriction show --name <app-name> --resource-group <res-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/<subscription>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions?api-version=2024-04-01"
|
||||
|
||||
# Get source code with Master Key of the function
|
||||
curl "<script_href>?code=<master-key>"
|
||||
## Python example
|
||||
curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/function_app.py?code=<master-key>" -v
|
||||
|
||||
# Get source code
|
||||
az rest --url "https://management.azure.com/<subscription>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/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 <name> --resource-group <res-group>
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
@@ -196,7 +232,41 @@ git clone 'https://<username>:<password>@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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user