Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
KeeFarceReborn — Автономная DLL, которая после внедрения в процесс KeePass экспортирует базы данных в открытом виде. | Kitploit
Инструменты/GitHubGitHub/d3lb3/keefarcereborn
Атаки на ПаролиГенерация полезной нагрузкиЭксфильтрация данныхПост-эксплуатацияRed TeamingГенерация Шеллкода
GitHubd3lb3/keefarcereborn

KeeFarceReborn

Автономная DLL, которая после внедрения в процесс KeePass экспортирует базы данных в открытом виде.

Репозиторий
299353 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

KeeFarce Reborn

Автономная DLL, которая экспортирует базы данных в открытом виде после внедрения в процесс KeePass.

Во многом вдохновлён замечательными проектами KeeFarce, KeeThief и KeePassHax.

Зачем ещё один инструмент для извлечения данных из KeePass?

Несколько лет назад @denandz выпустил KeeFarce — первый наступательный инструмент, предназначенный для извлечения баз данных KeePass в открытом виде. Он работает путём внедрения DLL в запущенный процесс, а затем обходит кучу с помощью ClrMD, чтобы найти нужные объекты и с помощью рефлексии вызвать встроенный метод экспорта KeePass. Единственным недостатком на тот момент было то, что на цель нужно было скинуть несколько файлов (экспортирующая DLL + DLL ClrMD + инжектор + загрузочная DLL).

Год спустя @tifkin_ и @harmj0y выпустили подробный обзор атакующих техник, нацеленных на KeePass (хотя в блоге harmj0y их больше нет, статьи можно найти в Wayback Machine: часть 1, часть 2). Результатом стал выпуск KeeThief — инструмента, способного расшифровать мастер-ключ KeePass (в том числе при использовании альтернативных методов аутентификации). Он работал настолько хорошо, что разработчики KeePass добавили параметр для противодействия этой технике (его можно отключить, отредактировав конфигурационный файл KeePass, если у пользователя достаточно прав, что довольно часто бывает).

Эти инструменты быстро стали моим выбором по умолчанию при пентестах, но вскоре устарели, поскольку их техники инжекции (а именно знаменитая группа Win32 API: VirtualAllocEx, WriteProcessMemory, CreateRemoteThread, WriteProcessMemory и т.д.) теперь мгновенно детектируются. @snovvcrash решил эту проблему, форкнув KeeThief (сейчас он в приватном репозитории, но всё ещё доступен здесь), чтобы улучшить механизм инжекции с помощью D/Invoke, и написал отличную статью с описанием проделанной работы. Хотя это показало, что поддерживать KeeThief реально, мне сложно регулярно реализовывать новые техники инжекции, так как код KeeThief жёстко связан с его инжектором.

@holly-cracker также выпустил KeePassHax, который представляет собой одну DLL и использует только рефлексию для расшифровки мастер-ключа KeePass. Вдохновившись этой работой, я решил сделать то же самое с KeeFarce и написать собственный инструмент для извлечения данных из KeePass со следующими возможностями:

  • Самодостаточность ⇒ для работы не требуется взаимодействие с кодом инжектора.
  • Использует только встроенные библиотеки .NET (без ClrMD) ⇒ лучшая совместимость + одна DLL упрощает процесс инжекции.
  • Экспортирует базу данных (как KeeFarce) ⇒ не нужно извлекать .kdbx или использовать кастомную сборку KeePass для ввода восстановленного мастер-ключа.

KeeFarce Reborn также предоставляет DLL-плагин для KeePass, позволяющий KeePass внедрить сам себя без возни с инжекторами!

Сборка

Поскольку код использует только .NET Framework без внешних зависимостей, он должен легко компилироваться в Visual Studio 2015 и новее.

Пример использования

KeeFarce Reborn не включает инжектор для загрузки DLL в процесс KeePass. Это сделано намеренно: инжекторы устаревают каждые несколько месяцев, поэтому вам придётся использовать свой собственный. В следующих разделах показаны два типичных способа выполнить инжекцию.

Заставляем KeePass внедрять KeeFarce Reborn как плагин

Предварительное требование: доступ на запись в каталог плагинов KeePass.

KeePass имеет плагинный фреймворк, предоставляющий пользователям дополнительные возможности. Он работает за счёт загрузки DLL в процесс KeePass, что позволяет разработчикам плагинов выполнять действия в домене приложения KeePass.

Следовательно, мы можем злоупотребить этой функциональностью, чтобы загрузить KeeFarce Reborn как плагин, даже не используя внешний инжектор! Вам нужно лишь скомпилировать проект KeeFarceRebornPlugin и скопировать DLL в каталог плагинов (он расположен в корне KeePass, а именно "C:\Program Files\KeePass Password Safe 2\Plugins" для глобальной установки).

Для правильной сборки проекта вам нужно скопировать целевую версию сборки KeePass.exe в каталог KeeFarceRebornPlugin либо использовать PLGX, если вы хотите, чтобы итоговый плагин был совместим с любой версией KeePass.

