
PrivescCheck v2026.08.19-1
Script di enumerazione per escalation dei privilegi per Windows
PrivescCheck
Identifica rapidamente vulnerabilità e problemi di configurazione comuni di Windows che non sono necessariamente coperti dagli standard di sicurezza pubblici, e raccogli informazioni utili per attività di exploitation e post-exploitation.
[!IMPORTANT] Un aspetto importante da tenere presente quando si utilizza questo strumento è che tutti i controlli di controllo degli accessi vengono eseguiti nel contesto dell'utente corrente. Pertanto, se viene eseguito con privilegi di amministratore, molti controlli di vulnerabilità vengono effettivamente saltati per evitare di generare risultati errati.
🚀 Avvio Rapido
Scarica lo script qui: PrivescCheck.ps1
[!TIP] Il link sopra può essere utilizzato anche direttamente in un terminale PowerShell con
(New-Object Net.WebClient).DownloadString(...).
Caso d'uso 1 (Pentest): Esegui Solo i Controlli di Base
Esiste un modo ovvio per elevare i privilegi localmente?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck"
Caso d'uso 2 (Ricerca): Esegui Controlli Estesi + Scrivi Report Leggibili
Esistono informazioni aggiuntive che possono essere sfruttate per la post-exploitation o per trovare vulnerabilità in software di terze parti?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML"
Caso d'uso 3 (Audit): Esegui Tutti i Controlli + Scrivi Tutti i Report
Esistono problemi di configurazione non coperti dagli standard di sicurezza comuni?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML,CSV,XML"
📖 Utilizzo Dettagliato
Invoke-PrivescCheck [-Extended] [-Audit] [-Experimental] [-Report <PREFIX>]
[-Format <FORMAT>[,...]] [-Risky] [-Silent] [-Force]
-Extended
Include tutti i controlli "estesi" nella scansione (vedi README).
-Audit
Include tutti i controlli "audit" nella scansione.
-Experimental
Include tutti i controlli "sperimentali" nella scansione. Utilizzare
solo se si sa cosa si sta facendo.
-Report <PREFIX>
Genera almeno un file di report. Il nome del file di output sarà
"PREFIX.txt" per impostazione predefinita. L'estensione viene
aggiunta automaticamente in base al formato del report (vedi
"-Format <FORMAT>[,...]").
-Format <FORMAT>[,...]
Specifica il formato del/i file di report di output. Se non
impostato, il valore predefinito è "TXT". I formati supportati sono:
"TXT", "HTML", "CSV" e "XML".
-Risky
Include i controlli contrassegnati come "rischiosi", ovvero controlli
che potrebbero attivare un'azione di blocco da parte di una soluzione
di protezione degli endpoint. Usare con cautela.
-Silent
Sopprime l'output del terminale. Può essere utile se si desidera
eseguire lo script come parte di un file batch, ad esempio in
un'attività pianificata.
-Force
Forza l'esecuzione e ignora gli avvisi. Tipicamente, lo script si
ferma se viene eseguito con privilegi di amministratore. Usare questa
opzione per eseguirlo comunque.
Formato Report > TXT (-Format TXT)
Usa l'opzione -Report <PREFIX> (con -Format TXT) per specificare che desideri generare un report di testo grezzo. L'output è simile a quello che vedresti nel terminale, tranne per il fatto che contiene solo caratteri ASCII per una migliore compatibilità (retro-)con tutti gli editor di testo.

Formato Report > HTML (-Format HTML)
Usa l'opzione -Report <PREFIX> con -Format HTML per specificare che desideri generare un report HTML. Il file di output può essere aperto in un browser web. È più comodo per visualizzare i dati rispetto al report di testo grezzo. Inoltre, offre funzionalità di ordinamento e filtraggio!

