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 5bb02d0e2..f77832761 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-azuread.md +++ b/src/pentesting-cloud/azure-security/az-services/az-azuread.md @@ -4,7 +4,7 @@ ## Osnovne informacije -Azure Active Directory (Azure AD) služi kao Microsoftova usluga zasnovana na oblaku za upravljanje identitetom i pristupom. Ona je ključna za omogućavanje zaposlenima da se prijave i dobiju pristup resursima, kako unutar tako i van organizacije, obuhvatajući Microsoft 365, Azure portal i brojne druge SaaS aplikacije. Dizajn Azure AD se fokusira na pružanje osnovnih usluga identiteta, posebno uključujući **autentifikaciju, autorizaciju i upravljanje korisnicima**. +Azure Active Directory (Azure AD) služi kao Microsoftova usluga zasnovana na oblaku za upravljanje identitetom i pristupom. Ona je ključna za omogućavanje zaposlenima da se prijave i dobiju pristup resursima, kako unutar tako i van organizacije, uključujući Microsoft 365, Azure portal i brojne druge SaaS aplikacije. Dizajn Azure AD se fokusira na pružanje osnovnih usluga identiteta, posebno uključujući **autentifikaciju, autorizaciju i upravljanje korisnicima**. Ključne karakteristike Azure AD uključuju **višefaktorsku autentifikaciju** i **uslovni pristup**, uz besprekornu integraciju sa drugim Microsoftovim bezbednosnim uslugama. Ove karakteristike značajno povećavaju bezbednost identiteta korisnika i omogućavaju organizacijama da efikasno implementiraju i sprovode svoje politike pristupa. Kao osnovna komponenta Microsoftovog ekosistema usluga u oblaku, Azure AD je ključan za upravljanje identitetima korisnika zasnovano na oblaku. @@ -140,6 +140,34 @@ curl "$IDENTITY_ENDPOINT?resource=https://management.azure.com&api-version=2017- curl "$IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01" -H secret:$IDENTITY_HEADER ``` {{#endtab }} +{{#tab name="MS Graph" }} +```bash +Get-MgTenantRelationshipDelegatedAdminCustomer +# Install the Microsoft Graph PowerShell module if not already installed +Install-Module Microsoft.Graph -Scope CurrentUser + +# Import the module +Import-Module Microsoft.Graph + +# Login to Microsoft Graph +Connect-MgGraph -Scopes "User.Read.All", "Group.Read.All", "Directory.Read.All" + +# Enumerate available commands in Microsoft Graph PowerShell +Get-Command -Module Microsoft.Graph* + +# Example: List users +Get-MgUser -All + +# Example: List groups +Get-MgGroup -All + +# Example: Get roles assigned to a user +Get-MgUserAppRoleAssignment -UserId + +# Disconnect from Microsoft Graph +Disconnect-MgGraph +``` +{{#endtab }} {{#tab name="Azure AD" }} ```bash @@ -156,11 +184,11 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token {{#endtab }} {{#endtabs }} -Kada se **prijavite** putem **CLI** u Azure sa bilo kojim programom, koristite **Azure aplikaciju** iz **tenanta** koji pripada **Microsoftu**. Ove aplikacije, poput onih koje možete kreirati u svom nalogu, **imaju klijent id**. **Nećete moći da vidite sve njih** u **listama dozvoljenih aplikacija** koje možete videti u konzoli, **ali su podrazumevano dozvoljene**. +Kada se **prijavite** putem **CLI** u Azure sa bilo kojim programom, koristite **Azure aplikaciju** iz **tenanta** koji pripada **Microsoftu**. Ove aplikacije, poput onih koje možete kreirati u svom nalogu, **imaju klijent ID**. **Nećete moći da vidite sve njih** u **listama dozvoljenih aplikacija** koje možete videti u konzoli, **ali su po defaultu dozvoljene**. -Na primer, **powershell skripta** koja **autentifikuje** koristi aplikaciju sa klijent id **`1950a258-227b-4e31-a9cf-717495945fc2`**. Čak i ako aplikacija ne pojavljuje u konzoli, sysadmin bi mogao da **blokira tu aplikaciju** kako korisnici ne bi mogli da pristupaju koristeći alate koji se povezuju putem te aplikacije. +Na primer, **powershell skripta** koja **autentifikuje** koristi aplikaciju sa klijent ID **`1950a258-227b-4e31-a9cf-717495945fc2`**. Čak i ako aplikacija ne pojavljuje u konzoli, sysadmin može **blokirati tu aplikaciju** tako da korisnici ne mogu pristupiti koristeći alate koji se povezuju putem te aplikacije. -Međutim, postoje **drugi klijent-ids** aplikacija koje **će vam omogućiti da se povežete na Azure**: +Međutim, postoje **drugi klijent-IDs** aplikacija koje **će vam omogućiti da se povežete na Azure**: ```bash # The important part is the ClientId, which identifies the application to login inside Azure @@ -248,6 +276,34 @@ curl -X GET "https://graph.microsoft.com/beta/roleManagement/directory/roleDefin ``` {{#endtab }} +{{#tab name="MS Graph" }} +```bash +# Enumerate users using Microsoft Graph PowerShell +Get-MgUser -All + +# Get user details +Get-MgUser -UserId "test@corp.onmicrosoft.com" | Format-List * + +# Search "admin" users +Get-MgUser -All | Where-Object { $_.DisplayName -like "*test*" } | Select-Object DisplayName + +# Search attributes containing the word "password" +Get-MgUser -All | Where-Object { $_.AdditionalProperties.PSObject.Properties.Name -contains "password" } + +# All users from Entra ID +Get-MgUser -Filter "startswith(userPrincipalName, 't')" -All | Select-Object DisplayName, UserPrincipalName + +# Get groups where the user is a member +Get-MgUserMemberOf -UserId + +# Get roles assigned to the user in Entra ID +Get-MgUserAppRoleAssignment -UserId + +# List available commands in Microsoft Graph PowerShell +Get-Command -Module Microsoft.Graph.Users +``` +{{#endtab }} + {{#tab name="Azure AD" }} ```bash # Enumerate Users @@ -368,7 +424,33 @@ Get-AzADGroupMember -GroupDisplayName Get-AzRoleAssignment -ResourceGroupName ``` {{#endtab }} +{{#tab name="MS Graph" }} +```bash +# Enumerate groups using Microsoft Graph PowerShell +Get-MgGroup -All +# Get group details +Get-MgGroup -GroupId | Format-List * + +# Search "admin" groups +Get-MgGroup -All | Where-Object { $_.DisplayName -like "*admin*" } | Select-Object DisplayName + +# Get members of a group +Get-MgGroupMember -GroupId -All + +# Get groups a group is member of +Get-MgGroupMemberOf -GroupId + +# Get roles assigned to the group in Entra ID +Get-MgGroupAppRoleAssignment -GroupId + +# Get group owner +Get-MgGroupOwner -GroupId + +# List available commands in Microsoft Graph PowerShell +Get-Command -Module Microsoft.Graph.Groups +``` +{{#endtab }} {{#tab name="Azure AD" }} ```bash # Enumerate Groups @@ -406,13 +488,13 @@ Add-AzureADGroupMember -ObjectId -RefObjectId -Verbose ``` > [!WARNING] > Grupe mogu biti dinamične, što u osnovi znači da **ako korisnik ispuni određene uslove, biće dodat u grupu**. Naravno, ako su uslovi zasnovani na **atributima** koje **korisnik** može **kontrolisati**, mogao bi zloupotrebiti ovu funkciju da **uđe u druge grupe**.\ -> Proverite kako zloupotrebiti dinamičke grupe na sledećoj stranici: +> Proverite kako zloupotrebiti dinamične grupe na sledećoj stranici: {{#ref}} ../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md {{#endref}} -### Service Principals +### Servisni Principali Za više informacija o Entra ID servisnim principalima proverite: @@ -467,6 +549,30 @@ Headers = @{ (Invoke-RestMethod @RequestParams).value ``` {{#endtab }} +{{#tab name="MS Graph" }} +```bash +# Get Service Principals using Microsoft Graph PowerShell +Get-MgServicePrincipal -All + +# Get details of one Service Principal +Get-MgServicePrincipal -ServicePrincipalId | Format-List * + +# Search SP by display name +Get-MgServicePrincipal -All | Where-Object { $_.DisplayName -like "*app*" } | Select-Object DisplayName + +# Get owner of Service Principal +Get-MgServicePrincipalOwner -ServicePrincipalId + +# Get objects owned by a Service Principal +Get-MgServicePrincipalOwnedObject -ServicePrincipalId + +# Get groups where the SP is a member +Get-MgServicePrincipalMemberOf -ServicePrincipalId + +# List available commands in Microsoft Graph PowerShell +Get-Command -Module Microsoft.Graph.ServicePrincipals +``` +{{#endtab }} {{#tab name="Azure AD" }} ```bash @@ -602,7 +708,7 @@ Write-Output "Failed to Enumerate the Applications." ### Aplikacije -Za više informacija o Aplikacijama proverite: +Za više informacija o Aplikacijama pogledajte: {{#ref}} ../az-basic-information/ @@ -610,7 +716,7 @@ Za više informacija o Aplikacijama proverite: Kada se aplikacija generiše, dodeljuju se 2 tipa dozvola: -- **Dozvole** dodeljene **Servisnom Principal** +- **Dozvole** dodeljene **Servisnom Principalu** - **Dozvole** koje **aplikacija** može imati i koristiti **u ime korisnika**. {{#tabs }} @@ -645,6 +751,25 @@ Get-AzADAppCredential ``` {{#endtab }} +{{#tab name="MS Graph" }} +```bash +# List Applications using Microsoft Graph PowerShell +Get-MgApplication -All + +# Get application details +Get-MgApplication -ApplicationId 7861f72f-ad49-4f8c-96a9-19e6950cffe1 | Format-List * + +# Search App by display name +Get-MgApplication -Filter "startswith(displayName, 'app')" | Select-Object DisplayName + +# Get owner of an application +Get-MgApplicationOwner -ApplicationId + +# List available commands in Microsoft Graph PowerShell +Get-Command -Module Microsoft.Graph.Applications +``` +{{#endtab }} + {{#tab name="Azure AD" }} ```bash # List all registered applications @@ -664,8 +789,8 @@ Get-AzureADApplication -ObjectId | Get-AzureADApplicationOwner |fl * > Za više informacija [**proverite ovo**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48). > [!NOTE] -> Tajni niz koji aplikacija koristi da dokaže svoj identitet prilikom traženja tokena je lozinka aplikacije.\ -> Dakle, ako pronađete ovu **lozinku**, možete pristupiti kao **service principal** **unutar** **tenanta**.\ +> Tajni niz koji aplikacija koristi da dokaže svoj identitet prilikom zahteva za token je lozinka aplikacije.\ +> Dakle, ako pronađete ovu **lozinku** možete pristupiti kao **service principal** **unutar** **tenanta**.\ > Imajte na umu da je ova lozinka vidljiva samo kada je generisana (možete je promeniti, ali je ne možete ponovo dobiti).\ > **Vlasnik** **aplikacije** može **dodati lozinku** (tako da može da se pretvara da je ona).\ > Prijave kao ovi service principals **nisu označene kao rizične** i **neće imati MFA.** @@ -719,7 +844,27 @@ az role assignment list --all --query "[].{principalName:principalName,principal # Get all the roles assigned to a user az role assignment list --assignee "" --all --output table # Get all the roles assigned to a user by filtering -az role assignment list --all --query "[?principalName=='carlos@carloshacktricks.onmicrosoft.com']" --output table +az role assignment list --all --query "[?principalName=='admin@organizationadmin.onmicrosoft.com']" --output table +``` +{{#endtab }} + +{{#tab name="MS Graph" }} +```bash + +# List all available role templates using Microsoft Graph PowerShell +Get-MgDirectoryRoleTemplate -All + +# List enabled built-in Entra ID roles +Get-MgDirectoryRole -All + +# List all Entra ID roles with their permissions (including custom roles) +Get-MgDirectoryRoleDefinition -All + +# List members of a Entra ID role +Get-MgDirectoryRoleMember -DirectoryRoleId -All + +# List available commands in Microsoft Graph PowerShell +Get-Command -Module Microsoft.Graph.Identity.DirectoryManagement ``` {{#endtab }} @@ -833,6 +978,24 @@ Get-AzureADMSScopedRoleMembership -Id | fl * # If you know how to do this send a PR! ``` {{#endtab }} +{{#tab name="MS Graph" }} +```bash +# Enumerate devices using Microsoft Graph PowerShell +Get-MgDevice -All + +# Get device details +Get-MgDevice -DeviceId | Format-List * + +# Get devices managed using Intune +Get-MgDevice -Filter "isCompliant eq true" -All + +# Get devices owned by a user +Get-MgUserOwnedDevice -UserId test@corp.onmicrosoft.com + +# List available commands in Microsoft Graph PowerShell +Get-Command -Module Microsoft.Graph.Identity.DirectoryManagement +``` +{{#endtab }} {{#tab name="Azure AD" }} ```bash @@ -957,7 +1120,7 @@ Omogućava administratoru da je konfiguriše da **blokira** pokušaje kada je ri Entra Zaštita Lozinki ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) je bezbednosna funkcija koja **pomaže u sprečavanju zloupotrebe slabih lozinki tako što zaključava naloge kada se dogodi nekoliko neuspešnih pokušaja prijavljivanja**.\ Takođe omogućava da se **zabranjuje prilagođena lista lozinki** koju treba da obezbedite. -Može se **primeniti i na** nivou oblaka i na lokalnom Active Directory-ju. +Može se **primeniti i** na nivou oblaka i na lokalnom Active Directory-ju. Podrazumevani režim je **Revizija**: