
Enumeração não autenticada do Microsoft Entra ID (Azure AD)
Fonte: Kit EvilMist - Invoke-EntraEnum.ps1 - https://github.com/Logisek/EvilMist
Descobre informações do inquilino usando APIs públicas.
Obtém os detalhes do inquilino a partir do serviço azmap.dev.
# Substitua DOMAIN pelo domínio alvo (ex.: example.com)
curl -s "https://azmap.dev/api/tenant?domain=DOMAIN&extract=true"
A resposta contém: tenantId, displayName, countryCode
Obtém a configuração do OpenID Connect, incluindo os endpoints de token.
# Substitua DOMAIN pelo domínio alvo
curl -s "https://login.microsoftonline.com/DOMAIN/v2.0/.well-known/openid-configuration"
A resposta contém: token_endpoint, authorization_endpoint, jwks_uri, issuer
Obtém o namespace do domínio e a configuração de federação.
# Substitua DOMAIN pelo domínio alvo
curl -s "https://login.microsoftonline.com/getuserrealm.srf?login=enum@DOMAIN&json=1"
A resposta contém:
NameSpaceType - "Managed" ou "Federated"AuthURL - URL de autenticação da federação (se federado)CloudInstanceName - Instância de nuvem (ex.: "microsoftonline.com")FederationBrandName - Nome de marca da organizaçãoDomainName - Domínio verificadoVerifica se um usuário existe no Azure AD. Retorna códigos diferentes com base na existência do usuário.
# Substitua EMAIL pelo endereço de e-mail alvo
curl -s -X POST "https://login.microsoftonline.com/common/GetCredentialType" \
-H "Content-Type: application/json" \
-d '{
"Username": "EMAIL",
"isOtherIdpSupported": true,
"checkPhones": false,
"isRemoteNGCSupported": true,
"isCookieBannerShown": false,
"isFidoSupported": true,
"originalRequest": "",
"country": "US",
"forceotclogin": false,
"isExternalFederationDisallowed": false,
"isRemoteConnectSupported": false,
"federationFlags": 0,
"isSignup": false,
"flowToken": "",
"isAccessPassSupported": true
}'
Códigos IfExistsResult:
0 = Usuário existe (IdP do Azure)1 = Usuário não existe2 = Solicitação inválida4 = Erro no servidor5 = Usuário existe (IdP federado)6 = Usuário existe (IdP externo não Microsoft)Consultas DNS para registros relacionados ao Azure/M365. Use os comandos dig, nslookup ou host.
# CNAME do domínio principal
dig CNAME DOMAIN
# CNAME do Autodiscover
dig CNAME autodiscover.DOMAIN
dig CNAME lyncdiscover.DOMAIN
dig CNAME sip.DOMAIN
dig TXT DOMAIN
dig SRV _ldap._tcp.DOMAIN
dig SRV _kerberos._tcp.DOMAIN
dig SRV _autodiscover._tcp.DOMAIN
dig SRV _sip._tls.DOMAIN
dig SRV _sipfederationtls._tcp.DOMAIN
dig MX DOMAIN
Totalmente indetectável - Nenhum log de auditoria é gerado.
Verifica se um usuário existe ao sondar a URL do site pessoal do OneDrive.
# Substitua TENANT pelo nome do inquilino (ex.: example)
# Substitua USERPATH pelo e-mail formatado como: user_domain_com (@ e . substituídos por _)
# Exemplo: [email protected] vira john_doe_example_com
curl -s -o /dev/null -w "%{http_code}" -I \
"https://TENANT-my.sharepoint.com/personal/USERPATH/_layouts/15/onedrive.aspx"
Códigos de status:
200 = Usuário existe, OneDrive acessível401/403 = Usuário existe, acesso negado404 = Usuário não existecurl -s -o /dev/null -w "%{http_code}" -I \
"https://example-my.sharepoint.com/personal/john_doe_example_com/_layouts/15/onedrive.aspx"
Obtém os metadados de federação, incluindo certificados de assinatura e endpoints de token.
# Substitua DOMAIN pelo domínio alvo
curl -s "https://login.microsoftonline.com/DOMAIN/FederationMetadata/2007-06/FederationMetadata.xml"
A resposta contém (XML):
Detecta se o SSO de desktop (Seamless Single Sign-On) está habilitado.
# Substitua DOMAIN pelo domínio alvo
curl -s "https://login.microsoftonline.com/getuserrealm.srf?login=user@DOMAIN&json=1"
Procure por: DesktopSsoEnabled: true
# Substitua TENANT_ID pelo GUID do inquilino
curl -s -o /dev/null -w "%{http_code}" \
"https://autologon.microsoftazuread-sso.com/TENANT_ID/winauth/trust/2005/usernamemixed"
Descobre os recursos do Azure associados a um inquilino. Usa resolução DNS.
# Substitua TENANT pelo nome do inquilino
# Domínio principal do inquilino
dig A TENANT.onmicrosoft.com
# SharePoint
dig A TENANT.sharepoint.com
# OneDrive
dig A TENANT-my.sharepoint.com
# Azure Blob Storage
dig A TENANT.blob.core.windows.net
# Azure Files
dig A TENANT.file.core.windows.net
# Azure Queue
dig A TENANT.queue.core.windows.net
# Azure Table
dig A TENANT.table.core.windows.net
# Key Vault
dig A TENANT.vault.azure.net
# Azure SQL
dig A TENANT.database.windows.net
# App Service
dig A TENANT.azurewebsites.net
# Implantação Kudu/Git
dig A TENANT.scm.azurewebsites.net
# Cloud Services
dig A TENANT.cloudapp.net
dig A TENANT.cloudapp.azure.com
# Exchange Online Protection
dig A TENANT.mail.protection.outlook.com
# Container Registry
dig A TENANT.azurecr.io
# Redis Cache
dig A TENANT.redis.cache.windows.net
# Service Bus
dig A TENANT.servicebus.windows.net
# Front Door
dig A TENANT.azurefd.net
# Azure AD B2C
dig A TENANT.b2clogin.com
# API Management
dig A TENANT.azure-api.net
# Traffic Manager
dig A TENANT.trafficmanager.net
# HDInsight
dig A TENANT.azurehdinsight.net
# Cosmos DB
dig A TENANT.documents.azure.com
# Cognitive Search
dig A TENANT.search.windows.net
# Cognitive Services
dig A TENANT.cognitiveservices.azure.com
# Sufixos comuns: dev, prod, staging, test, uat, qa, backup, dr, api, app, web, data
dig A TENANTdev.blob.core.windows.net
dig A TENANTprod.azurewebsites.net
dig A TENANTstaging.vault.azure.net
Verifica a existência do usuário por meio do endpoint JSON do Autodiscover V2.
# Substitua EMAIL pelo endereço de e-mail alvo
curl -s -o /dev/null -w "%{http_code}" -L --max-redirs 0 \
"https://autodiscover-s.outlook.com/autodiscover/autodiscover.json?Email=EMAIL&Protocol=Autodiscoverv1"
Códigos de status:
200 = Usuário existe302 (redirecionamento) = Usuário não existe401/403 = Usuário existe (autenticação necessária)Endpoint Autodiscover legado baseado em XML para enumeração de usuários.
# Substitua DOMAIN pelo domínio alvo
# Substitua EMAIL pelo endereço de e-mail alvo