Az - Unauthenticated Enum & Initial Entry

Aprende a hackear AWS de cero a héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Inquilino de Azure

Enumeración del Inquilino

Existen algunas APIs públicas de Azure que, solo conociendo el dominio del inquilino, un atacante podría consultar para recopilar más información al respecto. Puedes consultar directamente la API o utilizar la biblioteca de PowerShell AADInternals:

APIInformaciónFunción de AADInternals

login.microsoftonline.com/<dominio>/.well-known/openid-configuration

Información de inicio de sesión, incluido el ID del inquilino

Get-AADIntTenantID -Domain <dominio>

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

Todos los dominios del inquilino

Get-AADIntTenantDomains -Domain <dominio>

login.microsoftonline.com/GetUserRealm.srf?login=<NombreUsuario>

Información de inicio de sesión del inquilino, incluido el Nombre del inquilino y el dominio del tipo de autenticación. Si NameSpaceType es Managed, significa que se utiliza AzureAD.

Get-AADIntLoginInformation -UserName <NombreUsuario>

login.microsoftonline.com/common/GetCredentialType

Información de inicio de sesión, incluida la información de SSO de escritorio

Get-AADIntLoginInformation -UserName <NombreUsuario>

Puedes consultar toda la información de un inquilino de Azure con solo un comando de la biblioteca de AADInternals:

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

Ejemplo de salida de la información del inquilino de 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

Es posible observar detalles sobre el nombre, ID y nombre de "marca" del inquilino. Además, se muestra el estado del Inicio de sesión único en el escritorio (SSO), también conocido como SSO sin interrupciones. Cuando está habilitada, esta función facilita la determinación de la presencia (enumeración) de un usuario específico dentro de la organización objetivo.

Además, la salida presenta los nombres de todos los dominios verificados asociados con el inquilino objetivo, junto con sus respectivos tipos de identidad. En el caso de los dominios federados, también se revela el Nombre de dominio completo (FQDN) del proveedor de identidad en uso, típicamente un servidor ADFS. La columna "MX" especifica si los correos electrónicos se envían a Exchange Online, mientras que la columna "SPF" denota la inclusión de Exchange Online como remitente de correos electrónicos. Es importante tener en cuenta que la función actual de reconocimiento no analiza las declaraciones "include" dentro de los registros SPF, lo que puede resultar en falsos negativos.

Enumeración de Usuarios

Es posible verificar si un nombre de usuario existe dentro de un inquilino. Esto incluye también a los usuarios invitados, cuyo nombre de usuario tiene el formato:

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

El correo electrónico es la dirección de correo electrónico del usuario donde en “@” se reemplaza con guion bajo “_“.

Con AADInternals, puedes verificar fácilmente si el usuario existe o no:

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

Enumeración y Entrada Inicial sin Autenticación

En esta sección, exploraremos cómo llevar a cabo la enumeración y obtener acceso inicial a recursos en Azure sin la necesidad de autenticación.

Enumeración sin Autenticación

Descubrimiento de Instancias de Servicios

Algunos servicios en Azure pueden exponer instancias sin necesidad de autenticación. Puedes descubrir estas instancias utilizando herramientas como nmap o Masscan.

nmap -Pn --open -p 80,443,5985,5986 <IP_Rango>

Enumeración de Almacenamiento

Puedes enumerar recursos de almacenamiento sin autenticación utilizando herramientas como Azure Storage Explorer o AzCopy.

Entrada Inicial sin Autenticación

Acceso a Azure Blob Storage

Si encuentras un contenedor de Blob Storage sin autenticación, puedes intentar acceder a él utilizando herramientas como Azure Storage Explorer o AzCopy.

azcopy copy "http://<storage_account>.blob.core.windows.net/<container>/*" .

Recuerda siempre obtener permiso antes de realizar cualquier acción de enumeración o acceso a recursos en Azure.

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

También puedes usar un archivo de texto que contenga una dirección de correo electrónico por fila:

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

Hay tres métodos de enumeración diferentes para elegir:

MétodoDescripción

Normal

Esto se refiere al API GetCredentialType mencionado anteriormente. El método predeterminado.

Login

Este método intenta iniciar sesión como el usuario. Nota: las consultas se registrarán en el registro de inicio de sesión.

Autologon

Este método intenta iniciar sesión como el usuario a través del punto de conexión de autologon. ¡Las consultas no se registran en el registro de inicio de sesión! Por lo tanto, también funciona bien para ataques de spray de contraseñas y de fuerza bruta.

Después de descubrir los nombres de usuario válidos, puedes obtener información sobre un usuario con:

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

