Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
KeeFarceReborn — Una DLL autonoma che esporta i database in chiaro una volta iniettata nel processo di KeePass. | Kitploit
Strumenti/GitHubGitHub/d3lb3/keefarcereborn
Attacchi alle PasswordGenerazione di PayloadEsfiltrazione DatiPost-ExploitRed TeamingGenerazione di Shellcode
GitHubd3lb3/keefarcereborn

KeeFarceReborn

Una DLL autonoma che esporta i database in chiaro una volta iniettata nel processo di KeePass.

Vedi Repository
2993583 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

KeeFarce Reborn

Una DLL autonoma che esporta i database in chiaro una volta iniettata nel processo di KeePass.

Fortemente ispirata ai grandi progetti KeeFarce, KeeThief e KeePassHax.

Perché un altro strumento di estrazione KeePass?

Qualche anno fa, @denandz ha rilasciato KeeFarce, il primo strumento offensivo progettato per estrarre i database KeePass in chiaro. Funziona iniettando una DLL nel processo in esecuzione, quindi analizza l'heap utilizzando ClrMD per trovare gli oggetti necessari e invocare il metodo di esportazione integrato di KeePass tramite reflection. Il suo unico inconveniente all'epoca era che dovevano essere rilasciati più file sul target (la DLL di estrazione + la DLL di ClrMD + l'iniettore + una DLL bootstrap).

Un anno dopo, @tifkin_ e @harmj0y pubblicarono un'analisi approfondita delle tecniche offensive mirate a KeePass (anche se non più disponibile sul blog di harmj0y, gli articoli si trovano su Wayback Machine: parte 1, parte 2). Ciò portò al rilascio di KeeThief, uno strumento in grado di decifrare la chiave master di KeePass (anche quando vengono utilizzati metodi di autenticazione alternativi). Funzionò così bene che gli sviluppatori di KeePass aggiunsero un parametro per mitigare questa tecnica (può essere disabilitato modificando il file di configurazione di KeePass se l'utente dispone di diritti sufficienti, cosa abbastanza comune).

Questi strumenti sono diventati presto la mia scelta preferita durante i test di penetrazione, ma sono altrettanto presto diventati obsoleti poiché le loro tecniche di iniezione (ovvero il famoso gruppo di API Win32: VirtualAllocEx, WriteProcessMemory, CreateRemoteThread, WriteProcessMemory, ecc.) ora attivano immediatamente la rilevazione. @snovvcrash ha affrontato il problema creando un fork di KeeThief (ora in un repository privato, ma ancora accessibile qui) per migliorare il meccanismo di iniezione con D/Invoke, scrivendo un ottimo articolo che descrive il processo seguito. Sebbene abbia dimostrato la fattibilità del mantenimento di KeeThief, trovo difficile implementare regolarmente nuove tecniche di iniezione, poiché il codice di KeeThief è strettamente legato al suo iniettore.

@holly-cracker ha rilasciato anche KeePassHax, che si presenta come una singola DLL e utilizza solo la reflection per decifrare la chiave master di KeePass. Ispirato da questo lavoro, ho deciso di fare lo stesso con KeeFarce e scrivere il mio strumento di estrazione KeePass con le seguenti caratteristiche:

  • Autosufficiente ⇒ nessuna interazione con il codice dell'iniettore per funzionare.
  • Utilizza solo librerie .NET integrate (niente ClrMD) ⇒ migliore compatibilità + una DLL monofile rende il processo di iniezione più semplice.
  • Esporta il database (come KeeFarce) ⇒ nessuna necessità di recuperare il file .kdbx né di usare una build personalizzata di KeePass per inserire la chiave master recuperata.

KeeFarce Reborn fornisce anche una DLL plugin per KeePass che permette a KeePass di iniettarsi da solo, senza doversi preoccupare degli iniettori!

Compilazione

Poiché il codice si basa esclusivamente su .NET Framework senza dipendenze esterne, dovrebbe compilare facilmente con Visual Studio 2015 e versioni successive.

Esempio di utilizzo

KeeFarce Reborn non include un iniettore per caricare la DLL nel processo di KeePass. Questa è una scelta deliberata: gli iniettori diventano obsoleti ogni pochi mesi, quindi dovrai usare il tuo. Le seguenti sezioni mostrano due modi tipici per eseguire l'iniezione.

Far iniettare a KeePass KeeFarce Reborn come plugin

Prerequisito: accesso in scrittura alla directory dei plugin di KeePass.

KeePass dispone di un framework per plugin per fornire funzionalità aggiuntive agli utenti. Funziona caricando una DLL nel processo di KeePass, consentendo agli sviluppatori di plugin di eseguire azioni all'interno del dominio applicativo di KeePass.

