# Reconocimiento externo

Alguna información puede obtenerse de forma manual al realizar una petición contra determinados recursos de Microsoft. No obstante, existen varias herramientas y *scripts* que permiten automatizar algunas acciones.

## <mark style="color:red;">Enumeración del Tenant</mark>

Conociendo un email de la organización, se podría obtener información asociada al **Tenant** donde se encuentra.

### Microsoft - getuserrealm

{% code overflow="wrap" %}

```bash
curl "https://login.microsoftonline.com/getuserrealm.srf?login=<Email corporativo>&xml=1"
```

{% endcode %}

<pre class="language-html"><code class="lang-html">&#x3C;RealmInfo Success="true">
&#x3C;State>4&#x3C;/State>
&#x3C;UserState>1&#x3C;/UserState>
<strong>&#x3C;Login>xtormin@xtormincorp.com&#x3C;/Login>
</strong>&#x3C;NameSpaceType>Managed&#x3C;/NameSpaceType>
<strong>&#x3C;DomainName>xtormincorp.com&#x3C;/DomainName>
</strong>&#x3C;IsFederatedNS>false&#x3C;/IsFederatedNS>
<strong>&#x3C;FederationBrandName>Xtormin Corp&#x3C;/FederationBrandName>
</strong>&#x3C;CloudInstanceName>microsoftonline.com&#x3C;/CloudInstanceName>
&#x3C;CloudInstanceIssuerUri>urn:federation:MicrosoftOnline&#x3C;/CloudInstanceIssuerUri>
&#x3C;/RealmInfo>
</code></pre>

### Microsoft - openid-configuration

Para obtener el ID del **Tenant** e información de *OpenID*, se puede utilizar el siguiente recurso, donde se indicará el dominio objetivo:

```bash
curl "https://login.microsoftonline.com/<dominio>/.well-known/openid-configuration"
```

* [**ADDInternals**](/pentesting-en-infraestructuras/cloud/azure/herramientas.md#addinternals)**:**

```powershell
# Obtener toda la información
Invoke-AADIntReconAsOutsider -DomainName <dominio>
Invoke-AADIntReconAsOutsider -DomainName xtormincorp.onmicrosoft.com

# Nombre del Tenant, autenticación, nombre, etc.
Get-AADIntLoginInformation -UserName <Email corporativo>

# Obtener ID del tenant
Get-AADIntTenantID -Domain xtormincorp.onmicrosoft.com

# Obtener los dominios de los tenant
Get-AADIntTenantDomains -Domain xtormincorp.onmicrosoft.com
```

## <mark style="color:red;">Enumeración de emails</mark>

Se puede obtener una lista inicial de emails de la organización por medio de técnicas de OSINT o una lista de posibles emails.

Posteriormente, <mark style="color:red;">**si se quiere comprobar si un email existe o no en el Tenant, sin agotar intentos de inicio de sesión**</mark>, se puede usar el recurso *GetCredentialType* para ello, se realiza la siguiente petición POST indicando el email:

```
https://login.microsoftonline.com/common/GetCredentialType
```

<pre class="language-http" data-overflow="wrap"><code class="lang-http">POST /common/GetCredentialType HTTP/1.1
Host: login.microsoftonline.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:123.0) Gecko/20100101 Firefox/123.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Length: 76
Content-Type: application/json

{
<strong>"username":"xtormin@xtormincorp.com",
</strong>"isOtherIdpSupported":  true
}
</code></pre>

### O365EmailValidator

<https://github.com/xtormin/PowerPentest/tree/4bd914593a03128c77ed1747c14c843b3f966563/Azure>

[**O365EmailValidator**](#o365emailvalidator)**:** Si se desea **automatizar** esto, también se puede utilizar el siguiente *script* indicando la lista de *emails* que se quiera comprobar.

{% code overflow="wrap" %}

```powershell
wget "https://github.com/xtormin/PowerPentest/blob/4bd914593a03128c77ed1747c14c843b3f966563/Azure/O365EmailValidator.ps1"
```

{% endcode %}

```
. .\O365EmailValidator.ps1
```

{% code overflow="wrap" %}

```powershell
# Ejecución del script con una lista de posibles emails
Invoke-O365EmailValidator -file emails.txt -output emails_validated.txt
```

{% endcode %}

Ejemplo de `emails.txt`:

```
ejemplo01@xtormincorp.com
ejemplo02@xtormincorp.com
ejemplo03@xtormincorp.com
```

## <mark style="color:red;">Enumeración de subdominios</mark>

### MicroBurst

[**MicroBust**](#microbust)**:** <https://github.com/NetSPI/MicroBurst>

```powershell
# Enumeración de subdominios de xtormincorp.com
# Para ello se usa el nombre base "xtormincorp"
Invoke-EnumerateAzureSubDomains -Base xtormincorp -Verbose
```

## <mark style="color:red;">Enumeración de Blobs</mark>

### MicroBurst

[**MicroBust**](#microbust)**:** <https://github.com/NetSPI/MicroBurst>

```powershell
# Enumeración de blobs de xtormincorp.com
# Para ello se usa el nombre base "xtormincorp"
Invoke-EnumerateAzureBlobs -Base xtormincorp -Verbose
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.xtormin.com/pentesting-en-infraestructuras/cloud/azure/metodologia-de-azure-pentest/reconocimiento-externo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
