Volver a actualizaciones
Nuevo releaseSep 2, 2026

PrivescCheck v2026.09.02-1

Script de enumeración de escalada de privilegios para Windows

Compartir

PrivescCheck

Identifique rápidamente vulnerabilidades comunes de Windows y problemas de configuración que no están necesariamente cubiertos por los estándares de seguridad públicos, y recopile información útil para tareas de explotación y post-explotación.

[!IMPORTANT] Un aspecto importante a tener en cuenta al usar esta herramienta es que todas las comprobaciones de control de acceso se realizan en el contexto del usuario actual. Por lo tanto, si se ejecuta con privilegios de administrador, se omiten muchas comprobaciones de vulnerabilidades para evitar generar hallazgos incorrectos.

Inicio Rápido

Descargue el script aquí: PrivescCheck.ps1

[!TIP] El enlace anterior también se puede usar directamente en una terminal de PowerShell con (New-Object Net.WebClient).DownloadString(...).

Caso de Uso 1: Evaluación Rápida

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

Caso de Uso 2: Evaluación Extensiva

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

Caso de Uso 3: Evaluación Integral

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

Uso Detallado

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.

Formatos de Archivo de Informe

Formato de Archivo de Informe > TXT

Use la opción -Report TXT para generar un informe de texto sin formato. La salida es similar a la salida de la terminal, excepto que contiene solo caracteres ASCII para una mejor compatibilidad con editores de texto.

Captura de pantalla de un informe de texto sin formato generado por PrivescCheck

Formato de Archivo de Informe > HTML

Use la opción -Report HTML para generar un informe HTML. El archivo de salida se puede abrir en un navegador web. No se requiere conexión a Internet ya que no tiene dependencias externas. Es más conveniente para visualizar los datos que el informe de texto sin formato. Además, ofrece capacidades de ordenación y filtrado.

Captura de pantalla de un informe HTML generado por PrivescCheck

Formato de Archivo de Informe > CSV o XML

Use la opción -Report CSV o -Report XML para generar un informe CSV o XML. El archivo de salida está destinado a facilitar el análisis de los resultados por herramientas de informes automatizadas.

[!NOTE] Aunque el formato de salida no está documentado (todavía), puede descubrirlo fácilmente analizando la estructura de un archivo ya generado. Puede usar el valor Id de cada comprobación como identificador único.

Tipos de Comprobación

Tipo de Comprobación > Base

Las comprobaciones de tipo Base siempre se ejecutarán, a menos que el script se ejecute como administrador. Están destinadas principalmente a identificar vulnerabilidades de escalada de privilegios u otros problemas importantes.

Tipo de Comprobación > Extended

Las comprobaciones de tipo Extended solo se pueden ejecutar si se especifica la opción -Extended en la línea de comandos. Están destinadas principalmente a proporcionar información adicional que podría ser útil para el desarrollo de exploits o la post-explotación.

Tipo de Comprobación > Audit

Las comprobaciones de tipo Audit solo se pueden ejecutar si se especifica la opción -Audit en la línea de comandos. Están destinadas principalmente a proporcionar información relevante en el contexto de una auditoría de configuración.

Consejos y Trucos

Política de Ejecución de PowerShell

Por defecto, la política de ejecución de PowerShell está establecida en Restricted en los clientes, y en RemoteSigned en los servidores, cuando se inicia un nuevo proceso powershell.exe. Estas políticas bloquean la ejecución de scripts (no firmados), pero se pueden anular dentro del ámbito actual de la siguiente manera.

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

Sin embargo, este truco no funciona cuando la política de ejecución se aplica a través de una GPO. En este caso, después de iniciar una nueva sesión de PowerShell, puede cargar el script de la siguiente manera.

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

PowerShell Versión 2

Una forma común de eludir el Modo de Lenguaje Restringido consiste en usar PSv2, ya que no implementa esta protección. Por lo tanto, una parte significativa del esfuerzo de desarrollo se dedica a mantener esta retrocompatibilidad.

[!NOTE] Aunque la versión 2 de PowerShell todavía está habilitada por defecto en versiones recientes de Windows (Eliminación de PowerShell 2.0 de Windows), no puede ejecutarse sin la versión 2.0 de .Net framework, lo que requiere una instalación manual.

Tiempo de Espera de Metasploit

Si ejecuta este script dentro de una sesión de Meterpreter, es probable que obtenga un error de "timeout". Esto se debe a que Metasploit usa un valor de tiempo de espera predeterminado de 15 segundos, que no es suficiente para que se complete una ejecución típica del 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.

Es posible establecer un tiempo de espera diferente gracias a la opción -t del comando sessions (documentación). En el siguiente ejemplo, se establece un tiempo de espera de 2 minutos para la sesión con ID 1, pero es posible que desee establecer un valor aún mayor.

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

Compilación

Actualizar los Datos

Algunas de las comprobaciones dependen de datos en línea (p. ej., la base de datos de controladores LOL), pero el script está diseñado para funcionar sin conexión. Para resolver este problema, los datos están integrados en el script y, por lo tanto, deben actualizarse regularmente. Este proceso está totalmente automatizado en la versión oficial, pero si desea compilar el script localmente, puede hacerlo manualmente de forma opcional.

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

Compilar el Script

Compilar el script es tan simple como ejecutar el comando a continuación. El archivo de salida se guardará en la carpeta .\dist\.

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

El script de compilación usa un generador de números pseudoaleatorios con una semilla generada aleatoriamente para elegir un nombre de variable para cada módulo. Si desea generar resultados reproducibles entre compilaciones, puede optar por reutilizar la semilla generada previamente usando la opción -NoNewSeed.

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

El script de compilación usa cifrado AES con una clave generada aleatoriamente para ofuscar el contenido de cada módulo. Si desea generar resultados reproducibles entre compilaciones, puede optar por reutilizar la clave generada previamente usando la opción -NoNewKey.

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

Créditos

Categorías