Az - Enumeração Não Autenticada & Entrada Inicial
Tip
Aprenda e pratique AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoie o HackTricks
- Check the subscription plans!
- Participe do 💬 Discord group ou do telegram group ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe hacking tricks enviando PRs para os HackTricks e HackTricks Cloud github repos.
Tenant do Azure
Enumeração do Tenant
Existem algumas APIs públicas do Azure que, apenas conhecendo o domínio do tenant, um atacante pode consultar para coletar mais informações sobre ele.
Você pode consultar diretamente a API ou usar a biblioteca PowerShell AADInternals (Install-Module AADInternals):
- Informações de login incluindo o ID do tenant
Get-AADIntTenantID -Domain <domain>(API principallogin.microsoftonline.com/<domain>/.well-known/openid-configuration)- Todos os domínios válidos no tenant
Get-AADIntTenantDomains -Domain <domain>(API principalautodiscover-s.outlook.com/autodiscover/autodiscover.svc)- Informações de login do usuário. Se
NameSpaceTypeforManaged, significa que EntraID está sendo usado Get-AADIntLoginInformation -UserName <UserName>(API principallogin.microsoftonline.com/GetUserRealm.srf?login=<UserName>)
Você pode consultar todas as informações de um tenant do Azure com apenas um comando do 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
É possível observar detalhes sobre o tenant’s name, ID, e o “brand” name. Além disso, o status do Desktop Single Sign-On (SSO), também conhecido como Seamless SSO, é exibido. Quando habilitado, esse recurso facilita a determinação da presença (enumeração) de um usuário específico dentro da organização alvo.
Além disso, a saída apresenta os nomes de todos os domínios verificados associados ao tenant alvo, juntamente com seus respectivos identity types. No caso de domínios federados, o Fully Qualified Domain Name (FQDN) do identity provider em uso, tipicamente um servidor ADFS, também é divulgado. A coluna “MX” especifica se os e-mails são roteados para Exchange Online, enquanto a coluna “SPF” indica a listagem do Exchange Online como remetente de e-mail. É importante notar que a função de reconhecimento atual não faz o parsing das declarações “include” dentro dos registros SPF, o que pode resultar em falsos negativos.
User Enumeration
Tip
Observe que, mesmo que um tenant esteja usando vários e-mails para o mesmo usuário, o username é único. Isso significa que ele só vai funcionar com o domínio que o usuário associou e não com os outros domínios.
É possível verificar se um username existe dentro de um tenant. Isso inclui também guest users, cujo username está no formato:
<email>#EXT#@<tenant name>.onmicrosoft.com
O email é o endereço de e-mail do usuário onde o “@” é substituído por underscore “_“.
Com AADInternals, você pode verificar facilmente se o usuário existe ou não:
# Check does the user exist
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
Não há conteúdo fornecido. Por favor cole o conteúdo do arquivo src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md para que eu possa traduzir.
UserName Exists
-------- ------
user@company.com True
Você também pode usar um arquivo de texto contendo um endereço de email por linha:
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
Atualmente existem 4 diferentes métodos de enumeração para escolher. Você pode encontrar informações em Get-Help Invoke-AADIntUserEnumerationAsOutsider:
Ele suporta os seguintes métodos de enumeração: Normal, Login, Autologon, and RST2.
-
O Normal method parece atualmente funcionar com todos os tenants. Anteriormente exigia Desktop SSO (aka Seamless SSO) estar habilitado para pelo menos um domínio.
-
O Login method funciona com qualquer tenant, mas enumeration queries serão registradas no Azure AD sign-in log como failed login events!
-
O Autologon method aparentemente não funciona mais com todos os tenants. Provavelmente requer que DesktopSSO ou directory sync esteja habilitado.
Após descobrir os nomes de usuário válidos você pode obter info about a user com:
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
O script o365spray também permite descobrir se um e-mail é 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
Enumeração de Usuários via Microsoft Teams
Outra boa fonte de informação é o Microsoft Teams.
A API do Microsoft Teams permite buscar usuários. Em particular os endpoints de “user search” externalsearchv3 e searchUsers podem ser usados para solicitar informações gerais sobre contas de usuário inscritas no Teams.
Dependendo da resposta da API, é possível distinguir entre usuários inexistentes e usuários existentes que possuem uma assinatura válida do Teams.
O script TeamsEnum pode ser usado para validar um conjunto de usernames contra a Teams API, mas é necessário acesso a uma conta com acesso ao Teams para utilizá-lo.
# Install
git clone https://github.com/lucidra-security/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
Por favor, forneça o conteúdo do arquivo src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md para que eu possa traduzi-lo.
[-] 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)
Além disso, é possível enumerar informações de disponibilidade sobre usuários existentes a seguir:
- Available
- Away
- DoNotDisturb
- Busy
- Offline
Se uma mensagem de ausência estiver configurada, também é possível recuperar a mensagem usando TeamsEnum. Se um arquivo de saída foi especificado, as mensagens de ausência são armazenadas automaticamente no arquivo JSON:
jq . teamsenum-output.json
Por favor, cole o conteúdo do arquivo src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md que você quer que eu traduza para o português.
{
"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
Serviços do Azure usando domínios
Também é possível tentar encontrar serviços do Azure expostos em subdomínios comuns do Azure como os documentados neste 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
You can use a method from MicroBurst for such goal. This function will search the base domain name (and a few permutations) in several azure domains:
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
Phishing
- Common Phishing for credentials or via OAuth Apps
- Device Code Authentication Phishing
Filesystem Credentials
O az cli armazena muitas informações interessantes dentro de <HOME>/.Azure:
azureProfile.jsoncontém informações sobre usuários que fizeram login no passadoclouds.configcontém informações sobre assinaturasservice_principal_entries.jsoncontém aplicações credentials (tenant id, clients and secret)msal_token_cache.jsoncontém access tokens and refresh tokens
Observe que no macOS e linux esses arquivos são armazenados sem proteção, em texto não criptografado.
Referências
- 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
Aprenda e pratique AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoie o HackTricks
- Check the subscription plans!
- Participe do 💬 Discord group ou do telegram group ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe hacking tricks enviando PRs para os HackTricks e HackTricks Cloud github repos.
HackTricks Cloud

