Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Crassus — Ferramenta de descoberta de escalonamento de privilégios do Windows que analisa logs de inicialização do Process Monitor para identificar sequestro de DLL, ACLs fracas e outros caminhos de elevação, gerando automaticamente código-fonte de DLL proxy. | Kitploit
Ferramentas/GitHubGitHub/vu-ls/crassus
Escalada de PrivilégiosExploraçãoTestes de PenetraçãoAnálise de Binários
GitHubvu-ls/crassus

Crassus

Ferramenta de descoberta de escalonamento de privilégios do Windows que analisa logs de inicialização do Process Monitor para identificar sequestro de DLL, ACLs fracas e outros caminhos de elevação, gerando automaticamente código-fonte de DLL proxy.

Ver Repositório
63364há 6 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Ferramenta de descoberta de escalonamento de privilégios Windows Crassus

Início rápido

  1. No Process Monitor, selecione a opção Enable Boot Logging. "Opção de registro de inicialização do Process Monitor"
  2. Reinicie.
  3. Depois de fazer login e o Windows estabilizar, execute o Process Monitor novamente.
  4. Quando solicitado, salve o log de inicialização, por exemplo, em raw.PML.
  5. Reinicie o filtro padrão do Process Monitor usando Ctrl-R.
  6. Salve este arquivo de log, por exemplo, em boot.PML.
  7. Execute Crassus.exe boot.PML.
  8. Investigue quaisquer resultados coloridos em verde e as entradas correspondentes em results.csv.

Índice

  • Por que "Crassus"
    • Você realmente fez mais uma ferramenta de descoberta de escalonamento de privilégios?
    • Funcionalidades
    • Fluxograma
  • Capturas de tela
    • Execução do Crassus
    • Saída CSV
    • Exportações
    • Exportar Funções DLL
    • Exportar Ordinais DLL
  • Obtendo o Crassus.exe
    • Compilando com Visual Studio
    • Usando o Crassus.exe pré-compilado
  • Uso
    • Fluxo de Execução
    • Argumentos de Linha de Comando
    • Exemplos
    • Modelo de Proxy DLL
    • Modelo openssl.cnf
  • Compilando DLLs Proxy
    • Visual Studio
    • MinGW
  • Exemplos do Mundo Real
    • Acronis True Image
    • Atlassian Bitbucket
    • McAfee
    • Microsoft SQL Server 2022
  • Solução de Problemas
    • Arquivo ausente não executado
    • Código executado com privilégios inesperados
    • Descobertas desaparecem na reinicialização
  • Contribuições
  • Créditos

Por que "Crassus"?

A Accenture criou uma ferramenta chamada Spartacus, que encontra oportunidades de sequestro de DLL no Windows. Usando o Spartacus como ponto de partida, criamos o Crassus para estender as capacidades de descoberta de escalonamento de privilégios no Windows além da simples busca por arquivos ausentes. As ACLs usadas por arquivos e diretórios de processos privilegiados podem encontrar mais do que apenas procurar por arquivos ausentes para atingir o objetivo.

Você realmente fez mais uma ferramenta de descoberta de escalonamento de privilégios?

...mas com uma diferença, pois o Crassus utiliza o SysInternals Process Monitor e analisa arquivos de log PML brutos. O uso típico é gerar um log de inicialização usando o Process Monitor e depois analisá-lo com o Crassus. Ele também gerará automaticamente código-fonte para DLLs proxy com todas as exportações relevantes para DLLs vulneráveis.

Funcionalidades

  • Analisar arquivos PML do ProcMon nativamente. O analisador de log (PML) foi implementado portando funcionalidade parcial para C# a partir de https://github.com/eronnen/procmon-parser/. Você pode encontrar a especificação do formato aqui.
  • O Crassus criará código-fonte para DLLs proxy para todas as DLLs ausentes identificadas. Por exemplo, se um aplicativo for vulnerável a sequestro de DLL via version.dll, o Crassus criará arquivos version.cpp e version.def para você com todas as exportações incluídas. Por padrão, as DLLs proxy iniciarão calc.exe. Scripts de compilação estão incluídos para compilar as DLLs no Visual Studio ou MinGW.
  • Para outros eventos de interesse, como criação de um processo ou carregamento de uma biblioteca, a capacidade de usuários não privilegiados modificar o arquivo ou qualquer parte do caminho até o arquivo é investigada.
  • Capaz de processar grandes arquivos PML e armazenar todos os eventos de interesse em um arquivo CSV de saída.

Fluxograma

