Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
KeeFarceReborn — Une DLL autonome qui exporte les bases de données en clair une fois injectée dans le processus KeePass. | Kitploit
Outils/GitHubGitHub/d3lb3/keefarcereborn
Attaques de Mots de PasseGénération de PayloadsExfiltration de DonnéesPost-ExploitationRed TeamingGénération de Shellcode
GitHubd3lb3/keefarcereborn

KeeFarceReborn

Une DLL autonome qui exporte les bases de données en clair une fois injectée dans le processus KeePass.

Voir le dépôt
299359il y a 3 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

KeeFarce Reborn

Une DLL autonome qui exporte les bases de données en clair une fois injectée dans le processus KeePass.

Fortement inspirée par les excellents projets KeeFarce, KeeThief et KeePassHax.

Encore un outil d'extraction KeePass, pourquoi ?

Il y a quelques années, @denandz a publié KeeFarce, le premier outil offensif conçu pour extraire les bases de données KeePass en clair. Il fonctionne en injectant une DLL dans le processus en cours d'exécution, puis parcourt le tas à l'aide de ClrMD pour trouver les objets nécessaires et invoquer la méthode d'exportation intégrée de KeePass par réflexion. Son seul inconvénient à l'époque était que plusieurs fichiers devaient être déposés sur la cible (la DLL d'extraction + la DLL ClrMD + l'injecteur + une DLL bootstrap).

Un an plus tard, @tifkin_ et @harmj0y ont publié une analyse approfondie des techniques offensives ciblant KeePass (bien que ces articles ne soient plus disponibles sur le blog de harmj0y, on peut les retrouver sur Wayback Machine : partie 1, partie 2). Cela a abouti à la publication de KeeThief, un outil capable de déchiffrer la clé maîtresse de KeePass (y compris lorsque des méthodes d'authentification alternatives sont utilisées). Il a si bien fonctionné que les développeurs de KeePass ont ajouté un paramètre pour atténuer cette technique (il peut être désactivé en modifiant le fichier de configuration de KeePass si l'utilisateur dispose des droits suffisants, ce qui est assez courant).

