# AzureAD

## <mark style="color:red;">Instalación</mark>

### AzureAD

```powershell
Install-Module AzureAD

```

```powershell
Import-Module C:\Pentest\Tools\AzureAD\AzureAD.psd1
```

### AzureADPreview

```powershell
Install-Module AzureADPreview
```

## <mark style="color:red;">Conexión</mark>

Una vez se hayan obtenido credenciales válidas, se podría utilizar la herramienta de AzureAD para conectarse al Tenant y enumerar información haciendo uso de la sesión del usuario.

### <mark style="color:purple;">Popup</mark>

```powershell
Connect-AzureAD
```

```powershell
Account                      Environment TenantId                             TenantDomain AccountType
-------                      ----------- --------                             ------------ -----------
xtormin@xtormincorp.com      AzureCloud  11081700-e4e1-4313-bf78-41fae513bbe6 xtormincorp.com  User
```

### <mark style="color:purple;">Línea de comandos</mark>

```powershell
$passwd = ConvertTo-SecureString "<password>" -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential("<email>", $passwd)
Connect-AzureAD -Credential $creds
```

## <mark style="color:red;">Token</mark>

* Conexión con información del access token, tenantId y accountId:

<pre class="language-powershell" data-overflow="wrap"><code class="lang-powershell"><strong>Connect-AzureAD -AadAccessToken &#x3C;JWT> -TenantId "1d50cb29-5f5b-48a4-87ce-fe75a941adb6" -AccountId "f66e433c-bd01-4b0b-b3b7-7cd749fd45f3"
</strong></code></pre>

## <mark style="color:red;">Información general</mark>

### <mark style="color:purple;">Sesión actual</mark>

```powershell
Get-AzureADCurrentSessionInfo
```

```powershell
Account                      Environment TenantId                             TenantDomain AccountType
-------                      ----------- --------                             ------------ -----------
xtormin@xtormincorp.com      AzureCloud  11081700-e4e1-4313-bf78-41fae513bbe6 xtormincorp.com  User
```

### <mark style="color:purple;">Tenant</mark>

<pre class="language-powershell"><code class="lang-powershell"><strong>Get-AzureADTenantDetail
</strong></code></pre>

```powershell
ObjectId                             DisplayName            VerifiedDomain
--------                             -----------            --------------
11081700-e4e1-4313-bf78-41fae513bbe6 Xtormin Corp.          xtormincorp.com
```

## <mark style="color:red;">Usuarios</mark>

* **Todos los usuarios:**

```powershell
Get-AzureADUser -All $true
```

```powershell
ObjectId                             DisplayName               UserPrincipalName            UserType
--------                             -----------               -----------------            --------
04ee91f2-4cd2-456c-b546-9f6401b08de4 Jennifer Torres           xtormin@xtormincorp.com      Member
[...]
```

* **Un usuario en concreto:**

```powershell
Get-AzureADUser -ObjectId xtormin@xtormincorp.com
```

* **Buscar todos los usuarios que contengan la cadena "admin" en el&#x20;*****DisplayName*****:**

```powershell
Get-AzureADUser -All $true | ?{$_.Displayname -match "admin"}
```

* **Obtener todos los atributos de un usuario:**

```powershell
Get-AzureADUser -ObjectId xtormin@xtormincorp.com | fl *
```

* **Listado de atributos del usuario:**

```powershell
Get-AzureADUser -ObjectId xtormin@xtormincorp.com | %{$_.PSObject.Properties.Name}
```

* **Buscar los atributos de los usuarios que contengan la cadena "password":**

{% code overflow="wrap" %}

```powershell
Get-AzureADUser -All $true | %{$Properties = $_;$Properties.PSObject.Properties.Name | % {if ($Properties.$_ -match 'password') {"$($Properties.UserPrincipalName) - $_ - $($Properties.$_)"}}}
```

{% endcode %}

* **Todos los usuarios que se han sincronizado desde un AD on-premise:** Es útil para obtener la lista de usuarios principales de la organización ya que no muestra los usuarios externos.

{% code overflow="wrap" %}

