## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-Z-JXY-KEEPASS_DUMP
# Keepass-Dumper
Это моя PoC-реализация для CVE-2023-32784
Моя версия — это порт PoC от @vdohney на Python с несколькими изменениями и дополнительными функциями.
## Изменения
#
Одно из изменений — использование известных строк, которые можно найти в файле дампа, чтобы точнее переходить к местоположению символов мастер-пароля. Это приводит к меньшему количеству ложноположительных символов и значительно сокращает время сканирования файла. Если строки не найдены в файле дампа, сканирование начинается с начала. Эта опция включена по умолчанию, но если вы хотите вместо этого выполнить полное сканирование, вы можете использовать `--full-scan`. Для таких случаев я также добавил флаг `--skip`, помогающий ускорить сканирование. Это делается путём смещения указателя, чтобы перепрыгивать через следующие 1000 байт, так как они обычно содержат один и тот же символ, повторяющийся несколько раз. Например, если в файле дампа найден символ `●e`, это будет выглядеть следующим образом:
root@kitploit:~
●e
●e
●e
●e
●e
●e
●e
●e
●e
●e
●●c
С помощью флага `--skip` можно перепрыгивать через эти повторяющиеся байты, чтобы ускорить сканирование, хотя это необязательно при использовании точек перехода.
root@kitploit:~
[*] 15567777 | Found: ●e
[*] 15568797 | Found: ●e
[*] 15570355 | Found: ●●c
[*] 15571375 | Found: ●●c
[*] 15572925 | Found: ●●●r
[*] 15573973 | Found: ●●●r

## Возможности
#
Эта версия включает функцию восстановления, которая пытается найти любые оставшиеся неизвестные символы ключа. Это делается путём поиска различных возможных комбинаций символов, найденных внутри дампа; если совпадение найдено, остальные символы извлекаются из дампа до тех пор, пока не встретится следующий не-ASCII символ.
Это работает, если **полный** пароль в открытом виде хранится в файле дампа (похоже, это происходит, когда пользователь отображает мастер-пароль, отключив скрытие с помощью звёздочек).
Вы можете включить это поведение с помощью флага `--recover`.

#
Кроме того, вы можете указать выходной файл с помощью `-o`, чтобы экспортировать найденные комбинации. Здесь видно, что даже в тех случаях, когда были найдены символы другого мастер-пароля, а пароль в открытом виде не хранится в дампе, в списке комбинаций мы всё равно можем получить **23/24** символа ключа в финальной комбинации, показанной ниже.

В этом случае первая запись также показывает `4/5` символов для второго ключа, `ducks`, который тоже находился в дампе, однако он был объединён с символами другого ключа, что дало `ucks`|`tMasterPassword123!`. Похоже, для этого потенциально может существовать обходной путь, но он ещё в стадии разработки (WIP).
#
Я также добавил возможность поиска потенциальных паролей внутри файла дампа с помощью передачи словаря через `-w`. Этот флаг генерирует строки, содержащие символы из слов, найденных в списке, для поиска в файле дампа. Вы также можете указать дополнение для создаваемых строк с помощью флагов `-p` или `--padding`.
Пример: `--padding 2` => ●●a | `--padding 3` => ●●●a

В приведённом выше примере пароль хранился в дампе в открытом виде, поэтому можно было сопоставить найденную строку и извлечь дополнительные символы. Однако в случае, если пароль в открытом виде не хранится в дампе, всё равно возможно извлечь оставшиеся символы:

В этом случае, даже несмотря на то, что не удалось найти совпадение в открытом виде в дампе, все дополнительные символы всё равно были извлечены.
## Ссылки
#
Благодарность @vdohney, который первоначально обнаружил эту уязвимость. Ссылка на его проект находится здесь
Детали CVE: CVE-2023-32784