Ces outils sont rapidement devenus mes outils de prédilection lors de tests d'intrusion, mais ils sont vite devenus obsolètes car leurs techniques d'injection (à savoir la fameuse bande d'API Win32 VirtualAllocEx, WriteProcessMemory, CreateRemoteThread, WriteProcessMemory, etc.) déclenchent désormais immédiatement des détections. @snovvcrash a résolu ce problème en forkkant KeeThief (désormais dans un dépôt privé, mais toujours accessible ici) pour améliorer le mécanisme d'injection avec D/Invoke, et a écrit un excellent article détaillant la démarche suivie. Bien que cela ait démontré la faisabilité de maintenir KeeThief, je trouve difficile d'implémenter régulièrement de nouvelles techniques d'injection, car le code de KeeThief est étroitement lié à son injecteur.

@holly-cracker a également publié KeePassHax, qui se présente sous la forme d'une seule DLL et n'utilise que la réflexion pour déchiffrer la clé maîtresse de KeePass. Inspiré par ce travail, j'ai décidé de faire de même avec KeeFarce et d'écrire mon propre outil d'extraction KeePass avec les fonctionnalités suivantes :

  • Autonome ⇒ aucune interaction avec le code de l'injecteur n'est nécessaire pour fonctionner.
  • Utilise uniquement les bibliothèques .NET intégrées (pas de ClrMD) ⇒ meilleure compatibilité + une DLL mono-fichier simplifie le processus d'injection.
  • Exporte la base de données (comme KeeFarce) ⇒ pas besoin de récupérer le fichier .kdbx ni d'utiliser une version personnalisée de KeePass pour saisir la clé maîtresse récupérée.

KeeFarce Reborn fournit également une DLL de plugin KeePass pour que KeePass s'injecte lui-même, sans avoir à se soucier des injecteurs !

Compilation

Comme le code repose uniquement sur .NET Framework sans dépendance externe, il devrait se compiler facilement avec Visual Studio 2015 et versions ultérieures.

Exemple d'utilisation

KeeFarce Reborn n'inclut pas d'injecteur pour charger la DLL dans le processus KeePass. C'est volontaire : les injecteurs devenant obsolètes tous les quelques mois, vous devrez utiliser le vôtre. Les sections suivantes présentent deux méthodes typiques pour réaliser l'injection.

Faire en sorte que KeePass s'injecte KeeFarce Reborn en tant que plugin

Pré-requis : accès en écriture au répertoire des plugins de KeePass.

KeePass dispose d'un framework de plugins pour offrir des fonctionnalités supplémentaires aux utilisateurs. Il fonctionne en chargeant une DLL dans le processus KeePass, ce qui permet aux développeurs de plugins d'effectuer des actions dans le domaine d'application de KeePass.

Par conséquent, nous pouvons abuser de cette fonctionnalité pour charger KeeFarce Reborn en tant que plugin, sans même avoir à utiliser un injecteur externe ! Il vous suffit de compiler le projet KeeFarceRebornPlugin et de copier la DLL dans le répertoire des plugins (situé à la racine de KeePass, à savoir "C:\Program Files\KeePass Password Safe 2\Plugins" pour une installation globale).

Pour que le projet se compile correctement, vous devrez copier la version de l'assembly KeePass.exe ciblée dans le répertoire KeeFarceRebornPlugin, ou utiliser le format PLGX si vous souhaitez que le plugin résultant soit compatible avec n'importe quelle version de KeePass.

Au prochain démarrage de KeePass et après déverrouillage d'une base de données, la DLL sera chargée et l'injection effectuée. Si KeePass est déjà en cours d'exécution, vous devrez attendre son prochain redémarrage pour que l'injection ait lieu (ou forcer vous-même le redémarrage).

⚠️ Une fois un plugin chargé, le fichier DLL est protégé en écriture jusqu'à la fermeture de KeePass. Gardez cela à l'esprit afin de ne pas laisser de plugins malveillants derrière vous lors de vos évaluations.

Si vous n'avez pas accès en écriture au répertoire des plugins de KeePass, vous pouvez consulter l'article de Quarkslab qui montre comment charger des plugins avec moins de privilèges via le cache de plugins.

Effectuer une injection de shellcode

Pré-requis : KeePass est en cours d'exécution + une base de données est déverrouillée par l'utilisateur + vous disposez de droits suffisants pour injecter dans le processus KeePass.

Comme je trouve personnellement plus facile d'injecter furtivement du shellcode plutôt qu'une DLL dans un processus distant, la première chose par laquelle je commence généralement est de générer un shellcode indépendant de la position à partir de notre DLL. Il s'avère que le projet donut de @odzhan et @TheWover correspond parfaitement à nos besoins !

Nous compilons donut depuis un commit de la branche dev, car il corrige un problème de gestion du domaine d'application qui nous empêcherait d'effectuer la réflexion dans le domaine par défaut.

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

Nous pouvons facilement compiler à partir de l'x64 Native Tools Command Prompt de Visual Studio avec l'utilitaire nmake :

root@kitploit:~
nmake -f Makefile.msvc

Générer le shellcode est aussi simple que :

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"

Notez que -e 1 est nécessaire pour désactiver l'entropie, sinon le processus injecté ne sera pas dans le domaine d'application par défaut.

Compressons-le à l'aide de PowerShell pour faciliter son intégration dans le code de l'injecteur :

root@kitploit:~
$bytes = [System.IO.File]:https://raw.githubusercontent.com/d3lb3/keefarcereborn/main/: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

Vous avez maintenant un payload prêt à être injecté avec votre technique préférée. Si vous ne savez pas quoi faire ensuite, je vous suggère de consulter la page Code & Process Injection d'ired.team pour vous familiariser avec le concept. Les cours de développement de malwares de @SEKTOR7 regorgent de bons enseignements si vous pouvez vous les offrir.

À titre d'exemple, injectons notre payload à l'aide du code VeraCryptThief de snovvcrash (lui-même inspiré des cours de SEKTOR7) qui utilise D/Invoke. Pour la démonstration, j'ai copié son projet dans le dossier SampleInjector, il nous suffit de coller notre shellcode compressé puis de compiler en x64.

Bien qu'il contourne encore Defender pour le moment (novembre 2022), il vous faudra bien sûr bricoler votre propre injecteur pour contourner les EDR modernes. Cet injecteur d'exemple est simplement là pour démontrer que tout se comporte comme prévu.

En exécutant .\SampleInjector.exe alors qu'une base de données KeePass est ouverte, la DLL sera chargée et l'injection effectuée.

Étapes post-injection

Une fois l'injection effectuée, vous verrez des messages de débogage s'afficher dans des MessageBox (qui devraient évidemment être retirés dans un scénario réel de test d'intrusion), puis vous trouverez la base de données exportée dans le %APPDATA% de l'utilisateur actuel (choisi par défaut, car KeePass est certain d'avoir un accès en écriture). Le fichier XML exporté pourra ensuite être importé dans n'importe quelle base de données KeePass sans demander de mot de passe.

Mises en garde

La stratégie KeePass empêche l'exportation de la base de données

Si les fonctionnalités de plugin ou d'exportation sont désactivées par une stratégie, elles peuvent toujours être activées en modifiant le fichier KeePass.config.xml, à condition d'avoir un accès en écriture :

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

Détection

Bien que le principal problème concernant la détection des outils d'extraction KeePass soit les injecteurs, l'analyse en mémoire peut également déclencher des alertes lors de l'analyse du shellcode ou de la DLL du plugin. Vous devrez peut-être obscurcir et/ou chiffrer le shellcode à utiliser avec votre injecteur.

Si les DLL de plugins finissent par être détectées par l'analyse statique, vous pouvez toujours utiliser le format de plugin PLGX de KeePass pour éviter la détection.

Compatibilité

  • KeeFarce Reborn repose uniquement sur .NET Framework sans dépendance externe, il devrait donc être assez compatible avec la plupart des cibles.
  • Par défaut, la solution Visual Studio de KeeFarce Reborn cible .NET 4.6 (installé par défaut sur Windows 10), mais elle peut être reciblée en la modifiant.
  • Si .NET Framework n'est pas installé sur le système cible, vous pouvez toujours l'installer manuellement en ligne de commande avec DISM.exe.
  • Je n'ai testé que l'injection de payloads x64, mais cela devrait également fonctionner avec des architectures 32 bits.

Contribuer

Les pull requests sont les bienvenues. N'hésitez pas à ouvrir une issue ou à m'envoyer un message privé sur Twitter pour suggérer des améliorations.

Crédits

Des extraits de code ont été repris des projets KeeFarce, KeeThief et KeePassHax.

Le mécanisme d'injection d'exemple a été directement repris des projets de snovvcrash.

Télécharger l’outil