
Script de enumeración de escalada de privilegios para Windows
Identifique rápidamente vulnerabilidades y problemas de configuración comunes de Windows que no necesariamente están cubiertos por 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, muchas comprobaciones de vulnerabilidades se omiten para evitar generar hallazgos incorrectos.
Descargue el script aquí: PrivescCheck.ps1
[!TIP] El enlace anterior también se puede usar directamente en un terminal de PowerShell con
(New-Object Net.WebClient).DownloadString(...).
¿Existe una forma obvia de escalar privilegios localmente?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck"
¿Hay información adicional que se pueda aprovechar para post-explotación o para encontrar vulnerabilidades en software de terceros?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML"
¿Hay problemas de configuración que no están cubiertos por los estándares de seguridad comunes?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML,CSV,XML"
Invoke-PrivescCheck [-Extended] [-Audit] [-Experimental] [-Report <PREFIX>]
[-Format <FORMAT>[,...]] [-Risky] [-Silent] [-Force]
-Extended
Incluir todas las comprobaciones "extendidas" en el escaneo (ver README).
-Audit
Incluir todas las comprobaciones de "auditoría" en el escaneo.
-Experimental
Incluir todas las comprobaciones "experimentales" en el escaneo. Úselo solo si sabe
lo que está haciendo.
-Report <PREFIX>
Generar al menos un archivo de informe. El nombre del archivo de salida será
"PREFIX.txt" por defecto. La extensión se agrega automáticamente
según el formato del informe (ver "-Format <FORMAT>[,...]").
-Format <FORMAT>[,...]
Especificar el formato del(os) archivo(s) de informe de salida. Si no se establece, el
valor predeterminado es "TXT". Los formatos admitidos son: "TXT", "HTML", "CSV",
y "XML".
-Risky
Incluir comprobaciones marcadas como "riesgosas", es decir, comprobaciones que probablemente
activen una acción de bloqueo por parte de una solución de protección de endpoints. Úselo con
precaución.
-Silent
Suprimir la salida del terminal. Esto puede ser útil si desea ejecutar el
script como parte de un archivo por lotes, en una tarea programada, por ejemplo.
-Force
Forzar la ejecución e ignorar advertencias. Normalmente, el script se detiene si
se ejecuta con privilegios de administrador. Use esta opción para
ejecutarlo de todos modos.
-Format TXT)Use la opción -Report <PREFIX> (con -Format TXT) para especificar que desea generar un informe de texto sin formato. La salida es similar a lo que vería en el terminal, excepto que contiene solo caracteres ASCII para una mejor compatibilidad (retro) con todos los editores de texto.

-Format HTML)Use la opción -Report <PREFIX> con -Format HTML para especificar que desea generar un informe HTML. El archivo de salida se puede abrir en un navegador web. Es más conveniente para visualizar los datos que el informe de texto sin formato. Además, ofrece capacidades de ordenación y filtrado.

-Format CSV) & XML (-Format XML)Use la opción -Report <PREFIX> con -Format CSV o -Format XML para especificar que desea generar un informe CSV o XML. El archivo de salida está destinado a facilitar el análisis de los resultados por parte de herramientas de informes automatizados.
[!NOTE] Aunque el formato de salida no está documentado (aún), puede averiguarlo fácilmente analizando la estructura de un archivo ya generado. Puede usar el valor
Idde cada comprobación para identificarlas de manera única.
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.
-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.
-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.
De forma predeterminada, la política de ejecución de PowerShell está establecida en Restricted en clientes y RemoteSigned en servidores, cuando se inicia un nuevo proceso powershell.exe. Estas políticas bloquean la ejecución de scripts (sin firmar), 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
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 PowerShell versión 2
todavía está habilitado de forma predeterminada en versiones recientes de Windows(Eliminación de PowerShell 2.0 de Windows), no puede ejecutarse sin .Net Framework versión 2.0, que requiere una instalación manual.
Si ejecuta este script dentro de una sesión de Meterpreter, es probable que reciba un error de "timeout". Esto se debe a que Metasploit utiliza 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"