Write-UP: HTB Keeper Собираем мастер-пароль KeePass из дампа памяти процесса

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
Источник: https://xakep.ru/2024/02/12/htb-keeper/

В этом райтапе я покажу, как можно восстановить мастер-пароль от базы данных парольного менеджера KeePass из дампа памяти процесса, чтобы получить учетные дан ные и ключи. На пути к этому по традиции попен тестим веб-сер вис и соберем данные для продвижения.

Разведка

Сканирование портов​

Добавляем IP-адрес машины в /etc/hosts:
10.10.11.227 keeper.htb

И запускаем сканирование портов.
1731249526964.png



Сканер нашел два открытых порта:
  • 22 — служба OpenSSH 8.9p1;
  • 80 — веб‑сервер Nginx 1.18.0.
SSH, как обычно, пока оставляем в покое, поскольку учетных данных у нас нет. Пойдем искать уязвимости в веб‑сайтах.

Точка входа​

На веб‑сервере нас встречает ссылка на службу поддержки, ведущая на другой поддомен: tickets.keeper.htb.
1731249626633.png



Новый поддомен тоже добавляем в файл /etc/hosts
10.10.11.227 keeper.htb tickets.keeper.htb

1731249684567.png



Теперь перейдем по ссылке. На новом сайте нас встречает страница авторизации системы заявок Request Tracker. Поиск эксплоитов ничего не дал, а типичная пара учетных данных оказалась невалидной. Однако всегда стоит проверять еще и учетные данные, заданные в том или ином ПО по умолчанию. Для Request Tracker это root:password, что я узнал из официальной вики.
1731249824787.png



C дефолтными логином и паролем авторизуемся в Request Tracker, при этом, как оказалось, сразу от имени привилегированного пользователя.
1731249888405.png



В любых системах, связанных с тикетами и прочими заявками, первым делом нужно искать по словам вроде pass, secret, login, token. В данном случае при поиске подстроки pass отыскивается всего один тикет. Какие-то проблемы с клиентом KeePass для Windows.
1731249934106.png



К сожалению, ничего существенного не находим. Комментарии к заявке тоже никакой полезной информации не содержат.
1731250000590.png



Точка Опоры
В меню переходим по пути Admin → Users → Select и получаем список существующих в системе пользователей.
1731250114826.png



1731250137143.png



Как минимум уже нашли имя пользователя.
Теперь открываем профиль каждого пользователя и собираем информацию. Возможно, по ней получится сгенерировать список паролей для перебора, это тоже рабочий вектор.
1731250187611.png



В профиле пользователя lnorgaard мы находим не то что какую-то информацию, а целый пароль: Welcome2023!. С именем пользователя и паролем получается авторизоваться по SSH и забрать пользовательский флаг.
1731250268796.png



Локальное повышение привилегий
Теперь пора собрать информацию о системе, запущенных процессах, необычных файлах и прочих вещах, которые помогут нам найти возможность для повышения привилегий до рута. Я для этого использую скрипты PEASS.

Давай скачаем самую свежую версию скрипта для Linux
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh -O /tmp/linpeas.sh

Теперь нужно загрузить его на удаленный хост. Для этого можно использовать стандартные средства SSH. После загрузки необходимо дать скрипту право на выполнение и выполнить его.

Код: Скопировать в буфер обмена
Код:
scp /tmp/linpeas.sh lnorgaard@keeper.htb:~/
chmod +x ~/linpeas.sh
~/linpeas.sh

В выводе — масса информации, поэтому нужно отобрать только значимую.
К сожалению, интересного не так много. Разве что в домашнем каталоге пользователя нашелся какой-то архив RT30000.zip, оставленный рутом.
1731250452833.png



Также я всегда загружаю на хост утилиту pspy64, которая позволяет в реальном времени отслеживать выполняемые команды и процессы, запускаемые от имени любого, даже привилегированного пользователя. Увы, я прождал пять минут и ничего интересного не обнаружил.

Возвращаемся к найден ному архиву и скачиваем его на свой хост стандартными средствами SSH.
scp lnorgaard@keeper.htb:/home/lnorgaard/RT30000.zip ./

Внутри архива находим базу дан ных менеджера паролей KeePass passcodes.kdbx, а также, судя по названию, полный дамп работающего процесса этого менеджера паролей - KeePassDumpFull.dmp
1731250708221.png



На ум сразу приходит недавняя уязвимость CVE-2023-32784.

Дело в том, что в KeePass 2.x до вер сии 2.54 есть возможность восстановить мастер-пароль в открытом виде из дампа памяти, даже если рабочее пространство заблокировано. Также есть возможность восстановить пароль, если KeePass больше не работает. Дамп можно получить не только дампингом памяти процесса KeePass или всей системы, но и из файла подкачки(pagefile.sys) и файла гибернации (hiberfil.sys). Но есть и ограничение: пароль должен быть набран с клавиатуры, а не скопирован из буфера обмена.

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

Код: Скопировать в буфер обмена
Код:
# install
git clone https://github.com/Orange-Cyberdefense/KeePwn.git
cd KeePwn
pip3 install -r requirements.txt
sudo python3 setup.py install

# run
KeePwn parse_dump --dump_file KeePassDumpFull.dmp --bruteforce
passcodes.kdbx

1731251075062.png



Спустя несколько минут работы программа завершает свое выполнение.
Мастер-пароль подобрать не удалось, однако мы получили 13 приблизительных кандидатов. Я загрузил последний вариант, так как он может навести нас на более полную информацию о пароле. Однако поисковый движок предложил другой вариант поиска.
1731251150813.png



Соглашаемся на измененный поиск и получаем похожую на нашу строку фразу rødgrød med fløde.
1731251295850.png



Из Google узнаём, что это название популяр ного в Дании киселя, но куда важнее, что это и есть мастер-пароль, который позволяет получить доступ к данным в базе KeePass. Видимо, из-за использования символа ø KeePwn не смог довести дело до конца.
1731251355867.png



В базе сохранен пароль рута и SSH-ключ в формате PuTTY. С паролем авторизоваться не вышло, поэтому кон вертируем ключ
puttygen key.putty -O private-openssh -o id_rsa_root

Теперь с ключом авторизуемся по SSH и забираем последний флаг.
1731251393402.png



Машина захвачена!
 
Сверху Снизу