Sploitus

Exploit for keepass_dump

kitploit · 2026-08-26

Exploit Code

MARKDOWN85 lines
## 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
    

![альтернативный текст](https://assets.kitploit.com/production/public/readmes/34975/1ef217963cce2f7ea84fa7a178b3f368b56f0e6882425fadf3f7ecae02c53448.png)

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

# 

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

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

Вы можете включить это поведение с помощью флага `--recover`.

![альтернативный текст](https://assets.kitploit.com/production/public/readmes/34975/d1c21766850787225a0989de889cba0c7cfdb261b90a5d61a3ffde492d304284.png)

# 

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

![альтернативный текст](https://assets.kitploit.com/production/public/readmes/34975/83284e5afd274498bbb39c34329120d24d775ab8284018ce0dcf4f8067159a35.png)

В этом случае первая запись также показывает `4/5` символов для второго ключа, `ducks`, который тоже находился в дампе, однако он был объединён с символами другого ключа, что дало `ucks`|`tMasterPassword123!`. Похоже, для этого потенциально может существовать обходной путь, но он ещё в стадии разработки (WIP).

# 

Я также добавил возможность поиска потенциальных паролей внутри файла дампа с помощью передачи словаря через `-w`. Этот флаг генерирует строки, содержащие символы из слов, найденных в списке, для поиска в файле дампа. Вы также можете указать дополнение для создаваемых строк с помощью флагов `-p` или `--padding`.

Пример: `--padding 2` => ●●a | `--padding 3` => ●●●a

![альтернативный текст](https://assets.kitploit.com/production/public/readmes/34975/9a31854fe21847babbf37c1d90c9744d1a27489fd0c0dbd1bbd084bdfcc853f5.png)

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

![альтернативный текст](https://assets.kitploit.com/production/public/readmes/34975/d21679b8638a74e7432ce890199de28b0a62f81518949c5ff222697e1c813673.png)

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

## Ссылки

# 

Благодарность @vdohney, который первоначально обнаружил эту уязвимость. Ссылка на его проект находится здесь

Детали CVE: CVE-2023-32784