Az - Unauthenticated Enum & Initial Entry

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Azure Tenant

Enumeração do Tenant

Existem algumas APIs públicas do Azure que, apenas conhecendo o domínio do tenant, um atacante poderia consultar para obter mais informações sobre ele. Você pode consultar diretamente a API ou usar a biblioteca PowerShell AADInternals:

APIInformaçãoFunção AADInternals

login.microsoftonline.com/<domínio>/.well-known/openid-configuration

Informações de login, incluindo o ID do tenant

Get-AADIntTenantID -Domain <domínio>

autodiscover-s.outlook.com/autodiscover/autodiscover.svc

Todos os domínios do tenant

Get-AADIntTenantDomains -Domain <domínio>

login.microsoftonline.com/GetUserRealm.srf?login=<NomeUsuário>

Informações de login do tenant, incluindo o Nome do tenant e o domínio do tipo de autenticação . Se o NameSpaceType for Gerenciado, significa que o AzureAD é usado.

Get-AADIntLoginInformation -UserName <NomeUsuário>

login.microsoftonline.com/common/GetCredentialType

Informações de login, incluindo informações de SSO de Desktop

Get-AADIntLoginInformation -UserName <NomeUsuário>

Você pode consultar todas as informações de um tenant do Azure com apenas um comando da biblioteca AADInternals:

Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table

Exemplo de saída das informações do locatário do Azure:

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 nome do locatário, ID e nome da "marca". Além disso, o status do Logon Único para Desktop (SSO), também conhecido como SSO sem interrupções, é exibido. Quando ativado, 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 locatário alvo, juntamente com seus respectivos tipos de identidade. No caso de domínios federados, o Nome de Domínio Totalmente Qualificado (FQDN) do provedor de identidade em uso, normalmente um servidor ADFS, também é divulgado. A coluna "MX" especifica se os e-mails são roteados para o Exchange Online, enquanto a coluna "SPF" denota a listagem do Exchange Online como remetente de e-mails. É importante observar que a função de reconhecimento atual não analisa as declarações "include" dentro dos registros SPF, o que pode resultar em falsos negativos.

Enumeração de Usuários

É possível verificar se um nome de usuário existe dentro de um locatário. Isso inclui também usuários convidados, cujo nome de usuário segue o formato:

<email>#EXT#@<tenant name>.onmicrosoft.com

O email é o endereço de email do usuário onde em "@" é substituído por sublinhado "_".

Com AADInternals, você pode facilmente verificar se o usuário existe ou não:

# Check does the user exist
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"

Enumeração não autenticada e Entrada Inicial

Nesta seção, vamos explorar como realizar a enumeração não autenticada e obter acesso inicial em ambientes do Azure.

Enumeração não autenticada

A enumeração não autenticada é uma técnica que pode ser usada para coletar informações sobre recursos e serviços disponíveis em um ambiente do Azure sem a necessidade de autenticação. Isso pode incluir descobrir informações sobre instâncias de máquinas virtuais, contas de armazenamento, grupos de segurança de rede, entre outros.

Entrada Inicial

Uma vez que informações relevantes tenham sido coletadas durante a fase de enumeração não autenticada, é possível utilizar esses dados para obter acesso inicial ao ambiente do Azure. Isso pode envolver a identificação de vulnerabilidades ou configurações inadequadas que possam ser exploradas para ganhar acesso não autorizado.

UserName         Exists
--------         ------
user@company.com True

Você também pode usar um arquivo de texto contendo um endereço de e-mail 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

Existem três métodos de enumeração diferentes para escolher:

MétodoDescrição

Normal

Isso se refere ao API GetCredentialType mencionado acima. O método padrão.

Login

Este método tenta fazer login como o usuário. Nota: as consultas serão registradas no log de logins.

Autologon

Este método tenta fazer login como o usuário via endpoint de autologon. As consultas não são registradas no log de logins! Como tal, funciona bem também para ataques de pulverização de senha e força bruta.

Depois de descobrir os nomes de usuário válidos, você pode obter informações sobre um usuário com:

Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com

O script o365creeper também permite descobrir se um email é válido.

# Put in emails.txt emails such as:
# - root@corp.onmicrosoft.com
python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt

Enumeração de Usuários via Microsoft Teams

Outra boa fonte de informação é o Microsoft Teams.