```powershell
Get-AzureADUser -All $true | ?{$_.OnPremisesSecurityIdentifier -ne $null}
```

{% endcode %}

* **Todos los usuarios de AzureAD:** Es útil para obtener una lista con los usuarios creados en AzureAD y obtener los usuarios externos.

```powershell
Get-AzureADUser -All $true | ?{$_.OnPremisesSecurityIdentifier -eq $null}
```

* Lista de todos los objetos creados por los todos usuarios:

```powershell
Get-AzureADUser | Get-AzureADUserCreatedObject
```

* Lista de todos los objetos creados por un usuario:

```powershell
Get-AzureADUserOwnedObject -ObjectId
```

## <mark style="color:red;">Grupos</mark>

* Todos los grupos:

```powershell
Get-AzureADGroup -All $true
```

* Detalles de un grupo en concreto:

```powershell
Get-AzureADGroup -ObjectId 7c63dd47-91ed-45c4-9081-427ad616347f
```

* Buscar grupos que empiecen por una cadena (por ejemplo: admin):

```powershell
Get-AzureADGroup -SearchString "admin" | fl *
```

* Buscar grupos que contengan una cadena (por ejemplo: admin):

```powershell
Get-AzureADGroup -All $true |?{$_.Displayname -match "admin"}
```

* Buscar grupos que permitan "DynamicMembership":

```powershell
Get-AzureADMSGroup | ?{$_.GroupTypes -eq 'DynamicMembership'}
```

* Todos los grupos que se han sincronizado desde on-prem:

```powershell
Get-AzureADGroup -All $true | ?{$_.OnPremisesSecurityIdentifier -ne $null}
```

* Todos los grupos de AzureAD:

```powershell
Get-AzureADGroup -All $true | ?{$_.OnPremisesSecurityIdentifier -eq $null}
```

* Obtener los miembros de un grupo:

```powershell
Get-AzureADGroupMember -ObjectId 7c63dd47-98ed-45c4-9081-427ad616347f
```

* Obtener grupos y roles donde el usuario es miembro:

```powershell
Get-AzureADUser -SearchString 'test' | Get-AzureADUserMembership

Get-AzureADUserMembership -ObjectId xtormin@xtormincorp.onmicrosoft.com
```

## <mark style="color:red;">Roles</mark>

* Obtener todas las plantillas de roles disponibles:

```powershell
Get-AzureADDirectoryroleTemplate
```

* Obtener todos los roles habilitados (han sido asignados al menos a un usuario):

```powershell
Get-AzureADDirectoryRole
```

* Obtener usuarios asignados a un rol:

{% code overflow="wrap" %}

```powershell
Get-AzureADDirectoryRole -Filter "DisplayName eq 'Global Administrator'" | Get-AzureADDirectoryRoleMember
```

{% endcode %}

## <mark style="color:red;">Dispositivos</mark>

* Obtener todos los dispositivos registrados y unidos a azure:

```powershell
Get-AzureADDevice -All $true | fl *
```

* Obtener el objeto de configuración de dispositivos:

```powershell
Get-AzureADDeviceConfiguration | fl *
```

* Obtener todos los dispositivos activos:

```powershell
Get-AzureADDevice -All $true | ?{$_.ApproximateLastLogonTimeStamp -ne $null}
```

* Obtener los propietarios registrados:

{% code overflow="wrap" %}

```powershell
Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredOwner

Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredOwner -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
```

{% endcode %}

* Obtener los usuarios registrados:

{% code overflow="wrap" %}

```powershell
Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredUser

Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredUser -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
```

{% endcode %}

* Dispositivos propiedad de un usuario:

```powershell
Get-AzureADUserOwnedDevice -ObjectId xtormin@xtormincorp.onmicrosoft.com
```

* Dispositivos registrados por un usuario:

```powershell
Get-AzureADUserRegisteredDevice -ObjectId xtormin@xtormincorp.onmicrosoft.com
```

* Dispositivos administrados por Intune:

```powershell
Get-AzureADDevice -All $true | ?{$_.IsCompliant -eq "True"}
```

