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
KeeFarceReborn — Una DLL independiente que exporta bases de datos en texto claro una vez inyectada en el proceso de KeePass. | Kitploit
Herramientas/GitHubGitHub/d3lb3/keefarcereborn
Ataques de ContraseñasGeneración de PayloadsExfiltración de DatosPost-ExplotaciónRed TeamingGeneración de Shellcode
GitHubd3lb3/keefarcereborn

KeeFarceReborn

Una DLL independiente que exporta bases de datos en texto claro una vez inyectada en el proceso de KeePass.

Ver Repositorio
29935hace 3 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

KeeFarce Reborn

Un DLL independiente que exporta bases de datos en texto claro una vez inyectado en el proceso de KeePass.

Muy inspirado en los grandes proyectos KeeFarce, KeeThief y KeePassHax.

¿Otra herramienta de extracción de KeePass, por qué?

Hace unos años, @denandz publicó KeeFarce, la primera herramienta ofensiva diseñada para extraer bases de datos de KeePass en texto claro. Funciona inyectando un DLL en el proceso en ejecución y luego recorre el heap usando ClrMD para encontrar los objetos necesarios e invocar el método de exportación integrado de KeePass mediante reflexión. Su única desventaja en ese momento era que había que dejar varios archivos en el objetivo (el DLL de extracción + el DLL de ClrMD + el inyector + un DLL de arranque).

Un año después, @tifkin_ y @harmj0y publicaron un análisis en profundidad de las técnicas ofensivas dirigidas a KeePass (aunque ya no está disponible en el blog de harmj0y, los artículos se pueden encontrar en Wayback Machine: parte 1, parte 2). Esto resultó en la publicación de KeeThief, una herramienta capaz de descifrar la clave maestra de KeePass (incluso cuando se utilizan métodos de autenticación alternativos). Funcionó tan bien que los desarrolladores de KeePass añadieron un parámetro para mitigar esta técnica (se puede deshabilitar editando el archivo de configuración de KeePass si el usuario tiene los derechos suficientes, algo bastante común).

Estas herramientas se convirtieron rápidamente en mi opción preferida durante las pruebas de penetración, pero pronto quedaron obsoletas porque sus técnicas de inyección (es decir, el famoso grupo de API Win32 de VirtualAllocEx, WriteProcessMemory, CreateRemoteThread, WriteProcessMemory, etc.) ahora disparan la detección de inmediato. @snovvcrash abordó este problema haciendo un fork de KeeThief (ahora en un repositorio privado, pero aún accesible aquí) para mejorar el mecanismo de inyección con D/Invoke, escribiendo un gran artículo que detalla el proceso que siguió. Si bien demostró la viabilidad de mantener KeeThief, me resulta difícil implementar nuevas técnicas de inyección con regularidad, ya que el código de KeeThief está estrechamente vinculado a su inyector.

@holly-cracker también publicó KeePassHax, que viene como un único DLL y solo usa reflexión para descifrar la clave maestra de KeePass. Inspirado por este trabajo, decidí hacer lo mismo con KeeFarce y escribir mi propia herramienta de extracción de KeePass con las siguientes características:

  • Autosuficiente ⇒ no requiere interacción con el código del inyector para funcionar.
  • Solo usa librerías integradas de .NET (sin ClrMD) ⇒ mejor compatibilidad + un DLL de un solo archivo facilita el proceso de inyección.
  • Exporta la base de datos (como KeeFarce) ⇒ no es necesario recuperar el .kdbx ni usar una compilación personalizada de KeePass para ingresar la clave maestra recuperada.

KeeFarce Reborn también proporciona un DLL de plugin para KeePass para que KeePass se inyecte a sí mismo sin preocuparse por inyectores.

Compilación

Como el código se basa únicamente en .NET Framework sin dependencias externas, debería compilar fácilmente en Visual Studio 2015 y versiones posteriores.

Ejemplo de uso

