Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Crassus — Herramienta de descubrimiento de escalada de privilegios en Windows que analiza los registros de arranque de Process Monitor para identificar secuestro de DLL, ACL débiles y otras rutas de elevación, generando automáticamente código fuente de DLL proxy. | Kitploit
Herramientas/GitHubGitHub/vu-ls/crassus
Escalada de PrivilegiosExplotaciónPruebas de PenetraciónAnálisis de Binarios
GitHubvu-ls/crassus

Crassus

Herramienta de descubrimiento de escalada de privilegios en Windows que analiza los registros de arranque de Process Monitor para identificar secuestro de DLL, ACL débiles y otras rutas de elevación, generando automáticamente código fuente de DLL proxy.

Ver Repositorio
633644hace 7 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Herramienta de descubrimiento de escalada de privilegios Crassus para Windows

Inicio rápido

  1. En Process Monitor, selecciona la opción Enable Boot Logging. "Opción de registro de arranque de Process Monitor"
  2. Reinicia.
  3. Una vez que hayas iniciado sesión y Windows se haya estabilizado, ejecuta Process Monitor nuevamente.
  4. Cuando se te solicite, guarda el registro de arranque, por ejemplo, en raw.PML.
  5. Restablece el filtro predeterminado de Process Monitor usando Ctrl-R.
  6. Guarda este archivo de registro, por ejemplo, en boot.PML.
  7. Ejecuta Crassus.exe boot.PML.
  8. Investiga cualquier resultado resaltado en verde y las entradas correspondientes en results.csv.

Índice

  • Por qué "Crassus"
    • ¿Realmente hiciste otra herramienta de descubrimiento de escalada de privilegios?
    • Características
    • Diagrama de flujo
  • Capturas de pantalla
    • Ejecución de Crassus
    • Salida CSV
    • Exportaciones
    • Funciones de DLL exportadas
    • Ordinales de DLL exportados
  • Obtener Crassus.exe
    • Compilación con Visual Studio
    • Usar Crassus.exe precompilado
  • Uso
    • Flujo de ejecución
    • Argumentos de línea de comandos
    • Ejemplos
    • Plantilla de DLL proxy
    • Plantilla de openssl.cnf
  • Compilación de DLLs proxy
    • Visual Studio
    • MinGW
  • Ejemplos del mundo real
    • Acronis True Image
    • Atlassian Bitbucket
    • McAfee
    • Microsoft SQL Server 2022
  • Solución de problemas
    • Archivo faltante no ejecutado
    • Código ejecutado con privilegios inesperados
    • Hallazgos que desaparecen al reiniciar
  • Contribuciones
  • Créditos

¿Por qué "Crassus"?

Accenture creó una herramienta llamada Spartacus, que encuentra oportunidades de secuestro de DLL en Windows. Usando Spartacus como punto de partida, creamos Crassus para ampliar las capacidades de descubrimiento de escalada de privilegios en Windows más allá de simplemente buscar archivos faltantes. Los ACL utilizados por los archivos y directorios de procesos privilegiados pueden encontrar más que solo buscar archivos faltantes para lograr el objetivo.

¿Realmente hiciste otra herramienta de descubrimiento de escalada de privilegios?

...pero con un giro, ya que Crassus utiliza el Monitor de procesos de SysInternals y analiza archivos de registro PML sin procesar. El uso típico es generar un registro de arranque usando Process Monitor y luego analizarlo con Crassus. También generará automáticamente código fuente para DLLs proxy con todas las exportaciones relevantes para DLLs vulnerables.

Características

  • Analiza archivos PML de ProcMon de forma nativa. El analizador de registros (PML) se ha implementado portando funcionalidad parcial a C# desde https://github.com/eronnen/procmon-parser/. Puedes encontrar la especificación del formato aquí.
  • Crassus creará código fuente para DLLs proxy para todas las DLLs faltantes identificadas. Por ejemplo, si una aplicación es vulnerable a secuestro de DLL a través de version.dll, Crassus creará archivos version.cpp y version.def para ti con todas las exportaciones incluidas. Por defecto, las DLLs proxy lanzarán calc.exe. Se incluyen scripts de compilación para construir las DLLs en Visual Studio o MinGW.
  • Para otros eventos de interés, como la creación de un proceso o la carga de una biblioteca, se investiga la capacidad de los usuarios no privilegiados de modificar el archivo o cualquier parte de la ruta al archivo.
  • Capaz de procesar archivos PML grandes y almacenar todos los eventos de interés en un archivo CSV de salida.