A ideia geral de como o Crassus funciona pode ser resumida neste fluxograma: Fluxograma do Crassus

Capturas de tela

Execução do Crassus

Executando o Crassus

Saída CSV

Saída CSV

Exportações de Saída

Exportações

Exportar Funções DLL

Funções DLL

Exportar Ordinais DLL

Ordinais DLL

Obtendo o Crassus.exe

Compilando com Visual Studio

O Crassus foi desenvolvido como um projeto do Visual Studio 2019. Para compilar Crassus.exe:

  1. Abra Crassus.sln
  2. Pressione Ctrl+Shift+B no teclado

Usando o Crassus.exe pré-compilado

Se você confia em executar o código de outras pessoas sem saber o que ele faz, o Crassus.exe está fornecido neste repositório.

Uso

Fluxo de Execução

  1. No Process Monitor, selecione a opção Enable Boot Logging. "Opção de registro de inicialização do Process Monitor"
  2. Reinicie.
  3. Depois de fazer login e o Windows estabilizar, opcionalmente execute também tarefas agendadas que podem estar configuradas para serem executadas com privilégios.
  4. Execute o Process Monitor novamente.
  5. Quando solicitado, salve o log de inicialização.
  6. Reinicie o filtro padrão do Process Monitor usando Ctrl-R.
  7. Salve este arquivo de log, por exemplo, em boot.PML. O motivo para salvar novamente o arquivo de log é duplo:
    1. Versões mais antigas do Process Monitor não salvam logs de inicialização como um único arquivo.
    2. Logs de inicialização por padrão serão não filtrados, o que pode conter ruído extra, como um sequestro de DLL de usuário local na inicialização do próprio Process Monitor.

Argumentos de Linha de Comando

ArgumentoDescrição
<PMLFILE>Localização (arquivo) do arquivo de log de eventos do ProcMon existente.
--verboseAtivar saída detalhada.
--debugAtivar saída de depuração.

Exemplos

Analisar o log de inicialização do Process Monitor salvo em boot.PML. Todos os caminhos vulneráveis serão salvos como results.csv e todos os arquivos de origem da DLL proxy estarão no subdiretório stubs.

root@kitploit:~
C:\tmp> Crassus.exe boot.PML

Modelo de Proxy DLL

Abaixo está o modelo usado ao gerar DLLs proxy. Para DLLs encontradas pelo Crassus, a DLL proxy conterá os mesmos nomes de exportação especificados em %_EXPORTS_%, bem como os mesmos ordinais especificados no arquivo .def. O Crassus detectará se a DLL precisa ser compilada como uma biblioteca de 32 bits ou 64 bits observando a arquitetura do processo pai e marcando o código-fonte no campo %_BUILD_AS_% de acordo.

Se a DLL real não puder ser encontrada usando o log do Process Monitor, ou se o nome da exportação for problemático, os scripts de compilação recorrerão à criação de uma DLL sem exportações especificadas.

root@kitploit:~
#pragma once
    
//%_BUILD_AS%

#include <windows.h>;

extern "C" {

  VOID Payload() {
      // Execute seu payload aqui.
      WinExec("calc.exe", 1);
  }

  BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
  {
      switch (fdwReason)
      {
      case DLL_PROCESS_ATTACH:
          Payload();
          break;
      case DLL_THREAD_ATTACH:
          break;
      case DLL_THREAD_DETACH:
          break;
      case DLL_PROCESS_DETACH:
          break;
      }
      return TRUE;
  }


  #ifdef ADD_EXPORTS
  %_EXPORTS_%
  #endif
}

Modelo openssl.cnf

Para aplicativos que usam inseguramente o valor da variável OPENSSLDIR, um arquivo openssl.cnf personalizado pode ser colocado no local informado. Para este exemplo, o software carregará C:\tmp\calc.dll. Certifique-se de usar uma biblioteca de 32 bits para segmentar processos de 32 bits e uma biblioteca de 64 bits para segmentar processos de 64 bits.

root@kitploit:~
[openssl_init]
# Isto tentará carregar o arquivo c:\tmp\calc.dll como parte da inicialização do OpenSSL
# Os scripts de compilação devem detectar se a biblioteca calc.dll precisa ser compilada como 32 bits ou 64 bits
/tmp/calc = asdf

Compilando DLLs Proxy

Visual Studio

A compilação é possível usando o binário cl.exe incluído no Visual Studio. Especificamente:

root@kitploit:~
cl.exe /DADD_EXPORTS /D_USRDLL /D_WINDLL <target>.cpp /LD /Fe<target>.dll /link /DEF:<target>.def