Di conseguenza, possiamo abusare di questa funzionalità per caricare KeeFarce Reborn come plugin, senza nemmeno dover usare un iniettore esterno! Devi solo compilare il progetto KeeFarceRebornPlugin e copiare la DLL nella directory dei plugin (situata nella radice di KeePass, ovvero "C:\Program Files\KeePass Password Safe 2\Plugins" per un'installazione globale).

Per compilare correttamente il progetto, dovrai copiare la versione dell'assembly KeePass.exe di destinazione nella directory KeeFarceRebornPlugin, oppure usare il formato PLGX se vuoi che il plugin risultante sia compatibile con qualsiasi versione di KeePass.

Al successivo avvio di KeePass e sblocco di un database, la DLL verrà caricata e l'iniezione eseguita. Se KeePass è già in esecuzione, dovrai attendere il riavvio successivo perché l'iniezione avvenga (oppure forzare tu stesso il riavvio).

⚠️ Una volta caricato un plugin, il file DLL sarà protetto da scrittura finché KeePass non viene chiuso. Tienilo a mente per assicurarti di non lasciare plugin dannosi dietro di te durante le valutazioni.

Se non hai accesso in scrittura alla directory dei plugin di KeePass, puoi dare un'occhiata all'articolo di Quarkslab che dimostra come caricare i plugin con meno privilegi tramite la cache dei plugin.

Eseguire l'iniezione di shellcode

Prerequisito: KeePass in esecuzione + un database sbloccato dall'utente + diritti sufficienti per iniettare nel processo di KeePass.

Poiché personalmente trovo più semplice iniettare furtivamente shellcode piuttosto che una DLL in un processo remoto, la prima cosa con cui di solito comincio è generare uno shellcode position-independent dalla nostra DLL. Sembra che il progetto donut di @odzhan e @TheWover faccia perfettamente al caso nostro!

Compiliamo donut da un commit nel ramo dev, poiché corregge un problema nella gestione dei domini applicativi che ci impedirebbe di eseguire la reflection nel dominio predefinito.

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

Possiamo compilarlo facilmente dal Prompt dei comandi x64 Native Tools di Visual Studio con l'utilità nmake:

root@kitploit:~
nmake -f Makefile.msvc

Generare lo shellcode è semplicissimo:

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"

Nota che -e 1 è necessario per disabilitare l'entropia, altrimenti il processo iniettato non si troverà nel dominio applicativo predefinito.

Comprimiamolo usando PowerShell per un'integrazione più semplice nel codice dell'iniettore:

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

Ora hai un payload pronto per essere iniettato con la tua tecnica preferita. Se non sai cosa fare adesso, ti suggerisco di consultare la pagina Code & Process Injection di ired.team per familiarizzare con il concetto. I corsi di sviluppo malware di @SEKTOR7 sono pieni di ottimi insegnamenti se puoi permetterteli.

Ad esempio, iniettiamo il nostro payload usando il codice VeraCryptThief di snovvcrash (a sua volta ispirato ai corsi SEKTOR7), che fa uso di D/Invoke. Per dimostrarlo, ho copiato il suo progetto nella cartella SampleInjector; dobbiamo solo incollare il nostro shellcode compresso e poi compilare in x64.

Anche se al momento aggira ancora Defender (novembre 2022), sarà ovviamente necessario armeggiare con il proprio iniettore per bypassare gli EDR moderni. Questo iniettore di esempio serve solo a dimostrare che tutto funziona come previsto.

Eseguendo .\SampleInjector.exe con un database KeePass aperto, la DLL verrà caricata e l'iniezione eseguita.

Passaggi successivi all'iniezione

Una volta eseguita l'iniezione, vedrai i messaggi di debug stampati in MessageBox (che ovviamente dovrebbero essere rimossi quando viene usato in uno scenario reale di test di penetrazione), poi troverai il database esportato nella directory %APPDATA% dell'utente corrente (scelta per impostazione predefinita, poiché KeePass avrà sicuramente accesso in scrittura). Il file XML esportato può successivamente essere importato in qualsiasi database KeePass senza che venga richiesta una password.

Possibili avvertenze

La policy di KeePass impedisce l'esportazione del database

Se le funzionalità dei plugin o di esportazione sono disabilitate dalla policy, possono comunque essere abilitate modificando il file KeePass.config.xml, a condizione di avere accesso in scrittura:

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

Rilevamento

Sebbene il problema principale relativo al rilevamento degli strumenti di estrazione KeePass sia rappresentato dagli iniettori, la scansione in memoria può anche attivare avvisi quando si analizzano lo shellcode o la DLL del plugin. Potresti dover offuscare e/o cifrare lo shellcode da usare con il tuo iniettore.

Se le DLL dei plugin dovessero alla fine essere rilevate dall'analisi statica, puoi comunque usare il formato plugin PLGX di KeePass per evitare il rilevamento.

Compatibilità

  • KeeFarce Reborn si basa esclusivamente su .NET Framework senza dipendenze esterne, quindi dovrebbe essere abbastanza compatibile con la maggior parte dei target.
  • Per impostazione predefinita, la soluzione Visual Studio di KeeFarce Reborn ha come target .NET 4.6 (installato per impostazione predefinita su Windows 10), ma può essere modificata.
  • Se .NET Framework non è installato sul sistema di destinazione, puoi comunque installarlo manualmente da riga di comando usando DISM.exe.
  • Ho testato solo l'iniezione di payload x64, ma dovrebbe funzionare anche con architetture a 32 bit.

Contribuisci

Le pull request sono benvenute. Sentiti libero di aprire una issue o di contattarmi in DM su Twitter per suggerire miglioramenti.

Crediti

Parti di codice sono state prese dai progetti KeeFarce, KeeThief e KeePassHax.

Il meccanismo di iniezione di esempio è stato preso direttamente dai progetti di snovvcrash.

Scarica lo strumento