## <mark style="color:red;">Aplicaciones</mark>

* Obtener todos los objetos de aplicaciones registradas en el tenant actual:

```powershell
Get-AzureADApplication -All $true
```

* Obtener los detalles de una aplicación:

```powershell
Get-AzureADApplication -ObjectId fa656d62-b53a-431d-b40c-b0a8757892d2 | fl *
```

* Obtener una aplicación según su "Display Name":

```powershell
Get-AzureADApplication -All $true | ?{$_.DisplayName -match "app"}
```

* Obtener las aplicaciones que cuentan con contraseña:

{% code overflow="wrap" %}

```powershell
Get-AzureADApplication -All $true | %{if(Get-AzureADApplicationPasswordCredential -ObjectID $_.ObjectID){$_}}
```

{% endcode %}

* Obtener el owner de una aplicación:

{% code overflow="wrap" %}

```powershell
Get-AzureADApplication -ObjectId fa656d61-b55a-431d-b44c-b0a8658897d2 | Get-AzureADApplicationOwner |fl *
```

{% endcode %}

* Obtener las aplicaciones donde el usuario tiene un rol asignado:

{% code overflow="wrap" %}

```powershell
Get-AzureADUser -ObjectId xtormin@xtormincorp.onmicrosoft.com | Get-AzureADUserAppRoleAssignment | fl *
```

{% endcode %}

* Obtener las aplicaciones donde un grupo tiene un rol asignado:

{% code overflow="wrap" %}

```powershell
Get-AzureADGroup -ObjectId 54787e13-4374-4b05-85a1-5cfe4b3ddc98 | Get-AzureADGroupAppRoleAssignment | fl *
```

{% endcode %}

## *<mark style="color:red;">Service Principals</mark>*

{% hint style="info" %}
"Service principal" es la representación local para una aplicación en un tenant específico y es el objeto de seguridad que tiene privilegios. Se trata de la «cuenta servicio».
{% endhint %}

* Obtener todos los *Service Principals*:

```powershell
Get-AzureADServicePrincipal -All $true
```

* Obtener todos los detalles de un *Service Principal*:

```powershell
Get-AzureADServicePrincipal -ObjectId ff2612c5-7168-4fed-b571-2f7c5c31b066 | fl *
```

* Obtener todos los detalles según su *Display Name*:

```powershell
Get-AzureADServicePrincipal -All $true | ?{$_.DisplayName -match "app"}
```

* Obtener todos los Service Principals que requieren contraseña:

{% code overflow="wrap" %}

```powershell
Get-AzureADServicePrincipal -All $true | %{if(Get-AzureADServicePrincipalKeyCredential -ObjectID $_.ObjectID){$_}}
```

{% endcode %}

* Obtener propietario de un Service Principal:

{% code overflow="wrap" %}

```powershell
Get-AzureADServicePrincipal -ObjectId 60a70e2b-c1bd-453b-928e-f7398ebe3660 | Get-AzureADServicePrincipalOwner |fl *
```

{% endcode %}

* Obtener los objetos que son propietarios de un Service Principal:

{% code overflow="wrap" %}

```powershell
Get-AzureADServicePrincipal -ObjectId ff1601c6-7368-7fed-b672-2f7c5c31b066 | Get-AzureADServicePrincipalOwnedObject
```

{% endcode %}

* Objetos creados por un Service Principal:

{% code overflow="wrap" %}

```powershell
Get-AzureADServicePrincipal -ObjectId f5ac063d-7ddc-3e7c-aabc-f135b00a972c | Get-AzureADServicePrincipalCreatedObject
```

{% endcode %}

* Obtener grupo y roles de un Service Principal:

{% code overflow="wrap" %}

```powershell
Get-AzureADServicePrincipal -ObjectId f4ac083d-7ddc-3e7c-aabc-f231b00a972c | Get-AzureADServicePrincipalMembership |fl *
```

{% endcode %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.xtormin.com/pentesting-en-infraestructuras/cloud/azure/metodologia-de-azure-pentest/reconocimiento-interno/enum-con-herramientas-de-ms/azuread.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
