
PrivescCheck v2026.09.21-1
Script d'énumération d'escalade de privilèges pour Windows
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.

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 !

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
Idde 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
- Liste de mots - CBHue/PyFuscation
- Liste des pilotes vulnérables connus - https://www.loldrivers.io/