При следующем запуске KeePass и после разблокировки базы данных DLL будет загружена и инжекция выполнена. Если KeePass уже запущен, придётся дождаться следующего перезапуска, чтобы инжекция произошла (или перезапустить его самостоятельно).

⚠️ После загрузки плагина файл DLL будет защищён от записи, пока KeePass не будет закрыт. Имейте это в виду, чтобы не оставлять после себя вредоносные плагины во время тестов.

Если у вас нет доступа на запись в каталог плагинов KeePass, обратите внимание на статью Quarkslab, в которой показано, как загружать плагины с меньшими привилегиями через кэш плагинов.

Выполнение инжекции шеллкода

Предварительное требование: KeePass запущен + база данных разблокирована пользователем + у вас достаточно прав для внедрения в процесс KeePass.

Поскольку лично мне проще скрытно внедрять шеллкод, чем DLL, в удалённый процесс, обычно я начинаю с генерации позиционно-независимого шеллкода из нашей DLL. Оказывается, проект donut от @odzhan и @TheWover идеально подходит для наших нужд!

Мы компилируем donut из коммита в ветке dev, так как там исправлена проблема с управлением доменами приложений, которая не позволяла нам выполнять рефлексию в домене по умолчанию.

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

Мы можем легко собрать его из x64 Native Tools Command Prompt от Visual Studio с помощью утилиты nmake:

root@kitploit:~
nmake -f Makefile.msvc

Генерация шеллкода выглядит так:

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"

Обратите внимание, что -e 1 необходим для отключения энтропии, иначе внедрённый процесс не окажется в домене приложения по умолчанию.

Сожмём его с помощью PowerShell для более удобной интеграции в код инжектора:

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

Теперь у вас есть полезная нагрузка, готовая к внедрению с помощью вашей любимой техники. Если вы не знаете, что делать дальше, рекомендую ознакомиться со страницей Code & Process Injection на ired.team, чтобы понять концепцию. Курсы по разработке вредоносного ПО от @SEKTOR7 содержат много полезных знаний, если вы можете себе их позволить.

В качестве примера давайте внедрим нашу полезную нагрузку с помощью кода VeraCryptThief от snovvcrash (сам вдохновлён курсами SEKTOR7), который использует D/Invoke. Для демонстрации я скопировал его проект в папку SampleInjector: нам остаётся только вставить сжатый шеллкод и скомпилировать проект в x64.

Хотя на данный момент он по-прежнему обходит Defender (ноябрь 2022), для обхода современных EDR, конечно, потребуется доработать собственный инжектор. Этот пример инжектора нужен лишь для демонстрации того, что всё работает как ожидается.

Запустив .\SampleInjector.exe при открытой базе данных KeePass, вы увидите, как DLL загрузится и инжекция будет выполнена.

Действия после инжекции

После инжекции вы увидите отладочные сообщения в MessageBox (которые, разумеется, стоит убрать при использовании в реальном пентесте), а затем найдёте экспортированную базу данных в %APPDATA% текущего пользователя (каталог выбран по умолчанию, так как у KeePass точно будет доступ на запись). Экспортированный XML-файл впоследствии можно импортировать в любую базу данных KeePass без запроса пароля.

Возможные нюансы

Политика KeePass запрещает экспорт базы данных

Если плагины или функции экспорта отключены политикой, их всё равно можно включить, отредактировав KeePass.config.xml, при наличии доступа на запись:

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

Обнаружение

Хотя основная проблема с детектированием инструментов извлечения данных из KeePass — это инжекторы, сканирование памяти также может вызывать срабатывания при анализе шеллкода или DLL-плагина. Возможно, вам придётся обфусцировать и/или зашифровать шеллкод для использования со своим инжектором.

Если DLL-плагины в конце концов будут помечены статическим анализом, вы всё равно можете использовать PLGX-формат плагинов KeePass, чтобы избежать обнаружения.

Совместимость

  • KeeFarce Reborn использует только .NET Framework без внешних зависимостей, поэтому должен быть довольно совместим с большинством целевых систем.
  • По умолчанию решение Visual Studio для KeeFarce Reborn нацелено на .NET 4.6 (устанавливается по умолчанию в Windows 10), но его можно перенацелить/изменить.
  • Если .NET Framework не установлен в целевой системе, вы всё равно можете установить его вручную из командной строки с помощью DISM.exe.
  • Я тестировал только инжекцию x64-нагрузок, но это должно работать и на 32-битных архитектурах.

Участие в разработке

Пул-реквесты приветствуются. Смело открывайте issue или пишите мне в личные сообщения в Twitter с предложениями по улучшению.

Благодарности

Фрагменты кода были взяты из проектов KeeFarce, KeeThief и KeePassHax.

Механизм инжекции, показанный в примере, напрямую взят из проектов snovvcrash.

Скачать инструмент