Formato Report > CSV (-Format CSV) e XML (-Format XML)
Usa l'opzione -Report <PREFIX> con -Format CSV o -Format XML per specificare che desideri generare un report CSV o XML. Il file di output è pensato per facilitare l'analisi dei risultati da parte di strumenti di reportistica automatizzati.
[!NOTE] Sebbene il formato di output non sia documentato (ancora), puoi facilmente capirlo analizzando la struttura di un file già generato. Puoi usare il valore
Iddi ogni controllo per identificarli in modo univoco.
Tipo di Controllo > Base
I controlli di tipo Base verranno sempre eseguiti, a meno che lo script non venga eseguito come amministratore. Sono principalmente pensati per identificare vulnerabilità di elevazione dei privilegi o altri problemi importanti.
Tipo di Controllo > Extended (-Extended)
I controlli di tipo Extended possono essere eseguiti solo se l'opzione -Extended viene specificata sulla riga di comando. Sono principalmente pensati per fornire informazioni aggiuntive che potrebbero essere utili per lo sviluppo di exploit o per la post-exploitation.
Tipo di Controllo > Audit (-Audit)
I controlli di tipo Audit possono essere eseguiti solo se l'opzione -Audit viene specificata sulla riga di comando. Sono principalmente pensati per fornire informazioni rilevanti nel contesto di un audit di configurazione.
💡 Suggerimenti e Trucchi
Criteri di Esecuzione di PowerShell
Per impostazione predefinita, i criteri di esecuzione di PowerShell sono impostati su Restricted sui client e RemoteSigned sui server, quando viene avviato un nuovo processo powershell.exe. Questi criteri bloccano l'esecuzione di script (non firmati), ma possono essere sovrascritti nell'ambito corrente come segue.
Set-ExecutionPolicy Bypass -Scope Process -Force
. .\PrivescCheck.ps1
Tuttavia, questo trucco non funziona quando i criteri di esecuzione vengono applicati tramite un GPO. In questo caso, dopo aver avviato una nuova sessione PowerShell, puoi caricare lo script come segue.
Get-Content .\PrivescCheck.ps1 | Out-String | Invoke-Expression
PowerShell Versione 2
Un modo comune per bypassare la Constrained Language Mode consiste nell'usare PSv2 poiché non implementa questa protezione. Pertanto, una parte significativa dello sforzo di sviluppo va nel mantenere questa retro-compatibilità.
[!NOTE] Sebbene PowerShell versione 2
sia ancora abilitato per impostazione predefinita sulle versioni recenti di Windows(Rimozione di PowerShell 2.0 da Windows), non può essere eseguito senza il framework .Net versione 2.0, che richiede un'installazione manuale.
Timeout di Metasploit
Se esegui questo script all'interno di una sessione Meterpreter, probabilmente riceverai un errore di "timeout". Questo perché Metasploit utilizza un valore di timeout predefinito di 15 secondi, che non è sufficiente per completare un'esecuzione tipica dello script.
meterpreter > load powershell
Loading extension powershell...Success.
meterpreter > powershell_import /local/path/to/PrivescCheck.ps1
[+] File successfully imported. No result was returned.
meterpreter > powershell_execute "Invoke-PrivescCheck"
[-] Error running command powershell_execute: Rex::TimeoutError Operation timed out.
È possibile impostare un timeout diverso grazie all'opzione -t del comando sessions (documentazione). Nell'esempio seguente, viene impostato un timeout di 2 minuti per la sessione con ID 1, ma potresti voler impostare un valore ancora più alto.
msf6 exploit(multi/handler) > sessions -t 120 -i 1
[*] Starting interaction with 1...
meterpreter > powershell_execute "Invoke-PrivescCheck"
🏗️ Build
Aggiorna i Dati
Alcuni controlli si basano su dati online (es. database dei driver LOL), ma lo script è pensato per funzionare offline. Per risolvere questo problema, i dati sono incorporati nello script e pertanto devono essere aggiornati regolarmente. Questo processo è completamente automatizzato nella versione ufficiale, ma se desideri creare lo script localmente, puoi opzionalmente farlo manualmente.
powershell -ep bypass ". .\build\Build.ps1; Update-LolDriverFile"
Crea lo Script
Creare lo script è semplice come eseguire il comando seguente. Il file di output verrà salvato nella cartella .\dist\.
powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck"
Lo script di build utilizza un generatore di numeri pseudo-casuali con un seed generato casualmente per scegliere un nome di variabile per ogni modulo. Se desideri generare risultati riproducibili tra le build, puoi scegliere di riutilizzare il seed generato in precedenza usando l'opzione -NoNewSeed.
powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewSeed"
Lo script di build utilizza la crittografia AES con una chiave generata casualmente per offuscare il contenuto di ogni modulo. Se desideri generare risultati riproducibili tra le build, puoi scegliere di riutilizzare la chiave generata in precedenza usando l'opzione -NoNewKey.
powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewKey"
📑 Crediti
- Elenco di parole - CBHue/PyFuscation
- Elenco di driver vulnerabili noti - https://www.loldrivers.io/