A API do Microsoft Teams permite pesquisar usuários. Em particular, os endpoints de "pesquisa de usuário" externalsearchv3 e searchUsers podem ser usados para solicitar informações gerais sobre contas de usuários inscritos no Teams.

Dependendo da resposta da API, é possível distinguir entre usuários que não existem e usuários existentes que têm uma assinatura válida do Teams.

O script TeamsEnum pode ser usado para validar um conjunto dado de nomes de usuário contra a API do Teams.

python3 TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json

Enumeração não autenticada e Entrada Inicial

Nesta seção, vamos discutir como realizar a enumeração não autenticada e obter acesso inicial em ambientes do Azure.

Enumeração não autenticada

A enumeração não autenticada é uma técnica usada para coletar informações sobre recursos e serviços disponíveis em um ambiente do Azure sem a necessidade de autenticação. Isso pode incluir descobrir informações sobre instâncias de máquinas virtuais, contas de armazenamento, grupos de segurança de rede e muito mais.

Entrada Inicial

Uma vez que a enumeração não autenticada tenha sido realizada com sucesso, o próximo passo é obter acesso inicial ao ambiente do Azure. Isso pode ser feito explorando vulnerabilidades conhecidas, como configurações incorretas de segurança, credenciais fracas ou até mesmo a falta de patches de segurança.

É importante ressaltar que a obtenção de acesso inicial sem autorização é ilegal e deve ser realizada apenas em ambientes nos quais você tenha permissão explícita para realizar testes de segurança.

[-] 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, como:

  • Disponível

  • Ausente

  • Não perturbe

  • Ocupado

  • Offline

Se uma mensagem de ausência do escritório estiver configurada, também é possível recuperar a mensagem usando o TeamsEnum. Se um arquivo de saída foi especificado, as mensagens de ausência do escritório são armazenadas automaticamente no arquivo JSON:

jq . teamsenum-output.json

Enumeração não autenticada e entrada inicial

Nesta seção, vamos discutir como realizar a enumeração não autenticada e obter acesso inicial em ambientes do Azure.

Enumeração não autenticada

Para realizar a enumeração não autenticada em um ambiente do Azure, você pode usar ferramentas como Nmap para identificar serviços em execução e possíveis vulnerabilidades. Além disso, a enumeração de DNS pode revelar informações úteis sobre a infraestrutura do alvo.

Entrada inicial

Após identificar possíveis vulnerabilidades durante a enumeração não autenticada, você pode explorá-las para obter acesso inicial ao ambiente do Azure. Isso pode incluir a exploração de serviços desatualizados, configurações incorretas ou credenciais fracas para ganhar acesso não autorizado. Certifique-se de documentar todas as etapas e resultados para referência futura.

{
"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
}
]
}

Serviços do Azure

Agora que sabemos os domínios usados pelo inquilino do Azure, é hora de tentar encontrar serviços do Azure expostos.

Você pode usar um método do MicroBust para esse objetivo. Essa função irá procurar o nome do domínio base (e algumas permutações) em vários domínios de serviços do Azure:

Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose

Armazenamento Aberto

Você pode descobrir armazenamento aberto com uma ferramenta como InvokeEnumerateAzureBlobs.ps1 que usará o arquivo Microburst/Misc/permitations.txt para gerar permutações (muito simples) e tentar encontrar contas de armazenamento abertas.

Import-Module .\MicroBurst\MicroBurst.psm1
Invoke-EnumerateAzureBlobs -Base corp
[...]
https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
[...]

# Access https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
# Check: <Name>ssh_info.json</Name>
# Access then https://corpcommon.blob.core.windows.net/secrets/ssh_info.json

URLs SAS

Um token de acesso compartilhado (SAS) é um URL que fornece acesso a uma determinada parte de uma conta de armazenamento (pode ser um contêiner completo, um arquivo...) com permissões específicas (leitura, escrita...) sobre os recursos. Se você encontrar um vazado, poderá acessar informações sensíveis, eles se parecem com isso (isso é para acessar um contêiner, se fosse apenas concedendo acesso a um arquivo, o caminho do URL também conteria esse arquivo):

https://<storage_account_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D

Use Storage Explorer para acessar os dados

Comprometer Credenciais

Phishing

Password Spraying / Brute-Force

pageAz - Password Spraying

Referências

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Última actualización