KeeFarce Reborn no incluye un inyector para cargar el DLL en el proceso de KeePass. Esto es deliberado, ya que los inyectores quedan obsoletos cada pocos meses; tendrás que usar el tuyo propio. Las siguientes partes muestran dos formas típicas de realizar la inyección.

Hacer que KeePass inyecte KeeFarce Reborn como plugin

Requisito previo: acceso de escritura al directorio de plugins de KeePass.

KeePass cuenta con un marco de plugins para proporcionar funcionalidades adicionales a los usuarios. Funciona cargando un DLL en el proceso de KeePass, lo que permite a los desarrolladores de plugins realizar acciones dentro del dominio de aplicación de KeePass.

Como resultado, podemos abusar de esta funcionalidad para cargar KeeFarce Reborn como plugin, ¡sin siquiera tener que usar un inyector externo! Solo necesitas compilar el proyecto KeeFarceRebornPlugin y copiar el DLL en el directorio de plugins (ubicado en la raíz de KeePass, es decir, "C:\Program Files\KeePass Password Safe 2\Plugins" para una instalación global).

Para que el proyecto compile correctamente, deberás copiar la versión del ensamblado KeePass.exe objetivo en el directorio KeeFarceRebornPlugin, o usar el PLGX si quieres que el plugin resultante sea compatible con cualquier versión de KeePass.

La próxima vez que se inicie KeePass y se desbloquee una base de datos, el DLL se cargará y se realizará la inyección. Si KeePass ya se está ejecutando, deberás esperar a su próximo reinicio para que ocurra la inyección (o forzar el reinicio tú mismo).

⚠️ Una vez que un plugin está cargado, el archivo DLL estará protegido contra escritura hasta que KeePass se cierre. Tenlo en cuenta para asegurarte de no dejar plugins maliciosos detrás durante las evaluaciones.

Si no tienes acceso de escritura al directorio de plugins de KeePass, puedes echar un vistazo al artículo de Quarkslab que demuestra cómo cargar plugins con menos privilegios a través de la caché de plugins.

Realizar inyección de shellcode

Requisito previo: KeePass en ejecución + una base de datos desbloqueada por el usuario + derechos suficientes para inyectar en el proceso de KeePass.

Como personalmente me resulta más fácil inyectar shellcode de forma sigilosa que un DLL en un proceso remoto, lo primero que suelo hacer es generar un shellcode independiente de la posición a partir de nuestro DLL. Parece que el proyecto donut de @odzhan y @TheWover se adapta perfectamente a nuestras necesidades.

Compilamos donut desde un commit en la rama dev, ya que corrige un problema en la gestión del dominio de aplicación que nos impediría realizar reflexión en el dominio predeterminado.

root@kitploit:~
git clone https://github.com/TheWover/donut/
cd donut
git checkout 9d781d8da571eb1499122fc0e2d6e89e5a43603c

Podemos compilar fácilmente desde el x64 Native Tools Command Prompt de Visual Studio con la utilidad nmake:

root@kitploit:~
nmake -f Makefile.msvc

Generar el shellcode es tan simple como:

root@kitploit:~
.\donut.exe "C:\KeeFarceReborn\KeePassReborn\bin\Release\KeeFarceReborn.dll" -c KeeFarceReborn.Program -m Main -e 1

  [ Donut shellcode generator v0.9.3
  [ Copyright (c) 2019 TheWover, Odzhan

  [ Instance type : Embedded
  [ Module file   : "C:\KeeFarceReborn\KeePassReborn\bin\Release\KeeFarceReborn.dll"
  [ Entropy       : None
  [ File type     : .NET DLL
  [ Class         : KeeFarceReborn.Program
  [ Method        : Main
  [ Target CPU    : x86+amd64
  [ AMSI/WDLP     : continue
  [ Shellcode     : "loader.bin"

Ten en cuenta que -e 1 es necesario para deshabilitar la entropía; de lo contrario, el proceso inyectado no estará en el dominio de aplicación predeterminado.

Comprimámoslo usando PowerShell para una integración más fácil en el código del inyector:

root@kitploit:~
$bytes = [System.IO.File]:https://raw.githubusercontent.com/d3lb3/keefarcereborn/HEAD/:ReadAllBytes(%22C:%5Cdonut%5Cloader.bin%22)
[System.IO.MemoryStream] $outStream = New-Object System.IO.MemoryStream
$deflateStream = New-Object System.IO.Compression.DeflateStream($outStream, [System.IO.Compression.CompressionLevel]::Optimal)
$deflateStream.Write($bytes, 0, $bytes.Length)
$deflateStream.Dispose()
$outBytes = $outStream.ToArray()
$outStream.Dispose()
$b64 = [System.Convert]::ToBase64String($outBytes)
Write-Output $b64 | clip

Ahora tienes un payload listo para inyectar con tu técnica favorita. Si no sabes qué hacer ahora, te sugiero que consultes la página de Code & Process Injection de ired.team para familiarizarte con el concepto. Los cursos de desarrollo de malware de @SEKTOR7 están llenos de grandes aprendizajes si puedes costearlos.

Como ejemplo, inyectemos nuestro payload usando el código VeraCryptThief de snovvcrash (a su vez inspirado en los cursos de SEKTOR7), que hace uso de D/Invoke. Para demostrarlo, copié su proyecto en la carpeta SampleInjector; solo necesitamos pegar nuestro shellcode comprimido y luego compilar en x64.

Si bien todavía evade Defender en este momento (noviembre de 2022), por supuesto será necesario ajustar tu propio inyector para evadir los EDR modernos. Este inyector de muestra está aquí solo para demostrar que todo se comporta como se espera.

Al ejecutar .\SampleInjector.exe junto con una base de datos de KeePass abierta, el DLL se cargará y se realizará la inyección.

Pasos posteriores a la inyección

Una vez realizada la inyección, verás mensajes de depuración impresos en MessageBox (que obviamente deberían eliminarse cuando se use en un escenario real de pruebas de penetración) y luego encontrarás la base de datos exportada en el %APPDATA% del usuario actual (elegido por defecto, ya que KeePass seguramente tendrá acceso de escritura). El archivo XML exportado se puede importar posteriormente en cualquier base de datos de KeePass sin que se solicite una contraseña.

Posibles inconvenientes

La política de KeePass impide la exportación de la base de datos

Si las funcionalidades de plugin o exportación están deshabilitadas por política, aún se pueden habilitar editando el KeePass.config.xml siempre que tengas acceso de escritura:

root@kitploit:~
<Policy>
    <Plugins>true</Plugins>
    <Export>true</Export>
</Policy>

Detección

Si bien el principal problema relacionado con la detección de las herramientas de extracción de KeePass son los inyectores, el escaneo en memoria también puede activar alertas al analizar el shellcode o el DLL del plugin. Puede que tengas que ofuscar y/o cifrar el shellcode para usarlo con tu inyector.

Si los DLL de plugins terminan siendo marcados por el análisis estático, aún puedes usar el formato de plugin PLGX de KeePass para evitar la detección.

Compatibilidad

  • KeeFarce Reborn solo se basa en .NET Framework sin dependencias externas, por lo que debería ser bastante compatible con la mayoría de los objetivos.
  • Por defecto, la solución de Visual Studio de KeeFarce Reborn apunta a .NET 4.6 (instalado por defecto en Windows 10), pero se puede volver a apuntar editándola.
  • Si .NET Framework no está instalado en el sistema objetivo, aún puedes configurarlo manualmente desde la línea de comandos usando DISM.exe.
  • Solo probé la inyección de payloads x64, pero esto también debería funcionar con arquitecturas de 32 bits.

Contribuir

Las pull requests son bienvenidas. No dudes en abrir un issue o enviarme un mensaje directo en Twitter para sugerir mejoras.

Créditos

Partes del código fueron tomadas de los proyectos KeeFarce, KeeThief y KeePassHax.

El mecanismo de inyección de muestra fue tomado directamente de los proyectos de snovvcrash.

Descargar herramienta