Retour aux mises à jour
New releaseSep 22, 2026

PrivescCheck v2026.09.21-1

Script d'énumération d'escalade de privilèges pour Windows

Partager

PrivescCheck

Identifiez rapidement les vulnérabilités Windows courantes et les problèmes de configuration qui ne sont pas nécessairement couverts par les normes de sécurité publiques, et collectez des informations utiles pour les tâches d'exploitation et de post-exploitation.

[!IMPORTANT] Un aspect majeur à prendre en compte lors de l'utilisation de cet outil est que toutes les vérifications de contrôle d'accès sont effectuées dans le contexte de l'utilisateur actuel. Par conséquent, s'il est exécuté avec des privilèges d'administrateur, un grand nombre de vérifications de vulnérabilités sont ignorées afin d'éviter de générer des résultats incorrects.

Démarrage rapide

Téléchargez le script ici : PrivescCheck.ps1

[!TIP] Le lien ci-dessus peut également être utilisé directement dans un terminal PowerShell avec (New-Object Net.WebClient).DownloadString(...).

Cas d'usage 1 : Évaluation rapide

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Report TXT,HTML"

Cas d'usage 2 : Évaluation étendue

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report TXT,HTML"

Cas d'usage 3 : Évaluation complète

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report ALL"

Utilisation détaillée

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.

Formats de fichier de rapport

Format de fichier de rapport > TXT

Utilisez l'option -Report TXT pour générer un rapport en texte brut. La sortie est similaire à la sortie du terminal, sauf qu'elle ne contient que des caractères ASCII pour une meilleure compatibilité avec les éditeurs de texte.

Capture d'écran d'un rapport en texte brut généré par PrivescCheck

Format de fichier de rapport > HTML

Utilisez l'option -Report HTML pour générer un rapport HTML. Le fichier de sortie peut être ouvert dans un navigateur web. Aucune connexion Internet n'est requise car il n'a aucune dépendance externe. Il est plus pratique pour visualiser les données que le rapport en texte brut. De plus, il offre des capacités de tri et de filtrage !

Capture d'écran d'un rapport HTML généré par PrivescCheck

Format de fichier de rapport > CSV ou XML

Utilisez l'option -Report CSV ou -Report XML pour générer un rapport CSV ou XML. Le fichier de sortie est destiné à faciliter l'analyse des résultats par des outils de reporting automatisés.

[!NOTE] Bien que le format de sortie ne soit pas documenté (pour l'instant), vous pouvez facilement le comprendre en analysant la structure d'un fichier déjà généré. Vous pouvez utiliser la valeur Id de chaque vérification comme identifiant unique.

Types de vérification

Type de vérification > Base

Les vérifications de type Base seront toujours exécutées, sauf si le script est exécuté en tant qu'administrateur. Elles sont principalement destinées à identifier les vulnérabilités d'élévation de privilèges, ou d'autres problèmes importants.

Type de vérification > Extended

Les vérifications de type Extended ne peuvent être exécutées que si l'option -Extended est spécifiée sur la ligne de commande. Elles sont principalement destinées à fournir des informations supplémentaires qui pourraient être utiles pour le développement d'exploits, ou la post-exploitation.

Type de vérification > Audit

Les vérifications de type Audit ne peuvent être exécutées que si l'option -Audit est spécifiée sur la ligne de commande. Elles sont principalement destinées à fournir des informations pertinentes dans le contexte d'un audit de configuration.

Astuces & conseils

Politique d'exécution PowerShell

Par défaut, la politique d'exécution PowerShell est définie sur Restricted sur les clients, et RemoteSigned sur les serveurs, lorsqu'un nouveau processus powershell.exe est démarré. Ces politiques bloquent l'exécution de scripts (non signés), mais elles peuvent être contournées dans la portée actuelle comme suit.

Set-ExecutionPolicy Bypass -Scope Process -Force
. .\PrivescCheck.ps1

Cependant, cette astuce ne fonctionne pas lorsque la politique d'exécution est imposée via une GPO. Dans ce cas, après avoir démarré une nouvelle session PowerShell, vous pouvez charger le script comme suit.

Get-Content .\PrivescCheck.ps1 | Out-String | Invoke-Expression

PowerShell version 2

Une méthode courante pour contourner le Constrained Language Mode consiste à utiliser PSv2 car il n'implémente pas cette protection. Par conséquent, une part importante de l'effort de développement est consacrée au maintien de cette rétrocompatibilité.

[!NOTE] Bien que PowerShell version 2 soit encore activé par défaut sur les versions récentes de Windows (Suppression de PowerShell 2.0 de Windows), il ne peut pas s'exécuter sans le framework .Net version 2.0, ce qui nécessite une installation manuelle.

Délai d'attente Metasploit

Si vous exécutez ce script dans une session Meterpreter, vous obtiendrez probablement une erreur de "timeout". Cela est dû au fait que Metasploit utilise une valeur de délai d'attente par défaut de 15 secondes, ce qui n'est pas suffisant pour qu'une exécution typique du script se termine.

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.

Il est possible de définir un délai d'attente différent grâce à l'option -t de la commande sessions (documentation). Dans l'exemple suivant, un délai d'attente de 2 minutes est défini pour la session avec l'ID 1, mais vous voudrez peut-être définir une valeur encore plus élevée.

msf6 exploit(multi/handler) > sessions -t 120 -i 1
[*] Starting interaction with 1...
meterpreter > powershell_execute "Invoke-PrivescCheck"

Build

Mettre à jour les données

Certaines des vérifications reposent sur des données en ligne (par ex. la base de données des pilotes LOL), mais le script est conçu pour fonctionner hors ligne. Pour résoudre ce problème, les données sont intégrées dans le script, et doivent donc être régulièrement mises à jour. Ce processus est entièrement automatisé dans la version officielle, mais si vous souhaitez construire le script localement, vous pouvez éventuellement le faire manuellement.

powershell -ep bypass ". .\build\Build.ps1; Update-LolDriverFile"

Construire le script

Construire le script est aussi simple que d'exécuter la commande ci-dessous. Le fichier de sortie sera enregistré dans le dossier .\dist\.

powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck"

Le script de build utilise un générateur de nombres pseudo-aléatoires avec une graine générée aléatoirement pour choisir un nom de variable pour chaque module. Si vous souhaitez générer des résultats reproductibles entre les builds, vous pouvez choisir de réutiliser la graine précédemment générée en utilisant l'option -NoNewSeed.

powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewSeed"

Le script de build utilise le chiffrement AES avec une clé générée aléatoirement pour obscurcir le contenu de chaque module. Si vous souhaitez générer des résultats reproductibles entre les builds, vous pouvez choisir de réutiliser la clé précédemment générée en utilisant l'option -NoNewKey.

powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewKey"

Crédits

Catégories