Az - Pass the PRT
Last updated
Last updated
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)
SSO Durumu bölümünde, AzureAdPrt
değerinin EVET olarak ayarlandığını görmelisiniz.
Aynı çıktıda, cihazın Azure'a katılıp katılmadığını da görebilirsiniz ( AzureAdJoined
alanında):
PRT çerezi aslında x-ms-RefreshTokenCredential
olarak adlandırılır ve bir JSON Web Token (JWT) içerir. Bir JWT, 3 bölüm içerir: başlık, yük ve imza, .
ile ayrılmış ve tümü url güvenli base64 ile kodlanmıştır. Tipik bir PRT çerezi aşağıdaki başlık ve gövdeyi içerir:
Gerçek Primary Refresh Token (PRT), refresh_token
içinde kapsüllenmiştir ve bu, Azure AD'nin kontrolündeki bir anahtar tarafından şifrelenmiştir, bu da içeriğini bizim için opak ve şifrelenemez hale getirir. is_primary
alanı, bu token içinde birincil yenileme token'ının kapsüllendiğini belirtir. Çerezin, hedeflendiği belirli oturumla bağlı kalmasını sağlamak için, request_nonce
logon.microsoftonline.com
sayfasından iletilir.
LSASS süreci, KDF bağlamını TPM'ye gönderecek ve TPM, session key (cihaz AzureAD'ye kaydedildiğinde toplanan ve TPM'de saklanan) ve önceki bağlamı kullanarak bir anahtar türetecek ve bu türetilmiş anahtar, PRT çerezini (JWT) imzalamak için kullanılacaktır.
KDF bağlamı, AzureAD'den bir nonce ve PRT'yi içeren bir JWT ile karıştırılmış bir bağlamdır (rastgele baytlar).
Bu nedenle, PRT TPM içinde bulunduğu için çıkarılamasa da, LSASS'ı kötüye kullanarak yeni bağlamlardan türetilmiş anahtarlar talep etmek ve üretilen anahtarları Çerezleri imzalamak için kullanmak mümkündür.
Normal bir kullanıcı olarak, LSASS'tan SSO verileri talep ederek PRT kullanımını talep etmek mümkündür. Bu, Web Hesap Yöneticisi (token broker) üzerinden token talep eden yerel uygulamalar gibi yapılabilir. WAM, talebi LSASS'a iletir ve LSASS, imzalı PRT beyanı kullanarak token talep eder. Ya da PRT çerezinin Azure AS giriş sayfalarına yapılan istekleri kimlik doğrulamak için header olarak kullanıldığı tarayıcı tabanlı (web) akışları ile yapılabilir.
SYSTEM olarak, eğer TPM tarafından korunmuyorsa PRT'yi çalabilir veya LSASS'ta PRT anahtarlarıyla etkileşimde bulunabilirsiniz.
Bu yöntem hakkında daha fazla bilgi için bu gönderiyi kontrol edin. ROADtoken, doğru dizinden BrowserCore.exe
çalıştıracak ve bunu PRT çerezi elde etmek için kullanacaktır. Bu çerez daha sonra ROADtools ile kimlik doğrulamak ve kalıcı bir yenileme token'ı elde etmek için kullanılabilir.
Geçerli bir PRT çerezi oluşturmak için ihtiyacınız olan ilk şey bir nonce'dır. Bunu şu şekilde alabilirsiniz:
Veya roadrecon kullanarak:
Sonra yeni bir PRT almak için roadtoken kullanabilirsiniz (saldırı için kullanıcının bir sürecinden aracı çalıştırın):
Bir satırlık:
Ardından oluşturulan çerezi kullanarak token'lar oluşturabilir ve Azure AD Graph veya Microsoft Graph kullanarak giriş yapabilirsiniz:
Get-AADIntUserPRTToken
kullanıcının PRT token'ını Azure AD bağlı veya Hibrit bağlı bilgisayardan alır. PRT token'ını almak için BrowserCore.exe
kullanır.
Ya da Mimikatz'tan değerleriniz varsa, bir token oluşturmak için AADInternals'ı da kullanabilirsiniz:
https://login.microsoftonline.com adresine gidin, login.microsoftonline.com için tüm çerezleri temizleyin ve yeni bir çerez girin.
Sonra https://portal.azure.com adresine gidin.
Geri kalan varsayılan olmalıdır. Sayfayı yenileyebildiğinizden ve çerezin kaybolmadığından emin olun, eğer kaybolursa bir hata yapmış olabilirsiniz ve süreci tekrar gözden geçirmeniz gerekebilir. Eğer kaybolmuyorsa, her şey yolunda olmalı.
PRT (Birincil Yenileme Token'ı) LSASS'tan (Yerel Güvenlik Otoritesi Alt Sistem Servisi) çıkarılır ve sonraki kullanım için saklanır.
Oturum Anahtarı daha sonra çıkarılır. Bu anahtar başlangıçta verildiği ve ardından yerel cihaz tarafından yeniden şifrelenmesi gerektiğinden, bir DPAPI anahtarını kullanarak şifre çözme gerektirir. DPAPI (Veri Koruma API) hakkında ayrıntılı bilgi bu kaynaklarda bulunabilir: HackTricks ve uygulamasını anlamak için Pass-the-cookie attack sayfasına bakabilirsiniz.
Oturum Anahtarı şifresi çözüldükten sonra, PRT için türetilmiş anahtar ve bağlam elde edilir. Bunlar PRT çerezi oluşturmak için kritik öneme sahiptir. Özellikle, türetilmiş anahtar, çerezi oluşturan JWT'yi (JSON Web Token) imzalamak için kullanılır. Bu sürecin kapsamlı bir açıklaması Dirk-jan tarafından sağlanmıştır, buradan erişebilirsiniz.
Eğer PRT TPM içinde ve lsass
içinde değilse, mimikatz bunu çıkaramayacaktır.
Ancak, TPM'den bir bağlamdan türetilmiş bir anahtar almak ve bunu bir çerezi imzalamak için kullanmak mümkün olacaktır (seçenek 3'ü kontrol edin).
Bu ayrıntıları çıkarmak için gerçekleştirilen sürecin derinlemesine açıklamasını burada bulabilirsiniz: https://dirkjanm.io/digging-further-into-the-primary-refresh-token/
Bu, Ağustos 2021 düzeltmelerinden sonra diğer kullanıcıların PRT token'larını almak için tam olarak çalışmayacaktır, çünkü yalnızca kullanıcı kendi PRT'sini alabilir (yerel bir yönetici diğer kullanıcıların PRT'lerine erişemez), ancak kendi PRT'sine erişebilir.
mimikatz kullanarak PRT'yi çıkarabilirsiniz:
(Images from https://blog.netwrix.com/2023/05/13/pass-the-prt-overview)
Prt olarak etiketlenmiş kısmı kopyalayın ve kaydedin.
Ayrıca aşağıda vurgulanan ProofOfPossesionKey
alanının KeyValue
kısmını içeren oturum anahtarını da çıkarın. Bu şifrelenmiştir ve bunu çözmek için DPAPI anahtarlarımıza ihtiyacımız olacak.
Eğer herhangi bir PRT verisi görmüyorsanız, bu PRT'niz olmadığı anlamına gelebilir çünkü cihazınız Azure AD'ye bağlı değil veya eski bir Windows 10 sürümü kullanıyor olabilirsiniz.
Oturum anahtarını şifrelemek için yetkilerinizi SYSTEM seviyesine yükseltmeniz gerekiyor, böylece bilgisayar bağlamında çalışarak DPAPI anahtarını kullanarak şifreleyebilirsiniz. Bunu yapmak için aşağıdaki komutları kullanabilirsiniz:
Şimdi hem Context değerini kopyalamak istiyorsunuz:
Hem de türetilmiş anahtar değerini:
Son olarak, bu bilgileri PRT çerezleri oluşturmak için kullanabilirsiniz:
https://login.microsoftonline.com adresine gidin, login.microsoftonline.com için tüm çerezleri temizleyin ve yeni bir çerez girin.
Sonra https://portal.azure.com adresine gidin.
Geri kalan varsayılan olmalıdır. Sayfayı yenileyebildiğinizden ve çerezin kaybolmadığından emin olun, eğer kaybolursa bir hata yapmış olabilirsiniz ve süreci tekrar gözden geçirmeniz gerekebilir. Eğer kaybolmuyorsa, her şey yolunda olmalı.
Öncelikle PRT'yi yenileyin, bu roadtx.prt
dosyasına kaydedilecektir:
Artık roadtx browserprtauth
ile etkileşimli tarayıcı kullanarak token talep edebiliriz. roadtx describe
komutunu kullanırsak, erişim tokeninin bir MFA talebi içerdiğini görürüz çünkü bu durumda kullandığım PRT de bir MFA talebine sahipti.
Mimikatz tarafından dökülen bağlam ve türetilmiş anahtar ile, yeni bir imzalı çerez oluşturmak için roadrecon kullanmak mümkündür:
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)