
PrivescCheck v2026.09.21-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 saltati per evitare di generare risultati errati.
Avvio Rapido
Scarica lo script qui: PrivescCheck.ps1
[!TIP] Il link sopra può anche essere utilizzato direttamente in un terminale PowerShell con
(New-Object Net.WebClient).DownloadString(...).
Caso d'Uso 1: Valutazione Rapida
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Report TXT,HTML"
Caso d'Uso 2: Valutazione Estesa
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report TXT,HTML"
Caso d'Uso 3: Valutazione Completa
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report ALL"
Utilizzo Dettagliato
Invoke-PrivescCheck [-Extended] [-Audit] [-Risky] [-Report <FORMAT>[,...]]
[-FilePath <PREFIX>] [-Silent] [-Force]
-Extended
Include all "extended" checks in the scan.
-Audit
Include all "audit" checks in the scan.
-Risky
Include all "risky" checks in the scan. Those are checks that are
likely to trigger active EDR counter measures due to their behavior.
-Report <FORMAT>[,...]
Specify output report file formats (TXT, HTML, CSV, XML). Use alias
'ALL' to generate all report files. By default, the output filename
is automatically generated. Use option '-FilePath' to specify one
explicitly.
-FilePath <PREFIX>
Specify the output report file name or directory. The file extension
is automatically appended. If a directory path is supplied, the
filename is automatically generated at runtime.
-Silent
Suppress terminal output. This can be useful if you want to run the
script as part of a batch file, in a scheduled task for instance.
-Force
Force execution and ignore warnings. Typically, the script stops if
it is executed with administrator privileges. Use this option to
execute it anyway.
Formati dei File di Report
Formato del File di Report > TXT
Usa l'opzione -Report TXT per generare un report in testo non formattato. L'output è simile all'output del terminale, tranne per il fatto che contiene solo caratteri ASCII per una migliore compatibilità con gli editor di testo.

Formato del File di Report > HTML
Usa l'opzione -Report HTML per generare un report HTML. Il file di output può essere aperto in un browser web. Non è richiesta una connessione Internet poiché non ha dipendenze esterne. È più comodo per visualizzare i dati rispetto al report in testo non formattato. Inoltre, offre capacità di ordinamento e filtraggio!

Formato del File di Report > CSV o XML
Usa l'opzione -Report CSV o -Report XML per 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 (ancora) documentato, puoi facilmente capirlo analizzando la struttura di un file già generato. Puoi usare il valore
Iddi ciascun controllo come identificatore univoco.
Tipi di Controllo
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 privilege escalation, o altri problemi importanti.
Tipo di Controllo > Extended
I controlli di tipo Extended possono essere eseguiti solo se l'opzione -Extended è specificata sulla riga di comando. Sono principalmente pensati per fornire informazioni aggiuntive che potrebbero essere utili per lo sviluppo di exploit, o per il post-exploitation.
Tipo di Controllo > Audit
I controlli di tipo Audit possono essere eseguiti solo se l'opzione -Audit è specificata sulla riga di comando. Sono principalmente pensati per fornire informazioni rilevanti nel contesto di un audit di configurazione.
Suggerimenti e Trucchi
Execution Policy di PowerShell
Per impostazione predefinita, la execution policy di PowerShell è impostata su Restricted sui client, e su RemoteSigned sui server, quando viene avviato un nuovo processo powershell.exe. Queste policy bloccano l'esecuzione di script (non firmati), ma possono essere sovrascritte nell'ambito corrente come segue.
Set-ExecutionPolicy Bypass -Scope Process -Force
. .\PrivescCheck.ps1
Tuttavia, questo trucco non funziona quando l'execution policy viene imposta 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 aggirare la Constrained Language Mode consiste nell'usare PSv2 poiché non implementa questa protezione. Pertanto, una parte significativa dello sforzo di sviluppo è dedicata al mantenimento di questa retrocompatibilità.
[!NOTE] Sebbene la versione 2 di PowerShell
sia ancora abilitata per impostazione predefinita sulle versioni recenti di Windows(Rimozione di PowerShell 2.0 da Windows), non può essere eseguita 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 otterrai un errore di "timeout". Questo perché Metasploit usa un valore di timeout predefinito di 15 secondi, che non è sufficiente per completare una tipica esecuzione 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
Aggiornare i Dati
Alcuni dei 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 release ufficiale, ma se vuoi compilare lo script localmente, puoi facoltativamente farlo manualmente.
powershell -ep bypass ". .\build\Build.ps1; Update-LolDriverFile"
Compilare lo Script
Compilare 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 usa un generatore di numeri pseudo-casuali con un seed generato casualmente per scegliere un nome di variabile per ogni modulo. Se vuoi 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 usa la crittografia AES con una chiave generata casualmente per offuscare il contenuto di ogni modulo. Se vuoi 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
- Word list - CBHue/PyFuscation
- Known vulnerable driver list - https://www.loldrivers.io/