Para automatizar o processo de compilação, incluindo especificar se a biblioteca deve ser de 64 ou 32 bits:

  1. Abra o Prompt de Comando do Desenvolvedor do Visual Studio.
  2. Compile as DLLs com o script build.bat.
  3. Renomeie o arquivo compilado conforme necessário se o nome do arquivo vulnerável terminar com algo diferente de .dll.

Observação: Devido a um comportamento infeliz do vcvarsall.bat, que definitivamente não é um bug, você pode encontrar problemas ao tentar executar build.bat mais de uma vez na mesma sessão do Prompt de Comando do Desenvolvedor do Visual Studio. Se encontrar um erro, simplesmente feche a janela e abra-a novamente.

MinGW

Se o Visual Studio não estiver prontamente disponível, as DLLs proxy podem ser compiladas com MinGW-w64. Em uma plataforma Ubuntu, por exemplo, o MinGW pode ser instalado via: sudo apt install g++-mingw-w64-x86-64-win32 g++-mingw-w64-i686-win32

root@kitploit:~
# Criar uma DLL de 32 bits
i686-w64-mingw32-g++ -c -o <target>.o <target>.cpp -D ADD_EXPORTS
i686-w64-mingw32-g++ -o <target>.dll <target>.o <target>.def -s -shared -Wl,--subsystem,windows

# Criar uma DLL de 64 bits
x86_64-w64-mingw32-g++ -c -o <target>.o <target>.cpp -D ADD_EXPORTS
x86_64-w64-mingw32-g++ -o <target>.dll <target>.o <target>.def -s -shared -Wl,--subsystem,windows

Para automatizar o processo de compilação, incluindo especificar se a biblioteca deve ser de 64 ou 32 bits:

  1. Abra um terminal.
  2. Execute bash ./build.sh
  3. Renomeie o arquivo compilado conforme necessário se o nome do arquivo vulnerável terminar com algo diferente de .dll.

Exemplos do Mundo Real

Acronis True Image

Análise do Crassus

Conforme descrito em VU#114757, versões mais antigas do software Acronis contêm múltiplas vulnerabilidades de escalonamento de privilégios.

  1. Colocação de openssl.cnf em um local criável por usuário não privilegiado.
  2. ACLs inadequadas no diretório C:\ProgramData\Acronis.

O Crassus encontra automaticamente esses dois problemas. Saída do Crassus para Acronis

Sequestro de DLL

Ao plantar nosso arquivo curl.dll compilado no diretório C:\ProgramData\Acronis\Agent\var\atp-downloader\ e reiniciar com um novo log de inicialização do Process Monitor, podemos ver que nosso payload que executa calc.exe é executado com privilégios de SISTEMA. "Log do Process Monitor do curl.dll plantado"

Colocação do openssl.cnf

O software Acronis vulnerável tenta carregar openssl.cnf de dois locais diferentes. Colocaremos nosso arquivo openssl.cnf modelo em c:\jenkins_agent\workspace\tp-openssl-win-vs2013\17\product\out\standard\vs_2013_release\openssl\ssl, e um payload calc.dll de 32 bits em c:\tmp. "Log do Process Monitor do openssl.cnf plantado"

Atlassian Bitbucket

Análise do Crassus

Conforme descrito em VU#240785, versões mais antigas do software Atlassian Bitbucket são vulneráveis a escalonamento de privilégios devido a ACLs fracas do diretório de instalação. Como qualquer software Windows instalado em um local fora de C:\Program Files\ ou outros locais restritos por ACL, cabe ao instalador do software definir explicitamente ACLs no diretório de destino.

O Crassus encontra muitas maneiras de alcançar o escalonamento de privilégios com este software, incluindo:

  • Colocação de DLLs ausentes em locais graváveis pelo usuário.
  • Colocação de EXEs ausentes em locais graváveis pelo usuário.
  • Renomear o diretório de um EXE privilegiado para permitir que o usuário coloque um EXE com o mesmo nome.

Saída do Crassus para Atlassian Bitbucket

Sequestro de EXE

Na saída do Crassus, podemos ver que c:\atlassian\bitbucket\7.9.1\elasticsearch\bin\elasticsearch-service-x64.exe é privilegiado, mas como está em execução, não podemos simplesmente substituí-lo. No entanto, podemos usar outro truque para sequestrá-lo. Podemos simplesmente renomear o diretório onde ele reside, criar um novo diretório com o mesmo nome e plantar nosso payload com o mesmo nome. "Renomear o diretório de onde um processo privilegiado está sendo executado"

