
PrivescCheck v2026.09.21-1
Script de Enumeração de Escalada de Privilégios para Windows
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.

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!

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
Idde 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
- Lista de palavras - CBHue/PyFuscation
- Lista de drivers vulneráveis conhecidos - https://www.loldrivers.io/