Retour aux mises à jour
New releaseAug 19, 2026

PrivescCheck v2026.08.19-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 à connaître 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 courant. Par conséquent, s'il est exécuté avec des privilèges d'administrateur, de nombreuses vérifications de vulnérabilités sont en réalité 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'utilisation 1 (Pentest) : Exécuter uniquement les vérifications de base

Existe-t-il un moyen évident d'élever les privilèges localement ?

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck"

Cas d'utilisation 2 (Recherche) : Exécuter les vérifications étendues + générer des rapports lisibles par un humain

Existe-t-il des informations supplémentaires pouvant être exploitées pour la post-exploitation ou pour trouver des vulnérabilités dans des logiciels tiers ?

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML"

Cas d'utilisation 3 (Audit) : Exécuter toutes les vérifications + générer tous les rapports

Existe-t-il des problèmes de configuration qui ne sont pas couverts par les normes de sécurité courantes ?

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML,CSV,XML"

📖 Utilisation détaillée

Invoke-PrivescCheck [-Extended] [-Audit] [-Experimental] [-Report <PREFIX>]
    [-Format <FORMAT>[,...]] [-Risky] [-Silent] [-Force]

    -Extended
        Inclure toutes les vérifications "étendues" dans l'analyse (voir README).

    -Audit
        Inclure toutes les vérifications "d'audit" dans l'analyse.

    -Experimental
        Inclure toutes les vérifications "expérimentales" dans l'analyse. À
        utiliser uniquement si vous savez ce que vous faites.

    -Report <PREFIX>
        Générer au moins un fichier de rapport. Le nom du fichier de sortie
        sera "PREFIX.txt" par défaut. L'extension est automatiquement ajoutée
        en fonction du format du rapport (voir "-Format <FORMAT>[,...]").

    -Format <FORMAT>[,...]
        Spécifier le format du ou des fichiers de rapport de sortie. S'il
        n'est pas défini, la valeur par défaut est "TXT". Les formats pris en
        charge sont : "TXT", "HTML", "CSV" et "XML".

    -Risky
        Inclure les vérifications marquées comme "risquées", c'est-à-dire les
        vérifications susceptibles de déclencher une action de blocage par une
        solution de protection des points de terminaison. À utiliser avec
        prudence.

    -Silent
        Supprimer la sortie du terminal. Cela peut être utile si vous souhaitez
        exécuter le script dans le cadre d'un fichier batch, dans une tâche
        planifiée par exemple.

    -Force
        Forcer l'exécution et ignorer les avertissements. En règle générale,
        le script s'arrête s'il est exécuté avec des privilèges
        d'administrateur. Utilisez cette option pour l'exécuter quand même.

Format de rapport > TXT (-Format TXT)

Utilisez l'option -Report <PREFIX> (avec -Format TXT) pour spécifier que vous souhaitez générer un rapport texte brut. La sortie est similaire à ce que vous verriez dans le terminal, sauf qu'elle ne contient que des caractères ASCII pour une meilleure (rétro-)compatibilité avec tous les éditeurs de texte.

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

Format de rapport > HTML (-Format HTML)

Utilisez l'option -Report <PREFIX> avec -Format HTML pour spécifier que vous souhaitez générer un rapport HTML. Le fichier de sortie peut être ouvert dans un navigateur web. Il est plus pratique pour visualiser les données que le rapport 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 rapport > CSV (-Format CSV) et XML (-Format XML)

Utilisez l'option -Report <PREFIX> avec -Format CSV ou -Format XML pour spécifier que vous souhaitez générer un rapport CSV ou XML. Le fichier de sortie est destiné à faciliter l'analyse des résultats par des outils de rapport 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 pour les identifier de manière unique.

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 (-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 (-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 cadre d'un audit de configuration.

💡 Astuces et conseils

Stratégie d'exécution PowerShell

Par défaut, la stratégie 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 stratégies bloquent l'exécution de scripts (non signés), mais elles peuvent être remplacées dans la portée actuelle comme suit.

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

Cependant, cette astuce ne fonctionne pas lorsque la stratégie d'exécution est appliqué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

Un moyen courant de contourner le Constrained Language Mode consiste à utiliser PSv2 car il n'implémente pas cette protection. Par conséquent, une part importante des efforts de développement est consacrée au maintien de cette rétro-compatibilité.

[!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 souhaiterez 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"

🏗️ Construction

Mettre à jour les données

Certaines vérifications reposent sur des données en ligne (par exemple la base de données des drivers 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 construction 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 constructions, 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 construction 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 constructions, 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