Assim que reiniciarmos com um log de inicialização do Process Monitor, podemos ver que nosso arquivo elasticsearch-service-x64.exe plantado está sendo executado em vez do real, com base no ícone da Calculadora do Windows. "Calc.exe plantado como elasticsearch-service-x64.exe"

McAfee

Conforme descrito em VU#287178, versões mais antigas do software McAfee são vulneráveis a escalonamento de privilégios via openssl.cnf. Vamos dar uma olhada: Saída do Crassus para McAfee

Para ver por que existem duas referências diferentes a openssl.cnf neste log de inicialização, podemos consultar o arquivo results.csv: results.csv para McAfee

Observe que o carregamento do arquivo openssl.cnf do caminho D:\ exigirá investigação manual adicional, pois a viabilidade de carregar tal caminho depende da plataforma em questão e de qual acesso ao sistema está disponível. Pode ser possível criar um disco óptico que forneça um arquivo openssl.cnf que também se refira a um caminho que resolva para a unidade óptica.

Microsoft SQL Server 2022

O SQL Server 2022 não é obviamente vulnerável a escalonamento de privilégios devido a ACLs fracas, a menos que seja instalado em um local não padrão. Se for instalado em um local fora de C:\Program Files, o Crassus descobrirá várias possibilidades de escalonamento de privilégios. A maioria dos aplicativos Windows que incluem um componente privilegiado parece ser explorável dessa forma se for instalada em um diretório que já não tenha ACLs inerentemente seguras. "Microsoft SQL Server 2022 instalado em um diretório inseguro"

Solução de Problemas

Arquivo ausente não executado

Se o Crassus relatar o carregamento privilegiado de um arquivo que um usuário pode plantar ou modificar, isso não significa necessariamente que seja um cenário explorável. Embora o Crassus procure por tipos de arquivo potencialmente interessantes, um arquivo de log do Process Monitor não indicará diretamente o que o processo associado faria com o arquivo se ele estivesse lá. Pode ser algo tão simples quanto extrair um ícone de programa. Investigar a pilha de chamadas da operação de arquivo no Process Monitor pode dar uma dica do que teria sido feito. Ou simplesmente coloque o arquivo e investigue o comportamento com um novo log de inicialização do Process Monitor, se preferir o caminho mais fácil da força bruta. Você também pode encontrar uma biblioteca ausente onde o Crassus não consegue encontrar a biblioteca para saber quais exportações devem estar presentes, ou as exportações que o Crassus encontram entram em conflito de uma forma que impede a compilação adequada da DLL. Nesses casos, o Crassus recorrerá à criação de uma DLL que não exporta nenhum nome de função. Dependendo de como o aplicativo de destino carrega a biblioteca, a ausência de nomes de função esperados e/ou números ordinais pode impedir que o aplicativo de destino carregue a biblioteca com sucesso. Este cenário exigirá esforço manual para determinar como a DLL proxy deve ser.

Código executado com privilégios inesperados

O Crassus procurará por operações de arquivo privilegiadas para descobrir caminhos de interesse. Você pode encontrar um cenário onde tanto um processo privilegiado quanto um não privilegiado acessam um caminho, mas apenas o processo não privilegiado é o que executa o que pode estar presente. Alternativamente, você pode encontrar um cenário onde um processo pai é executado com privilégios, mas pode explicitamente gerar processos filho com privilégios mais baixos.

Descobertas desaparecem na reinicialização

Especialmente ao instalar software pela primeira vez, ou ao instalar atualizações, o Process Monitor pode registrar uma operação de arquivo que parece explorável, mas não ocorre toda vez que o sistema é inicializado. Explorar essas operações pode ser possível na primeira reinicialização após esse evento acontecer. Para evitar tais casos extremos, confirme que logs de inicialização subsequentes contêm as mesmas operações de arquivo relatadas em reinicializações subsequentes.

Contribuições

Seja um erro de digitação, um bug ou um novo recurso, o Crassus está muito aberto a contribuições, desde que concordemos com o seguinte:

  • Você está de acordo com a licença MIT deste projeto.
  • Antes de criar um pull request, crie uma issue para que possa ser discutida antes de qualquer trabalho, pois o desenvolvimento interno não é rastreado pelo repositório público do GitHub. Caso contrário, você corre o risco de ter um pull request rejeitado se, por exemplo, já estivermos trabalhando no mesmo recurso/similar, ou por qualquer outro motivo.

Créditos

  • https://github.com/eronnen/procmon-parser/
Baixar ferramenta