Diagrama de flujo

La idea general de cómo funciona Crassus se puede resumir en este diagrama de flujo: Diagrama de flujo de Crassus

Capturas de pantalla

Ejecución de Crassus

Ejecutando Crassus

Salida CSV

Salida CSV

Exportaciones de salida

Exportaciones

Funciones de DLL exportadas

Funciones de DLL

Ordinales de DLL exportados

Ordinales de DLL

Obtener Crassus.exe

Compilación con Visual Studio

Crassus se desarrolló como un proyecto de Visual Studio 2019. Para compilar Crassus.exe:

  1. Abre Crassus.sln
  2. Presiona Ctrl+Shift+B en tu teclado

Usar Crassus.exe precompilado

Si confías en ejecutar código de otras personas sin saber qué hace, Crassus.exe se proporciona en este repositorio.

Uso

Flujo de ejecución

  1. En Process Monitor, selecciona la opción Enable Boot Logging. "Opción de registro de arranque de Process Monitor"
  2. Reinicia.
  3. Una vez que hayas iniciado sesión y Windows se haya estabilizado, opcionalmente ejecuta también tareas programadas que puedan estar configuradas para ejecutarse con privilegios.
  4. Ejecuta Process Monitor nuevamente.
  5. Cuando se te solicite, guarda el registro de arranque.
  6. Restablece el filtro predeterminado de Process Monitor usando Ctrl-R.
  7. Guarda este archivo de registro, por ejemplo, en boot.PML. La razón para volver a guardar el archivo de registro es doble:
    1. Las versiones anteriores de Process Monitor no guardan los registros de arranque como un solo archivo.
    2. Los registros de arranque por defecto no estarán filtrados, lo que puede contener ruido adicional, como un secuestro de DLL de usuario local en el lanzamiento del propio Process Monitor.

Argumentos de línea de comandos

ArgumentoDescripción
<PMLFILE>Ubicación (archivo) del archivo de registro de eventos de ProcMon existente.
--verboseHabilita la salida detallada.
--debugHabilita la salida de depuración.

Ejemplos

Analiza el registro de arranque de Process Monitor guardado en boot.PML. Todas las rutas vulnerables se guardarán como results.csv y todos los archivos fuente de DLL proxy en el subdirectorio stubs.

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

Plantilla de DLL proxy

A continuación se muestra la plantilla que se utiliza al generar DLLs proxy. Para DLLs encontradas por Crassus, la DLL proxy contendrá los mismos nombres de exportación especificados en %_EXPORTS_%, así como los mismos ordinales especificados en el archivo .def. Crassus detectará si la DLL necesita ser compilada como una biblioteca de 32 bits o de 64 bits observando la arquitectura del proceso padre, y etiquetando el código fuente en el campo %_BUILD_AS_% en consecuencia.

Si la DLL real no se puede encontrar usando el registro de Process Monitor, o si el nombre de exportación es problemático, los scripts de compilación recurrirán a crear una DLL sin exportaciones especificadas.

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

#include <windows.h>;

extern "C" {

  VOID Payload() {
      // Run your payload here.
      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
}

Plantilla de openssl.cnf

Para aplicaciones que utilizan de manera insegura el valor de la variable OPENSSLDIR, se puede colocar un archivo openssl.cnf manipulado en la ubicación indicada. Para este ejemplo, el software cargará C:\tmp\calc.dll. Asegúrate de usar una biblioteca de 32 bits para apuntar a procesos de 32 bits, y una biblioteca de 64 bits para apuntar a procesos de 64 bits.

root@kitploit:~
[openssl_init]
# This will attempt to load the file c:\tmp\calc.dll as part of OpenSSL initialization
# Build scripts should detect whether the calc.dll library needs to be built as 32-bit or 64-bit
/tmp/calc = asdf

Compilación de DLLs proxy

Visual Studio

La compilación es posible usando el binario cl.exe incluido con Visual Studio. Específicamente:

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

Para automatizar el proceso de compilación, incluyendo especificar si la biblioteca debe ser de 64 bits o de 32 bits:

  1. Abre el Símbolo del sistema para desarrolladores de Visual Studio.
  2. Compila las DLLs con el script build.bat.
  3. Renombra el archivo compilado según sea necesario si el nombre del archivo vulnerable termina con algo diferente a .dll.

Nota: Debido a un comportamiento desafortunado con vcvarsall.bat, que definitivamente no es un error, puedes encontrar problemas al intentar ejecutar build.bat más de una vez en la misma sesión del Símbolo del sistema para desarrolladores de Visual Studio. Si encuentras un error, simplemente cierra la ventana y ábrela de nuevo.

MinGW

Si Visual Studio no está disponible, las DLLs proxy se pueden compilar con MinGW-w64 en su lugar. En una plataforma Ubuntu, por ejemplo, MinGW se puede instalar mediante: sudo apt install g++-mingw-w64-x86-64-win32 g++-mingw-w64-i686-win32

root@kitploit:~
# Create a 32-bit DLL
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

# Create a 64-bit DLL
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 el proceso de compilación, incluyendo especificar si la biblioteca debe ser de 64 bits o de 32 bits:

  1. Abre una terminal.
  2. Ejecuta bash ./build.sh
  3. Renombra el archivo compilado según sea necesario si el nombre del archivo vulnerable termina con algo diferente a .dll.

Ejemplos del mundo real

Acronis True Image

Análisis de Crassus

Como se describe en VU#114757, versiones antiguas de Acronis contienen múltiples vulnerabilidades de escalada de privilegios.

  1. Colocación de openssl.cnf en una ubicación que puede ser creada por un usuario no privilegiado.
  2. ACL inapropiados en el directorio C:\ProgramData\Acronis.

Crassus encuentra ambos problemas automáticamente. Salida de Crassus para Acronis

Secuestro de DLL

Al colocar nuestro archivo curl.dll compilado en el directorio C:\ProgramData\Acronis\Agent\var\atp-downloader\ y reiniciar con un nuevo registro de arranque de Process Monitor, podemos ver que nuestra carga útil que ejecuta calc.exe se ejecuta con privilegios de SYSTEM. "Registro de Process Monitor de curl.dll colocado"

Colocación de openssl.cnf

El software vulnerable de Acronis intenta cargar openssl.cnf desde dos ubicaciones diferentes. Colocaremos nuestro archivo de plantilla openssl.cnf en c:\jenkins_agent\workspace\tp-openssl-win-vs2013\17\product\out\standard\vs_2013_release\openssl\ssl, y una carga útil calc.dll de 32 bits en c:\tmp. "Registro de Process Monitor de openssl.cnf colocado"

Atlassian Bitbucket

Análisis de Crassus

Como se describe en VU#240785, versiones antiguas de Atlassian Bitbucket son vulnerables a escalada de privilegios debido a ACL débiles del directorio de instalación. Como con cualquier software de Windows que se instala en una ubicación fuera de C:\Program Files\ u otras ubicaciones restringidas por ACL, depende del instalador del software establecer explícitamente los ACL en el directorio de destino.

Crassus encuentra muchas formas de lograr escalada de privilegios con este software, incluyendo:

  • Colocación de DLLs faltantes en ubicaciones escribibles por el usuario.
  • Colocación de EXEs faltantes en ubicaciones escribibles por el usuario.
  • Renombrar el directorio de un EXE privilegiado para permitir que el usuario coloque un EXE del mismo nombre.

Salida de Crassus para Atlassian Bitbucket

Secuestro de EXE

En la salida de Crassus, podemos ver que c:\atlassian\bitbucket\7.9.1\elasticsearch\bin\elasticsearch-service-x64.exe es privilegiado, pero como se está ejecutando, no podemos simplemente reemplazarlo. Sin embargo, podemos usar otro truco para secuestrarlo. Podemos renombrar el directorio en el que reside, crear un nuevo directorio con el mismo nombre y colocar nuestra carga útil con el mismo nombre. "Renombrar el directorio desde el que se ejecuta un proceso privilegiado"

Una vez que reiniciamos con un registro de arranque de Process Monitor, podemos ver que nuestro archivo elasticsearch-service-x64.exe colocado se está ejecutando en lugar del real, basado en el icono de la Calculadora de Windows. "calc.exe colocado como elasticsearch-service-x64.exe"

McAfee

Como se describe en VU#287178, versiones antiguas de software de McAfee son vulnerables a escalada de privilegios a través de openssl.cnf. Echemos un vistazo: Salida de Crassus para McAfee

Para ver por qué hay dos referencias diferentes a openssl.cnf en este registro de arranque, podemos consultar el archivo results.csv: results.csv para McAfee

Ten en cuenta que la carga del archivo openssl.cnf desde la ruta D:\ requerirá una investigación manual adicional, ya que la viabilidad de cargar dicha ruta depende de la plataforma en cuestión y del acceso que se tenga al sistema. Podría ser posible crear un disco óptico que proporcione un archivo openssl.cnf que también haga referencia a una ruta que se resuelva en la unidad óptica.

Microsoft SQL Server 2022

SQL Server 2022 no es obviamente vulnerable a escalada de privilegios debido a ACL débiles a menos que se instale en una ubicación no estándar. Si se instala en una ubicación fuera de C:\Program Files, Crassus descubrirá varias posibilidades de escalada de privilegios. La mayoría de las aplicaciones de Windows que incluyen un componente privilegiado parecen ser explotables de esta manera si se instalan en un directorio que no tiene ACL inherentemente seguros. "Microsoft SQL Server 2022 instalado en un directorio inseguro"

Solución de problemas

Archivo faltante no ejecutado

Si Crassus informa la carga privilegiada de un archivo que un usuario puede colocar o modificar, esto no significa necesariamente que sea un escenario explotable. Si bien Crassus busca tipos de archivo potencialmente interesantes, un archivo de registro de Process Monitor no indicará directamente qué habría hecho el proceso asociado con el archivo si estuviera allí. Podría ser algo tan simple como extraer un icono de programa. Investigar la pila de llamadas de la operación del archivo en Process Monitor puede dar una pista de lo que se habría hecho. O simplemente coloca el archivo e investiga el comportamiento con un nuevo registro de arranque de Process Monitor, si prefieres el camino más fácil de la fuerza bruta. También puedes encontrarte con una biblioteca faltante en la que Crassus no pueda encontrar la biblioteca para saber qué exportaciones deberían estar presentes, o que las exportaciones que Crassus encontró entren en conflicto de una manera que impida la compilación adecuada de la DLL. En tales casos, Crassus recurrirá a crear una DLL que no exporte ningún nombre de función. Dependiendo de cómo la aplicación de destino cargue la biblioteca, la ausencia de nombres de función y/o números ordinales esperados puede impedir que la aplicación de destino cargue la biblioteca correctamente. Este escenario requerirá un esfuerzo manual para determinar cómo debería ser la DLL proxy.

Código ejecutado con privilegios inesperados

Crassus buscará operaciones de archivos privilegiados para descubrir rutas de interés. Puedes encontrarte con un escenario en el que tanto un proceso privilegiado como uno no privilegiado accedan a una ruta, pero solo el proceso no privilegiado es el que realiza la ejecución de lo que pueda estar presente. Alternativamente, puedes encontrarte con un escenario en el que un proceso padre se ejecute con privilegios, pero pueda generar explícitamente procesos hijos con privilegios más bajos.

Hallazgos que desaparecen al reiniciar

Especialmente al instalar software por primera vez, o al instalar actualizaciones, Process Monitor puede registrar una operación de archivo que parece explotable pero que no ocurre cada vez que el sistema arranca. Explotar estas operaciones puede ser posible en el primer reinicio después de que ocurra dicho evento. Para evitar tales casos extremos, confirma que los registros de arranque posteriores contengan las mismas operaciones de archivo informadas en reinicios posteriores.

Contribuciones

Ya sea un error tipográfico, un error o una nueva característica, Crassus está muy abierto a contribuciones siempre que estemos de acuerdo en lo siguiente:

  • Estás de acuerdo con la licencia MIT de este proyecto.
  • Antes de crear una solicitud de extracción, crea un issue para que pueda ser discutido antes de hacer cualquier trabajo, ya que el desarrollo interno no se rastrea a través del repositorio público de GitHub. De lo contrario, corres el riesgo de que se rechace tu solicitud de extracción si, por ejemplo, ya estamos trabajando en la misma característica o similar, o por cualquier otra razón.

Créditos

  • https://github.com/eronnen/procmon-parser/
Descargar herramienta