Existen algunas APIs públicas de Azure que sólo conociendo el dominio del tenant un atacante podría consultar para recabar más información sobre el mismo.
A parte de utilizar google dorks y consultas con dns se puede usar lo siguiente:
{% content-ref url="../method/recon/subdominios.md" %} subdominios.md {% endcontent-ref %}
{% embed url="https://www.netspi.com/blog/technical/cloud-penetration-testing/enumerating-azure-services/" %}
Domain | Associated Service |
---|---|
azurewebsites.net | App Services |
scm.azurewebsites.net | App Services – Management |
p.azurewebsites.net | App Services |
cloudapp.net | App Services |
file.core.windows.net | Storage Accounts-Files |
blob.core.windows.net | Storage Accounts-Blobs |
queue.core.windows.net | Storage Accounts-Queues |
table.core.windows.net | Storage Accounts-Tables |
redis.cache.windows.net | Databases-Redis |
documents.azure.com | Databases-Cosmos DB |
database.windows.net | Databases-MSSQL |
vault.azure.net | Key Vaults |
onmicrosoft.com | Microsoft Hosted Domain |
mail.protection.outlook.com | |
sharepoint.com | SharePoint |
azureedge.net | CDN |
search.windows.net | Search Appliance |
azure-api.net | API Services |
Con la herramienta dig se tiene que ver que resuelva a algún dominio de Azure o 365
{% embed url="https://www.microsoft.com/en-us/download/details.aspx?id=56519" %}
Sabiendo el dominio es perteneciente a Azure Tenant, se puede ocupar lo siguiente:
{% code overflow="wrap" %}
https://login.microsoftonline.com/<Domain_To_Audit><.onmicrosoft>.com/.well-known/openid-configuration
{% endcode %}
{% code overflow="wrap" %}
https://login.microsoftonline.com/getuserrealm.srf?login=auditor@atomic-nuclear.site&xml=1
{% endcode %}
{% code overflow="wrap" %}
https://login.microsoftonline.com/atomic-nuclear.site/.well-known/openid-configuration
{% endcode %}
API | Information | AADInternals function |
---|---|---|
login.microsoftonline.com/<domain>/.well-known/openid-configuration | Login information, including tenant ID | Get-AADIntTenantID -Domain <domain> |
autodiscover-s.outlook.com/autodiscover/autodiscover.svc | All domains of the tenant | Get-AADIntTenantDomains -Domain <domain> |
login.microsoftonline.com/GetUserRealm.srf?login=<UserName> | Login information of the tenant, including tenant Name and domain authentication type | Get-AADIntLoginInformation -UserName <UserName> |
login.microsoftonline.com/common/GetCredentialType | Login information, including Desktop SSO information | Get-AADIntLoginInformation -UserName <UserName> |
También se pueden usar la herramienta AADInternals para enumerar rápidamente los dominios:
Invoke-AADIntReconAsOutsider -DomainName some.onmicrosoft.com | Format-Table
Salida de ejemplo:
Tenant brand: Company Ltd
Tenant name: company
Tenant id: 05aea22e-32f3-4c35-831b-52735704feb3
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
Otra función de AADinternals para obtener solo el Tenant ID es:
Get-AADIntTenantID -Domain some.onmicrosoft.com
Por medio de la herramienta AADInternals se puede
{% code overflow="wrap" %}
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
{% endcode %}
Listar información de los correos válidos:
Get-AADIntLoginInformation -UserName "user@company.com"
Además de uso de herramienta, existen otros 3 metodos de enumeración de usuarios:
Método | Descripción |
---|---|
Normal | Hace referencia a la API GetCredentialType mencionada anteriormente. El método por defecto. |
Login | Este método intenta iniciar sesión como usuario. Nota: las consultas se registrarán en el registro de inicio de sesión. |
Autologon | Este método intenta iniciar sesión como el usuario a través de autologon endpoint. Las consultas no se registran en el registro de inicio de sesión. Como tal, funciona bien para los ataques de password spray y de fuerza bruta. |
Otra herramienta para enumeración es o365screeper:
# Poner los correos en el archivo emails.txt
python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt