Voltar às atualizações
New releaseSep 22, 2026

PrivescCheck v2026.09.21-1

Script de Enumeração de Escalada de Privilégios para Windows

Compartilhar

PrivescCheck

Identifique rapidamente vulnerabilidades comuns do Windows e problemas de configuração que não são necessariamente cobertos por padrões públicos de segurança, e colete informações úteis para tarefas de exploração e pós-exploração.

[!IMPORTANT] Um aspecto importante a ter em conta ao usar esta ferramenta é que todas as verificações de controle de acesso são feitas no contexto do usuário atual. Portanto, se for executada com privilégios de administrador, muitas verificações de vulnerabilidade são ignoradas para evitar a geração de resultados incorretos.

Início Rápido

Baixe o script aqui: PrivescCheck.ps1

[!TIP] O link acima também pode ser usado diretamente em um terminal PowerShell com (New-Object Net.WebClient).DownloadString(...).

Caso de Uso 1: Avaliação Rápida

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

Caso de Uso 2: Avaliação Extensiva

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

Caso de Uso 3: Avaliação Abrangente

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

Uso Detalhado

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 Arquivo de Relatório

Formato de Arquivo de Relatório > TXT

Use a opção -Report TXT para gerar um relatório de texto bruto. A saída é semelhante à saída do terminal, exceto que contém apenas caracteres ASCII para melhor compatibilidade com editores de texto.

Captura de tela de um relatório de texto bruto gerado pelo PrivescCheck

Formato de Arquivo de Relatório > HTML

Use a opção -Report HTML para gerar um relatório HTML. O arquivo de saída pode ser aberto em um navegador web. Nenhuma conexão com a Internet é necessária, pois não possui dependências externas. É mais conveniente para visualizar os dados do que o relatório de texto bruto. Além disso, oferece recursos de ordenação e filtragem!

Captura de tela de um relatório HTML gerado pelo PrivescCheck

Formato de Arquivo de Relatório > CSV ou XML

Use a opção -Report CSV ou -Report XML para gerar um relatório CSV ou XML. O arquivo de saída destina-se a facilitar a análise dos resultados por ferramentas automatizadas de relatórios.

[!NOTE] Embora o formato de saída não esteja documentado (ainda), você pode facilmente descobri-lo analisando a estrutura de um arquivo já gerado. Você pode usar o valor Id de cada verificação como um identificador único.

Tipos de Verificação

Tipo de Verificação > Base

Verificações do tipo Base serão sempre executadas, a menos que o script seja executado como administrador. Elas destinam-se principalmente a identificar vulnerabilidades de escalonamento de privilégios ou outros problemas importantes.

Tipo de Verificação > Extended

Verificações do tipo Extended só podem ser executadas se a opção -Extended for especificada na linha de comando. Elas destinam-se principalmente a fornecer informações adicionais que podem ser úteis para o desenvolvimento de exploits ou pós-exploração.

Tipo de Verificação > Audit

Verificações do tipo Audit só podem ser executadas se a opção -Audit for especificada na linha de comando. Elas destinam-se principalmente a fornecer informações relevantes no contexto de uma auditoria de configuração.

Dicas e Truques

Política de Execução do PowerShell

Por padrão, a política de execução do PowerShell é definida como Restricted em clientes e RemoteSigned em servidores, quando um novo processo powershell.exe é iniciado. Essas políticas bloqueiam a execução de scripts (não assinados), mas podem ser substituídas dentro do escopo atual da seguinte forma.

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

No entanto, este truque não funciona quando a política de execução é imposta através de uma GPO. Neste caso, após iniciar uma nova sessão do PowerShell, você pode carregar o script da seguinte forma.

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

PowerShell Versão 2

Uma forma comum de contornar o Constrained Language Mode consiste em usar o PSv2, pois ele não implementa essa proteção. Portanto, uma parte significativa do esforço de desenvolvimento é dedicada a manter essa retrocompatibilidade.

[!NOTE] Embora a versão 2 do PowerShell ainda esteja habilitada por padrão em versões recentes do Windows (Remoção do PowerShell 2.0 do Windows), ela não pode ser executada sem o .Net framework versão 2.0, que requer uma instalação manual.

Timeout do Metasploit

Se você executar este script dentro de uma sessão Meterpreter, provavelmente receberá um erro de "timeout". Isso ocorre porque o Metasploit usa um valor de timeout padrão de 15 segundos, o que não é suficiente para que uma execução típica do script seja concluída.

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.

É possível definir um timeout diferente graças à opção -t do comando sessions (documentação). No exemplo a seguir, um timeout de 2 minutos é definido para a sessão com ID 1, mas você pode querer definir um valor ainda maior.

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

Build

Atualizar os Dados

Algumas das verificações dependem de dados online (por exemplo, banco de dados de drivers LOL), mas o script destina-se a funcionar offline. Para resolver este problema, os dados são incorporados no script e, portanto, precisam ser atualizados regularmente. Este processo é totalmente automatizado na versão oficial, mas se você quiser compilar o script localmente, pode opcionalmente fazer isso manualmente.

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

Compilar o Script

Compilar o script é tão simples quanto executar o comando abaixo. O arquivo de saída será salvo na pasta .\dist\.

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

O script de build usa um gerador de números pseudoaleatórios com uma seed gerada aleatoriamente para escolher um nome de variável para cada módulo. Se você quiser gerar resultados reproduzíveis entre builds, pode optar por reutilizar a seed gerada anteriormente usando a opção -NoNewSeed.

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

O script de build usa criptografia AES com uma chave gerada aleatoriamente para ofuscar o conteúdo de cada módulo. Se você quiser gerar resultados reproduzíveis entre builds, pode optar por reutilizar a chave gerada anteriormente usando a opção -NoNewKey.

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

Créditos

Categorias