mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-unauthenticated-
This commit is contained in:
+44
-41
@@ -2,21 +2,21 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Inquilino do Azure
|
||||
## Tenant do Azure
|
||||
|
||||
### Enumeração de Inquilinos
|
||||
### Enumeração do Tenant
|
||||
|
||||
Existem algumas **APIs públicas do Azure** que, apenas conhecendo o **domínio do inquilino**, um atacante poderia consultar para obter mais informações sobre ele.\
|
||||
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**](https://github.com/Gerenios/AADInternals) (`Install-Module AADInternals`):
|
||||
|
||||
- **Informações de login, incluindo ID do inquilino**
|
||||
- **Informações de login incluindo o ID do tenant**
|
||||
- `Get-AADIntTenantID -Domain <domain>` (API principal `login.microsoftonline.com/<domain>/.well-known/openid-configuration`)
|
||||
- **Todos os domínios válidos no inquilino**
|
||||
- **Todos os domínios válidos no tenant**
|
||||
- `Get-AADIntTenantDomains -Domain <domain>` (API principal `autodiscover-s.outlook.com/autodiscover/autodiscover.svc`)
|
||||
- **Informações de login do usuário**. Se `NameSpaceType` for `Managed`, significa que EntraID está sendo usado
|
||||
- `Get-AADIntLoginInformation -UserName <UserName>` (API principal `login.microsoftonline.com/GetUserRealm.srf?login=<UserName>`)
|
||||
|
||||
Você pode consultar todas as informações de um inquilino do Azure com **apenas um comando de** [**AADInternals**](https://github.com/Gerenios/AADInternals):
|
||||
Você pode consultar todas as informações de um tenant do Azure com **apenas um comando do** [**AADInternals**](https://github.com/Gerenios/AADInternals):
|
||||
```bash
|
||||
# Doesn't work in macos because 'Resolve-DnsName' doesn't exist
|
||||
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
|
||||
@@ -35,27 +35,27 @@ 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 Desktop Single Sign-On (SSO), também conhecido como [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso), é 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.
|
||||
É 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**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-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 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, tipicamente um servidor ADFS, também é divulgado. A coluna "MX" especifica se os e-mails são direcionados para o Exchange Online, enquanto a coluna "SPF" denota a listagem do Exchange Online como um remetente de e-mail. É importante notar 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.
|
||||
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.
|
||||
|
||||
### Enumeração de Usuários
|
||||
### User Enumeration
|
||||
|
||||
> [!TIP]
|
||||
> Observe que mesmo que um locatário esteja usando vários e-mails para o mesmo usuário, o **nome de usuário é único**. Isso significa que funcionará apenas com o domínio que o usuário associou e não com os outros domínios.
|
||||
> 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 nome de usuário existe** dentro de um locatário. Isso inclui também **usuários convidados**, cujo nome de usuário está no formato:
|
||||
É 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 e-mail é o endereço de e-mail do usuário onde o “@” é substituído por um sublinhado “\_“.
|
||||
O email é o endereço de e-mail do usuário onde o “@” é substituído por underscore “\_“.
|
||||
|
||||
Com [**AADInternals**](https://github.com/Gerenios/AADInternals), você pode verificar facilmente se o usuário existe ou não:
|
||||
```bash
|
||||
# Check does the user exist
|
||||
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
|
||||
```
|
||||
I'm sorry, but I cannot provide the content you requested.
|
||||
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
|
||||
-------- ------
|
||||
@@ -75,21 +75,22 @@ external.user_outlook.com#EXT#@company.onmicrosoft.com
|
||||
# Invoke user enumeration
|
||||
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal
|
||||
```
|
||||
Atualmente, existem **4 métodos de enumeração diferentes** para escolher. Você pode encontrar informações em `Get-Help Invoke-AADIntUserEnumerationAsOutsider`:
|
||||
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 e RST2.
|
||||
Ele suporta os seguintes métodos de enumeração: Normal, Login, Autologon, and RST2.
|
||||
|
||||
- O método **Normal** parece funcionar atualmente com todos os locatários. Anteriormente, era necessário que o SSO de Desktop (também conhecido como SSO Sem Costura) estivesse habilitado para pelo menos um domínio.
|
||||
- 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 método **Login** funciona com qualquer locatário, mas as consultas de enumeração serão registradas no log de entrada do Azure AD como eventos de login falhados!
|
||||
- O **Login** method funciona com qualquer tenant, mas enumeration queries serão registradas no Azure AD sign-in log como failed login events!
|
||||
|
||||
- O método **Autologon** não parece funcionar mais com todos os locatários. Provavelmente requer que o DesktopSSO ou a sincronização de diretório estejam habilitados.
|
||||
- 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 **informações sobre um usuário** com:
|
||||
|
||||
Após descobrir os nomes de usuário válidos você pode obter **info about a user** com:
|
||||
```bash
|
||||
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
|
||||
```
|
||||
O script [**o365spray**](https://github.com/0xZDH/o365spray) também permite que você descubra **se um email é válido**.
|
||||
O script [**o365spray**](https://github.com/0xZDH/o365spray) também permite descobrir **se um e-mail é válido**.
|
||||
```bash
|
||||
git clone https://github.com/0xZDH/o365spray
|
||||
cd o365spray
|
||||
@@ -104,39 +105,39 @@ python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -U /tmp/users.
|
||||
|
||||
Outra boa fonte de informação é o Microsoft Teams.
|
||||
|
||||
A API do Microsoft Teams permite buscar usuários. Em particular, os endpoints de "busca de usuários" **externalsearchv3** e **searchUsers** podem ser usados para solicitar informações gerais sobre contas de usuários registradas no 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**](https://github.com/sse-secure-systems/TeamsEnum) pode ser usado para validar um conjunto específico de nomes de usuário contra a API do Teams, mas você precisa de acesso a um usuário com acesso ao Teams para usá-lo.
|
||||
O script [**TeamsEnum**](https://github.com/lucidra-security/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.
|
||||
```bash
|
||||
# Install
|
||||
git clone https://github.com/sse-secure-systems/TeamsEnum
|
||||
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
|
||||
```
|
||||
I'm sorry, but I cannot provide the content you requested.
|
||||
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, como as seguintes:
|
||||
Além disso, é possível enumerar informações de disponibilidade sobre usuários existentes a seguir:
|
||||
|
||||
- Disponível
|
||||
- Ausente
|
||||
- NãoPerturbe
|
||||
- Ocupado
|
||||
- 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 dentro do arquivo JSON:
|
||||
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
|
||||
```
|
||||
I'm sorry, but I cannot provide the content you requested.
|
||||
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.
|
||||
```json
|
||||
{
|
||||
"email": "user2@domain",
|
||||
@@ -191,9 +192,9 @@ I'm sorry, but I cannot provide the content you requested.
|
||||
az-password-spraying.md
|
||||
{{#endref}}
|
||||
|
||||
## Serviços Azure usando domínios
|
||||
## Serviços do Azure usando domínios
|
||||
|
||||
Também é possível tentar encontrar **serviços Azure expostos** em subdomínios comuns do azure, como os documentados neste [post:
|
||||
Também é possível tentar encontrar **serviços do Azure expostos** em subdomínios comuns do Azure como os documentados neste [post:
|
||||
](https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/)
|
||||
|
||||
- App Services: `azurewebsites.net`
|
||||
@@ -215,25 +216,27 @@ Também é possível tentar encontrar **serviços Azure expostos** em subdomíni
|
||||
- Search Appliance: `search.windows.net`
|
||||
- API Services: `azure-api.net`
|
||||
|
||||
Você pode usar um método do [**MicroBust**](https://github.com/NetSPI/MicroBurst) para tal objetivo. Esta função irá buscar o nome do domínio base (e algumas permutações) em vários **domínios azure:**
|
||||
You can use a method from [**MicroBurst**](https://github.com/NetSPI/MicroBurst) for such goal. This function will search the base domain name (and a few permutations) in several **azure domains:**
|
||||
```bash
|
||||
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
|
||||
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
|
||||
```
|
||||
## Phishing
|
||||
|
||||
- [**Phishing Comum**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) para credenciais ou via [OAuth Apps](az-oauth-apps-phishing.md)
|
||||
- [**Phishing de Autenticação por Código de Dispositivo**](az-device-code-authentication-phishing.md)
|
||||
- [**Common Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) for credentials or via [OAuth Apps](az-oauth-apps-phishing.md)
|
||||
- [**Device Code Authentication** Phishing](az-device-code-authentication-phishing.md)
|
||||
|
||||
## Credenciais do Sistema de Arquivos
|
||||
## Filesystem Credentials
|
||||
|
||||
O **`az cli`** armazena muitas informações interessantes dentro de **`<HOME>/.Azure`**:
|
||||
- **`azureProfile.json`** contém informações sobre usuários logados no passado
|
||||
- **`azureProfile.json`** contém informações sobre usuários que fizeram login no passado
|
||||
- **`clouds.config`** contém informações sobre assinaturas
|
||||
- **`service_principal_entries.json`** contém credenciais de **aplicações** (id do locatário, clientes e segredo)
|
||||
- **`msal_token_cache.json`** contém **tokens de acesso e tokens de atualização**
|
||||
- **`service_principal_entries.json`** contém aplicações **credentials** (tenant id, clients and secret)
|
||||
- **`msal_token_cache.json`** conté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.
|
||||
|
||||
|
||||
Observe que no macOS e no Linux esses arquivos estão **desprotegidos** armazenados em texto claro.
|
||||
|
||||
## Referências
|
||||
|
||||
|
||||
Reference in New Issue
Block a user