
PrivescCheck v2026.07.15-1
Script de Enumeração de Escalada de Privilégios para Windows
PrivescCheck
Identifique rapidamente vulnerabilidades e problemas de configuração comuns do Windows que não são necessariamente cobertos por padrões de segurança públicos, e colete informações úteis para tarefas de exploração e pós-exploração.
[!IMPORTANT] Um aspecto importante a ter em mente 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 na verdade 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 (Pentest): Executar Apenas Verificações Básicas
Existe uma maneira óbvia de escalar privilégios localmente?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck"
Caso de Uso 2 (Pesquisa): Executar Verificações Estendidas + Gerar Relatórios Legíveis por Humanos
Existe alguma informação adicional que possa ser aproveitada para pós-exploração ou para encontrar vulnerabilidades em software de terceiros?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML"
Caso de Uso 3 (Auditoria): Executar Todas as Verificações + Gerar Todos os Relatórios
Existem problemas de configuração que não são cobertos por padrões de segurança comuns?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML,CSV,XML"
📖 Uso Detalhado
Invoke-PrivescCheck [-Extended] [-Audit] [-Experimental] [-Report <PREFIX>]
[-Format <FORMAT>[,...]] [-Risky] [-Silent] [-Force]
-Extended
Inclui todas as verificações "estendidas" no escaneamento (ver README).
-Audit
Inclui todas as verificações de "auditoria" no escaneamento.
-Experimental
Inclui todas as verificações "experimentais" no escaneamento. Use apenas
se você souber o que está fazendo.
-Report <PREFIX>
Gera pelo menos um arquivo de relatório. O nome do arquivo de saída será
"PREFIX.txt" por padrão. A extensão é adicionada automaticamente
com base no formato do relatório (ver "-Format <FORMAT>[,...]").
-Format <FORMAT>[,...]
Especifica o formato do(s) arquivo(s) de relatório de saída. Se não for
definido, o valor padrão é "TXT". Os formatos suportados são: "TXT",
"HTML", "CSV" e "XML".
-Risky
Inclui verificações marcadas como "arriscadas", ou seja, verificações
que provavelmente acionarão uma ação de bloqueio por uma solução de
proteção de endpoint. Use com cautela.
-Silent
Suprime a saída do terminal. Isso pode ser útil se você quiser executar
o script como parte de um arquivo em lote, em uma tarefa agendada, por
exemplo.
-Force
Força a execução e ignora avisos. Normalmente, o script é interrompido
se for executado com privilégios de administrador. Use esta opção para
executá-lo mesmo assim.
Formato de Relatório > TXT (-Format TXT)
Use a opção -Report <PREFIX> (com -Format TXT) para especificar que deseja gerar um relatório de texto bruto. A saída é semelhante ao que você veria no terminal, exceto que contém apenas caracteres ASCII para melhor compatibilidade (retro-)com todos os editores de texto.

Formato de Relatório > HTML (-Format HTML)
Use a opção -Report <PREFIX> com -Format HTML para especificar que deseja gerar um relatório HTML. O arquivo de saída pode ser aberto em um navegador da web. É mais conveniente para visualizar os dados do que o relatório de texto bruto. Além disso, oferece recursos de classificação e filtragem!

Formato de Relatório > CSV (-Format CSV) e XML (-Format XML)
Use a opção -Report <PREFIX> com -Format CSV ou -Format XML para especificar que deseja 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 seja documentado (ainda), você pode facilmente descobri-lo analisando a estrutura de um arquivo já gerado. Você pode usar o valor
Idde cada verificação para identificá-las de forma exclusiva.
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 (-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 (-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 no escopo atual da seguinte forma.
Set-ExecutionPolicy Bypass -Scope Process -Force
. .\PrivescCheck.ps1
No entanto, esse truque não funciona quando a política de execução é imposta por meio de uma GPO. Nesse 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 maneira 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 à manutenção dessa retrocompatibilidade.
[!NOTE] Embora o PowerShell versão 2
ainda esteja habilitado por padrão nas versões recentes do Windows(Remoção do PowerShell 2.0 do Windows), ele não pode ser executado sem o .Net framework versão 2.0, que requer uma instalação manual.
Timeout do Metasploit
Se você executar este script em uma sessão do Meterpreter, provavelmente receberá um erro de "timeout". Isso ocorre porque o Metasploit usa um valor de timeout padrão de 15 segundos, 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"
🏗️ Compilação
Atualizar os Dados
Algumas verificações dependem de dados online (ex.: banco de dados de drivers LOL), mas o script foi projetado para funcionar offline. Para resolver esse problema, os dados são incorporados ao script e, portanto, precisam ser atualizados regularmente. Esse processo é totalmente automatizado no lançamento 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 compilação usa um gerador de números pseudoaleatórios com uma semente gerada aleatoriamente para escolher um nome de variável para cada módulo. Se você quiser gerar resultados reproduzíveis entre compilações, pode optar por reutilizar a semente gerada anteriormente usando a opção -NoNewSeed.
powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewSeed"
O script de compilação 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 compilações, 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/