Torna agli aggiornamenti
New releaseSep 22, 2026

PrivescCheck v2026.09.21-1

Script di enumerazione per escalation dei privilegi per Windows

Condividi

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.

Screenshot di un report in testo non formattato generato da PrivescCheck

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!

Screenshot di un report HTML generato da PrivescCheck

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 Id di 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

Categorie