El script o365creeper también te permite descubrir si un correo electrónico es válido.

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

Enumeración de usuarios a través de Microsoft Teams

Otra buena fuente de información es Microsoft Teams.

La API de Microsoft Teams permite buscar usuarios. En particular, los puntos finales de "búsqueda de usuario" externalsearchv3 y searchUsers podrían ser utilizados para solicitar información general sobre cuentas de usuario inscritas en Teams.

Dependiendo de la respuesta de la API, es posible distinguir entre usuarios que no existen y usuarios existentes que tienen una suscripción válida a Teams.

El script TeamsEnum podría ser utilizado para validar un conjunto dado de nombres de usuario contra la API de Teams.

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

Enumeración y Entrada Inicial sin Autenticación

En esta sección, exploraremos cómo llevar a cabo la enumeración y obtener acceso inicial a recursos en Azure sin la necesidad de autenticación.

Enumeración sin Autenticación

Para enumerar recursos en Azure sin autenticación, se pueden utilizar técnicas como la enumeración de servicios expuestos públicamente, la búsqueda de información sensible en repositorios públicos y la identificación de posibles puntos de entrada.

Entrada Inicial sin Autenticación

Una vez que se ha recopilado información a través de la enumeración sin autenticación, se puede intentar obtener acceso inicial mediante la explotación de configuraciones débiles, la identificación de vulnerabilidades conocidas y la realización de ataques de fuerza bruta contra posibles puntos de entrada descubiertos.

Es importante recordar que estas actividades deben llevarse a cabo de manera ética y con la debida autorización en entornos controlados para evitar consecuencias legales.

[-] 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)

Además, es posible enumerar información de disponibilidad sobre usuarios existentes como la siguiente:

  • Disponible

  • Ausente

  • No molestar

  • Ocupado

  • Desconectado

Si se configura un mensaje de fuera de la oficina, también es posible recuperar el mensaje usando TeamsEnum. Si se especificó un archivo de salida, los mensajes de fuera de la oficina se almacenan automáticamente dentro del archivo JSON:

jq . teamsenum-output.json

Enumeración y Entrada Inicial sin Autenticación

En esta sección, exploraremos cómo llevar a cabo la enumeración y la entrada inicial en Azure sin la necesidad de autenticación. Esto puede ser útil para identificar posibles puntos de entrada y debilidades en la configuración de seguridad de Azure.

Enumeración sin Autenticación

La enumeración sin autenticación implica recopilar información sobre recursos, configuraciones y permisos en Azure sin la necesidad de credenciales de inicio de sesión. Esto puede incluir la identificación de grupos de recursos, máquinas virtuales, bases de datos, claves de API expuestas y otros activos importantes.

Entrada Inicial sin Autenticación

Una vez que se ha recopilado información a través de la enumeración sin autenticación, se puede intentar realizar una entrada inicial sin la necesidad de credenciales. Esto podría implicar la explotación de configuraciones incorrectas, la falta de parches de seguridad o la utilización de credenciales predeterminadas débiles para acceder a recursos en Azure.

Es importante tener en cuenta que la realización de actividades de enumeración y entrada inicial sin autenticación en Azure puede tener implicaciones legales y éticas, y solo debe llevarse a cabo como parte de un pentesting autorizado.

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

Servicios de Azure

Ahora que conocemos los dominios que está utilizando el inquilino de Azure, es hora de intentar encontrar los servicios de Azure expuestos.

Puedes utilizar un método de MicroBust para este objetivo. Esta función buscará el nombre de dominio base (y algunas permutaciones) en varios dominios de servicios de Azure:

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

Almacenamiento Abierto

Podrías descubrir almacenamiento abierto con una herramienta como InvokeEnumerateAzureBlobs.ps1 que utilizará el archivo Microburst/Misc/permitations.txt para generar permutaciones (muy simples) e intentar encontrar cuentas de almacenamiento abiertas.

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

Un token de acceso compartido (SAS) es una URL que proporciona acceso a cierta parte de una cuenta de almacenamiento (puede ser un contenedor completo, un archivo...) con permisos específicos (lectura, escritura...) sobre los recursos. Si encuentras uno filtrado, podrías acceder a información sensible, se ven así (esto es para acceder a un contenedor, si solo otorgara acceso a un archivo, la ruta de la URL también contendría ese archivo):

https://<nombre_cuenta_almacenamiento>.blob.core.windows.net/nuevocontenedor?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

Utiliza Storage Explorer para acceder a los datos

Compromiso de Credenciales

Phishing

Password Spraying / Fuerza Bruta

pageAz - Password Spraying

Referencias

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización