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
Spartacus — Spartacus: kit de herramientas de secuestro DLL/COM | Kitploit
Herramientas/GitHubGitHub/accenture/spartacus
Herramientas DefensivasGeneración de PayloadsAnálisis de CódigoExplotaciónIngeniería InversaPruebas de PenetraciónAnálisis de BinariosRed TeamingArchived
GitHubaccenture/spartacus

Spartacus

Spartacus: kit de herramientas de secuestro DLL/COM

Ver Repositorio
1.1k153hace 2 añosRevisado 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

[!CAUTION] Este repositorio no tiene mantenimiento, visita https://github.com/sadreck/Spartacus para la versión más reciente.

Spartacus: Kit de Secuestro de DLL/COM version

¿Por qué "Spartacus"?

Si has visto la película Spartacus de 1960, recordarás la escena donde los romanos piden que Spartacus se entregue. En el momento en que el verdadero Spartacus se levantó, muchos otros también se levantaron y afirmaron ser él usando la frase "¡YO SOY SPARTACUS!".

Cuando un proceso vulnerable al Secuestro de DLL solicita la carga de una DLL, es como si preguntara "¿QUIÉN ES VERSION.DLL?" y directorios aleatorios comienzan a decir "YO SOY VERSION.DLL" y "NO, YO SOY VERSION.DLL". Y así, Spartacus.

¿En qué se diferencia esta herramienta de todas las demás herramientas de secuestro existentes?

  • Spartacus automatiza la mayor parte del proceso. Analiza registros sin procesar de SysInternals Process Monitor, y puedes dejar ProcMon ejecutándose durante horas y descubrir vulnerabilidades de secuestro de DLL/COM de segundo y tercer nivel (por ejemplo, una aplicación que carga otra DLL que a su vez carga otra DLL cuando usas una característica específica de la aplicación principal).
  • Genera automáticamente soluciones de Visual Studio para DLLs vulnerables.
  • Capaz de procesar archivos PML grandes y almacenar todos los eventos de interés en un archivo CSV. Prueba local procesó un archivo de 3 GB con 8 millones de eventos en 45 segundos.
  • Soporta escaneo tanto de vulnerabilidades de secuestro de DLL como de COM.
  • Soporta la generación de certificados autofirmados y la firma de archivos DLL.
  • Al utilizar la funcionalidad de Ghidra, extrae firmas de funciones exportadas y ejecuta tu payload a través de funciones proxy individuales en lugar de ejecutar todo desde DllMain. Esta técnica fue inspirada e implementada a partir del tutorial descrito en https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain, por Shantanu Khandelwal.
  • [Defensa] Modo de monitoreo que intenta identificar aplicaciones en ejecución que están haciendo proxy de llamadas, como en "Secuestro de DLL en progreso". Esto es solo para obtener cualquier fruta fácil y no debe considerarse confiable.

Tabla de Contenidos

  • Instalación
  • Funcionalidad Soportada
    • Secuestro de DLL
      • Uso
    • Secuestro de COM
      • Uso
    • Generación de Proxy DLL
      • Uso
    • Firma de Archivos DLL
      • Uso
    • Detección de Secuestro de DLL
  • Argumentos de Línea de Comandos
  • Contribuciones
  • Créditos

Instalación

Encuentra y descarga la última versión de Spartacus en Releases. De lo contrario, simplemente clona este repositorio y compila desde el código fuente.

Funcionalidad Soportada

A continuación se describe cada uno de los modos que soporta Spartacus.

Nota: Los argumentos de línea de comandos han cambiado significativamente de v1 a v2.

Secuestro de DLL

La funcionalidad original de Spartacus era únicamente encontrar vulnerabilidades de secuestro de DLL. Funciona de la siguiente manera:

  1. Genera un archivo de configuración de ProcMon (PMC) sobre la marcha, basado en los argumentos pasados. Los filtros que se establecerán son:
    • La operación es CreateFile.
    • La ruta termina en .dll.
    • El nombre del proceso no es procmon.exe ni procmon64.exe.
    • Habilitar Drop Filtered Events para asegurar un tamaño mínimo de salida PML.
    • Deshabilitar Auto Scroll.
  2. Ejecuta Process Monitor y se detiene hasta que el usuario presione ENTER.
  3. El usuario ejecuta/finaliza procesos, o lo deja funcionando el tiempo que necesite.
  4. Termina Process Monitor cuando el usuario presiona ENTER.
  5. Analiza el archivo de registro de eventos (PML) de salida.
    1. Crea un archivo CSV con todas las DLLs con resultado NAME_NOT_FOUND y PATH_NOT_FOUND.
    2. Compara las DLLs anteriores e intenta identificar las DLLs que realmente se cargaron.
    3. Para cada DLL "encontrada", genera una solución de Visual Studio para hacer proxy de todas las funciones de exportación identificadas de esa DLL.

Uso del Secuestro de DLL

Recolecta todos los eventos y guárdalos en C:\Data\logs.pml. Todas las DLLs vulnerables se guardarán como C:\Data\VulnerableDLLFiles.csv y todas las soluciones de proxy DLL en C:\Data\Solutions.

root@kitploit:~
--mode dll --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose

Analiza un archivo de registro PML existente, guarda la salida en CSV y genera soluciones de Visual Studio proxy.

root@kitploit:~
--mode dll --existing --pml C:\MyData\SomeBackup.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose

Capturas de Pantalla

DLL Runtime

CSV Output

Secuestro de COM

Una nueva funcionalidad de Spartacus es identificar vulnerabilidades de secuestro de COM locales. Funciona de la siguiente manera:

  1. Genera un archivo de configuración de ProcMon (PMC) sobre la marcha, basado en los argumentos pasados. Los filtros que se establecerán son:
    • La operación es RegOpenKey.
    • El nombre del proceso no es procmon.exe ni procmon64.exe.
    • Habilitar Drop Filtered Events para asegurar un tamaño mínimo de salida PML.
    • Deshabilitar Auto Scroll.
  2. Ejecuta Process Monitor y se detiene hasta que el usuario presione ENTER.
  3. El usuario ejecuta/finaliza procesos, o lo deja funcionando el tiempo que necesite.
  4. Termina Process Monitor cuando el usuario presiona ENTER.
  5. Analiza el archivo de registro de eventos (PML) de salida.
    1. Identifica todas las claves de registro faltantes que terminan en InprocServer32 y cuyo resultado es NAME_NOT_FOUND.
    2. Si la clave identificada está en HKEY_CURRENT_USER, busca su GUID en HKEY_CLASSES_ROOT e incluye sus detalles en el CSV de exportación (si se encuentra).

Para el secuestro de COM, Spartacus también soporta el escaneo del sistema local en busca de entradas COM mal configuradas:

  1. Enumera todo HKEY_CLASSES_ROOT, HKEY_CURRENT_USER y HKEY_LOCAL_MACHINE.
  2. Busca claves de registro llamadas InProcServer, InProcServer32, LocalServer o LocalServer32.
  3. Identifica cualquier ubicación faltante de EXE/DLL, junto con cualquier mala configuración de ACL, como la capacidad de Modificar o Eliminar el archivo por parte del usuario actual.

Uso del Secuestro de COM

Recolecta todos los eventos y guárdalos en C:\Data\logs.pml. Toda la información vulnerable de COM se guardará como C:\Data\VulnerableCOM.csv.

root@kitploit:~
--mode com --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose

Procesa un archivo PML existente para identificar entradas COM vulnerables.

root@kitploit:~
--mode com --existing --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose

Enumera el registro del sistema local para identificar bibliotecas y ejecutables COM faltantes o mal configurados.

root@kitploit:~
--mode com --acl --csv C:\Data\VulnerableCOM.csv --verbose

Capturas de Pantalla

COM Runtime

CSV Output

Generación de Proxy DLL

Spartacus soporta la generación de soluciones de Visual Studio creando proyectos esqueleto para que los uses, basados en la DLL que deseas explotar.

  • Redirigiendo todas las llamadas exportando funciones de vuelta a la DLL legítima.
    • Esto significa que tendrás que ejecutar tu payload desde la función DllMain.
  • Usando Ghidra, extrae tantas firmas/definiciones de funciones como sea posible de la DLL objetivo y crea funciones proxy para estas.
    • Para cualquier función cuya firma no se haya podido extraer, se redirigirá directamente a la función/DLL legítima.
    • Esto significa que puedes ejecutar tu payload desde una función fuera de DllMain.
    • Por ejemplo, si deseas explotar version.dll, podrías ejecutar tu implante desde GetFileVersionInfoExW si esa función es llamada por la aplicación vulnerable.

Uso de la Generación de Proxy DLL

Genera una solución que redirige todas las exportaciones (sin proxy de funciones).

root@kitploit:~
--mode proxy --dll C:\Windows\System32\version.dll --solution "C:\data\tmp\refactor-version" --overwrite --verbose --external-resources

Es posible ingresar múltiples DLLs a la vez.

root@kitploit:~
--mode proxy --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\userenv.dll --solution "C:\data\tmp\dll-collection" --overwrite --verbose --external-resources

Crea proxies para tantas funciones como sea posible (basado en la salida de Ghidra).

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose

Igual que arriba, pero usa archivos de recursos externos para generar la solución (si necesitas modificarlos).

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources

Utiliza prototipos de función pregenerados para funciones de las cuales Ghidra no pudo extraer definiciones.

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources --prototypes C:\data\prototypes.csv

Genera proxies solo para las funciones GetFileVersionInfoExW y GetFileVersionInfoExA.

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\version.dll --solution C:\Projects\spartacus-version --verbose --overwrite --external-resources --only "GetFileVersionInfoExW, GetFileVersionInfoExA"

Genera una base de datos de prototipos de funciones a partir de archivos *.h existentes, ayudando a generar funciones proxy para aquellas de las que Ghidra no pudo extraer su definición de función.

root@kitploit:~
--mode proxy --action prototypes --path "C:\Program Files (x86)\Windows Kits" --csv C:\data\prototypes.csv --verbose

Lista las exportaciones de la DLL y verifica si cada función tiene un prototipo pregenerado.

root@kitploit:~
--mode proxy --action exports --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\amsi.dll --prototypes ./Assets/prototypes.csv

Firma de Archivos DLL

Spartacus ahora soporta la generación de certificados autofirmados (copiando atributos de archivos existentes) y la firma de archivos DLL.

Uso para Firma de Archivos DLL

Crea un certificado de firma usando propiedades de C:\Windows\System32\version.dll (debe ser una DLL firmada).

root@kitploit:~
--mode sign --action generate --pfx "C:\Output\certificate.pfx" --password "Welcome1" --not-before "2022-12-31 00:00:55" --not-after "2026-01-01 00:00:01" --copy-from C:\Windows\System32\version.dll --verbose

Firma una DLL usando un certificado existente/generado.

root@kitploit:~
--mode sign --action sign --pfx "C:\Output\certificate.pfx" --password "Welcome1" --path "C:\Input\MyFakeVersion.dll" --algorithm SHA256 --verbose

Detección de Secuestro de DLL

Spartacus también tiene un modo --detect que intenta identificar proxys de DLL activos. La lógica es:

  • Enumerar todos los procesos.
  • Para cada proceso, cargar las DLLs (módulos) que tiene cargadas en memoria (suponiendo que tienes los permisos adecuados para hacerlo).
  • Si encuentras una DLL con el mismo nombre:
    • Si ambos archivos están en una ruta del sistema (ej. Windows, System32, Program Files), ignóralos.
    • Si solo uno de los archivos está en una ruta del sistema y el otro está en una ubicación escribible por el usuario, marca el archivo.

Para usar esta característica, simplemente ejecuta Spartacus con --detect.

Autofirmado de Ejecutables/DLL

Spartacus soporta el modo --sign que te permite tanto generar certificados autofirmados como firmar DLLs compiladas con ellos.

Genera un certificado autofirmado, copiando el Emisor/Asunto de un archivo existente:

root@kitploit:~
--mode sign --action generate --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --not-before "2023-01-01 00:00:04" --not-after "2025-01-01 00:00:42" --copy-from C:\Windows\System32\version.dll --verbose

Y usa ese certificado para firmar tu archivo compilado:

root@kitploit:~
--mode sign --action sign --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --path "C:\Projects\Spartacus-AMSI\amsi.dll" --algorithm SHA256 --verbose

Argumentos de Línea de Comandos

Para facilitarte la vida, usa el archivo CommandLineGenerator.html.

Contribuciones

Ya sea un error tipográfico, un bug o una nueva funcionalidad, Spartacus 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 un pull request, 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 tu pull request sea rechazado si, por ejemplo, ya estamos trabajando en la misma funcionalidad o similar, o por cualquier otra razón.

Créditos

  • https://github.com/eronnen/procmon-parser/
  • https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain
  • https://stmxcsr.com/persistence/com-hijacking.html
  • El icono de Spartacus es de Helmet icons created by Darius Dan - Flaticon | https://dariusdan.com/
  • https://github.com/Danielku15/SigningServer
Descargar herramienta
  • Crea un CSV de salida con toda la información recopilada.
  • Spartacus no crea automáticamente una solución de Visual Studio para el secuestro de COM, sin embargo, si necesitas crear una DLL proxy, puedes usar el modo proxy.
  • ModoArgumentoDescripción
    --modeDefine el modo a usar, uno de: dll, proxy, com y detect.
    todos--verboseHabilita la salida detallada.
    todos--debugHabilita la salida de depuración.
    todos--external-resourcesPor defecto, Spartacus usará recursos incrustados para generar archivos de solución de VS, etc. Si necesitas modificar las plantillas, usa este argumento para que Spartacus cargue todos los archivos de la carpeta ./Assets.
    dll, com--procmonUbicación (archivo) de Process Monitor de SysInternals procmon.exe o procmon64.exe
    dll, com--pmlUbicación (archivo) para almacenar el archivo de registro de eventos de ProcMon. Si el archivo existe, se sobrescribirá. Cuando se usa con --existing, indica el archivo de registro de eventos a leer y no se sobrescribirá.
    dll, com--pmcDefine un archivo ProcMon (PMC) personalizado a usar. Este archivo no se modificará y se usará tal cual.
    dll, com--csvUbicación (archivo) para almacenar la salida CSV de la ejecución.
    dll, proxy--solutionRuta al directorio donde se almacenarán las soluciones para las DLLs proxy.
    dll, com--existingIndicador para que Spartacus procese un archivo de registro de eventos de ProcMon existente (PML). Para indicar el archivo de registro, usa --pml. Útil cuando has estado ejecutando ProcMon durante horas o lo usaste en el registro de arranque.
    dll--allPor defecto, se omitirán las DLLs en los directorios de Windows o Program Files. Usa esto para incluir esos directorios en la salida.
    proxy--ghidraRuta al archivo 'analyzeHeadless.bat' de Ghidra. Se usa cuando deseas hacer proxy de funciones específicas en lugar de solo DllMain.
    proxy--dllRuta a la DLL que deseas hacer proxy, y puede incluir múltiples instancias de este argumento. Además, puede contener comodines como C:\Windows\System32\*.dll – sin embargo, todas las rutas deben terminar en *.dll.
    proxy, sign--overwriteSi el archivo de --solution (proxy) o --pfx (sign) ya existe, usa esta bandera para sobrescribirlo.
    proxy--onlyGenera funciones proxy solo para las funciones definidas en esta variable. Los valores están separados por comas, como 'WTSFreeMemory,WTSFreeMemoryExA,WTSSetUserConfigA'.
    proxy--actionLa acción por defecto es generar una solución de VS. --action prototypes toma como entrada una carpeta del SDK de Windows y analiza archivos *.h para generar una base de datos de prototipos de funciones. --action exports muestra las funciones de exportación de una DLL y, cuando se complementa con --prototypes, mostrará si la definición de la función ha sido pregenerada.
    sign--actionAl usar --action con el módulo sign, toma una de dos opciones: generate para crear un PFX y sign para firmar un archivo.
    proxy--pathActualmente solo funciona con --action prototypes y es la ubicación de un directorio del SDK de Windows.
    proxy--prototypesUbicación de prototypes.csv (actualmente dentro de la carpeta ./Assets).
    com--aclEnumera el sistema local en busca de bibliotecas y ejecutables COM faltantes o mal configurados.
    sign--subjectSe usa con --action generate para especificar el asunto del certificado.
    sign--issuerSe usa con --action generate para especificar el emisor del certificado.
    sign--copy-fromSe usa con --action generate para especificar un archivo firmado existente del cual copiar el Emisor y el Asunto.
    sign--not-beforeSe usa con --action generate para definir la fecha a partir de la cual el nuevo certificado será válido, formato YYYY-MM-DD HH:MM:SS.
    sign--not-afterSe usa con --action generate para definir la fecha hasta la cual el nuevo certificado será válido, formato YYYY-MM-DD HH:MM:SS.
    sign--pfxCuando se usa con --action generate, es donde se guardará el archivo pfx. Cuando se usa con --action sign, es de donde se cargará el archivo pfx.
    sign--passwordCuando se usa con --action generate, define la contraseña para el archivo --pfx.
    sign--pathCuando se usa con --action sign, define la ubicación del archivo ejecutable/DLL a firmar.
    sign--algorithmCuando se usa con --action sign, define el algoritmo hash que se usará para la firma. Opciones: MD5, SHA1, SHA256, SHA384, SHA512.
    sign--timestampCuando se usa con --action sign, define el Servidor de Marca de Tiempo, como http://timestamp.sectigo.com o http://timestamp.digicert.com.