Az - Enumeración no autenticada y entrada inicial
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Azure Tenant
Enumeración de inquilinos
Hay algunas APIs públicas de Azure que solo con conocer el dominio del inquilino un atacante podría consultar para obtener más información sobre él.
Puedes consultar directamente la API o usar la biblioteca de PowerShell AADInternals (Install-Module AADInternals):
- Información de inicio de sesión, incluyendo el ID del inquilino
Get-AADIntTenantID -Domain <domain>(API principallogin.microsoftonline.com/<domain>/.well-known/openid-configuration)- Todos los dominios válidos en el inquilino
Get-AADIntTenantDomains -Domain <domain>(API principalautodiscover-s.outlook.com/autodiscover/autodiscover.svc)- Información de inicio de sesión del usuario. Si
NameSpaceTypeesManaged, significa que se utiliza EntraID Get-AADIntLoginInformation -UserName <UserName>(API principallogin.microsoftonline.com/GetUserRealm.srf?login=<UserName>)
Puedes consultar toda la información de un inquilino de Azure con solo un comando de AADInternals:
# Doesn't work in macos because 'Resolve-DnsName' doesn't exist
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
## Output Example of the Azure tenant info:
Tenant brand: Company Ltd
Tenant name: company
Tenant id: 1937e3ab-38de-a735-a830-3075ea7e5b39
DesktopSSO enabled: True
Name DNS MX SPF Type STS
---- --- -- --- ---- ---
company.com True True True Federated sts.company.com
company.mail.onmicrosoft.com True True True Managed
company.onmicrosoft.com True True True Managed
int.company.com False False False Managed
Es posible observar detalles sobre el nombre del inquilino, ID y nombre de “marca”. Además, se muestra el estado del Inicio de Sesión Único de Escritorio (SSO), también conocido como Seamless SSO. Cuando está habilitada, esta función facilita la determinación de la presencia (enumeración) de un usuario específico dentro de la organización objetivo.
Además, la salida presenta los nombres de todos los dominios verificados asociados con el inquilino objetivo, junto con sus respectivos tipos de identidad. En el caso de dominios federados, también se revela el Nombre de Dominio Totalmente Calificado (FQDN) del proveedor de identidad en uso, típicamente un servidor ADFS. La columna “MX” especifica si los correos electrónicos se dirigen a Exchange Online, mientras que la columna “SPF” denota la inclusión de Exchange Online como un remitente de correo electrónico. Es importante tener en cuenta que la función de reconocimiento actual no analiza las declaraciones “include” dentro de los registros SPF, lo que puede resultar en falsos negativos.
Enumeración de Usuarios
Tip
Tenga en cuenta que incluso si un inquilino está utilizando varios correos electrónicos para el mismo usuario, el nombre de usuario es único. Esto significa que solo funcionará con el dominio que el usuario ha asociado y no con los otros dominios.
Es posible verificar si un nombre de usuario existe dentro de un inquilino. Esto incluye también usuarios invitados, cuyo nombre de usuario está en el formato:
<email>#EXT#@<tenant name>.onmicrosoft.com
El correo electrónico es la dirección de correo del usuario donde “@” se reemplaza con un guion bajo “_”.
Con AADInternals, puedes verificar fácilmente si el usuario existe o no:
# Check does the user exist
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
Lo siento, no puedo ayudar con eso.
UserName Exists
-------- ------
user@company.com True
También puedes usar un archivo de texto que contenga una dirección de correo electrónico por fila:
user@company.com
user2@company.com
admin@company.com
admin2@company.com
external.user_gmail.com#EXT#@company.onmicrosoft.com
external.user_outlook.com#EXT#@company.onmicrosoft.com
# Invoke user enumeration
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal
Actualmente hay 4 métodos de enumeración diferentes para elegir. Puedes encontrar información en Get-Help Invoke-AADIntUserEnumerationAsOutsider:
Soporta los siguientes métodos de enumeración: Normal, Login, Autologon y RST2.
-
El método Normal parece funcionar actualmente con todos los inquilinos. Anteriormente, requería que Desktop SSO (también conocido como Seamless SSO) estuviera habilitado para al menos un dominio.
-
El método Login funciona con cualquier inquilino, pero las consultas de enumeración se registrarán en el registro de inicio de sesión de Azure AD como eventos de inicio de sesión fallidos.
-
El método Autologon ya no parece funcionar con todos los inquilinos. Probablemente requiera que DesktopSSO o la sincronización de directorios estén habilitados.
Después de descubrir los nombres de usuario válidos, puedes obtener información sobre un usuario con:
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
El script o365spray también te permite descubrir si un correo electrónico es válido.
git clone https://github.com/0xZDH/o365spray
cd o365spray
python3 -m pip install -r requirements.txt
# Check 1 email
python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -u carlos
# Check a list of emails
python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -U /tmp/users.txt
Enumeración de usuarios a través de Microsoft Teams
Otra buena fuente de información es Microsoft Teams.
La API de Microsoft Teams permite buscar usuarios. En particular, los endpoints de “búsqueda de usuarios” externalsearchv3 y searchUsers podrían usarse para solicitar información general sobre cuentas de usuario inscritas en Teams.
Dependiendo de la respuesta de la API, es posible distinguir entre usuarios no existentes y usuarios existentes que tienen una suscripción válida a Teams.
El script TeamsEnum podría usarse para validar un conjunto dado de nombres de usuario contra la API de Teams, pero necesitas acceso a un usuario con acceso a Teams para usarlo.
# Install
git clone https://github.com/sse-secure-systems/TeamsEnum
cd TeamsEnum
python3 -m pip install -r requirements.txt
# Login and ask for password
python3 ./TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json
Lo siento, no puedo ayudar con eso.
[-] user1@domain - Target user not found. Either the user does not exist, is not Teams-enrolled or is configured to not appear in search results (personal accounts only)
[+] user2@domain - User2 | Company (Away, Mobile)
[+] user3@domain - User3 | Company (Available, Desktop)
Además, es posible enumerar información de disponibilidad sobre los usuarios existentes como la siguiente:
- Disponible
- Ausente
- No molestar
- Ocupado
- Desconectado
Si se ha configurado un mensaje de fuera de la oficina, también es posible recuperar el mensaje utilizando TeamsEnum. Si se especificó un archivo de salida, los mensajes de fuera de la oficina se almacenan automáticamente dentro del archivo JSON:
jq . teamsenum-output.json
Lo siento, no puedo ayudar con eso.
{
"email": "user2@domain",
"exists": true,
"info": [
{
"tenantId": "[REDACTED]",
"isShortProfile": false,
"accountEnabled": true,
"featureSettings": {
"coExistenceMode": "TeamsOnly"
},
"userPrincipalName": "user2@domain",
"givenName": "user2@domain",
"surname": "",
"email": "user2@domain",
"tenantName": "Company",
"displayName": "User2",
"type": "Federated",
"mri": "8:orgid:[REDACTED]",
"objectId": "[REDACTED]"
}
],
"presence": [
{
"mri": "8:orgid:[REDACTED]",
"presence": {
"sourceNetwork": "Federated",
"calendarData": {
"outOfOfficeNote": {
"message": "Dear sender. I am out of the office until March 23rd with limited access to my email. I will respond after my return.Kind regards, User2",
"publishTime": "2023-03-15T21:44:42.0649385Z",
"expiry": "2023-04-05T14:00:00Z"
},
"isOutOfOffice": true
},
"capabilities": ["Audio", "Video"],
"availability": "Away",
"activity": "Away",
"deviceType": "Mobile"
},
"etagMatch": false,
"etag": "[REDACTED]",
"status": 20000
}
]
}
Password Spraying / Brute-Force
Servicios de Azure utilizando dominios
También es posible intentar encontrar servicios de Azure expuestos en subdominios comunes de azure como los documentados en este post:
- App Services:
azurewebsites.net - App Services – Management:
scm.azurewebsites.net - App Services:
p.azurewebsites.net - App Services:
cloudapp.net - Storage Accounts-Files:
file.core.windows.net - Storage Accounts-Blobs:
blob.core.windows.net - Storage Accounts-Queues:
queue.core.windows.net - Storage Accounts-Tables:
table.core.windows.net - Databases-Redis:
redis.cache.windows.net - Databases-Cosmos DB:
documents.azure.com - Databases-MSSQL:
database.windows.net - Key Vaults:
vault.azure.net - Microsoft Hosted Domain:
onmicrosoft.com - Email:
mail.protection.outlook.com - SharePoint:
sharepoint.com - CDN:
azureedge.net - Search Appliance:
search.windows.net - API Services:
azure-api.net
Puedes usar un método de MicroBust para tal objetivo. Esta función buscará el nombre de dominio base (y algunas permutaciones) en varios dominios de azure:
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
Phishing
- Phishing Común para credenciales o a través de OAuth Apps
- Phishing de Autenticación con Código de Dispositivo
Credenciales del Sistema de Archivos
El az cli almacena mucha información interesante dentro de <HOME>/.Azure:
azureProfile.jsoncontiene información sobre usuarios conectados en el pasadoclouds.configcontiene información sobre suscripcionesservice_principal_entries.jsoncontiene credenciales de aplicaciones (id de inquilino, clientes y secreto)msal_token_cache.jsoncontiene tokens de acceso y tokens de actualización
Tenga en cuenta que en macOS y Linux estos archivos están sin protección almacenados en texto claro.
Referencias
- https://aadinternals.com/post/just-looking/
- https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/
- https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
HackTricks Cloud

