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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2025-44203 — Эксплойт для CVE-2025-44203, нацеленный на состояние гонки в HotelDruid 3.0.0/3.0.7, который приводит к утечке учетных данных администратора и отказу в обслуживании. Включает скрипт для подбора пароля для офлайн-восстановления пароля. | Kitploit
Инструменты/GitHubGitHub/ivant7d3/cve-2025-44203
Взлом паролейАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийСбор информации
GitHubivant7d3/cve-2025-44203

CVE-2025-44203

Эксплойт для CVE-2025-44203, нацеленный на состояние гонки в HotelDruid 3.0.0/3.0.7, который приводит к утечке учетных данных администратора и отказу в обслуживании. Включает скрипт для подбора пароля для офлайн-восстановления пароля.

Репозиторий
62 месяцев назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2025-44203: HotelDruid 3.0.0 / 3.0.7 — раскрытие чувствительной информации и DoS

Краткое описание

HotelDruid 3.0.0 и 3.0.7 содержат состояние гонки на конечной точке настройки creadb.php, доступной до завершения установки. Это приводит к двум последствиям, оба вызванных проигранной гонкой: раскрытие чувствительной информации (через подробные сообщения об ошибках SQL) и отказ в обслуживании.

Отправляя множество POST-запросов одновременно, злоумышленник может вызвать состояние гонки и прочитать чувствительные данные из ответа, включая имя пользователя администратора, хеш пароля и соль. Если пароль, выбранный при настройке пакета Debian, слаб, его можно восстановить офлайн с помощью словаря.

При успешной атаке администратор не может войти с учётными данными, заданными во время установки (отказ в обслуживании).

Воздействие

  • Раскрытие информации: имя пользователя администратора, хеш пароля и соль появляются в HTTP-ответе.
  • Отказ в обслуживании: успешная атака повреждает настройку, так что администратор больше не может войти. Для восстановления требуется переустановка HotelDruid.

Демонстрации

  • HotelDruid 3.0.0: Видео
  • HotelDruid 3.0.7: Видео

Предварительные условия и надёжность

  • Для удалённого доступа к конечной точке параметр пакета Debian «Ограничить доступ HotelDruid только localhost?» должен быть установлен как «Нет» во время установки. В противном случае конечная точка доступна только с самой хост-машины.
  • Атака срабатывает не всегда; если она неудачна, повторить попытку нельзя. Нормальная установка завершается и закрывает окно, поэтому требуется новая установка.
  • Ресурсы имеют большое значение. Успешные запуски были на небольшой ВМ с 2 ядрами ЦП и 2 ГБ ОЗУ. На машине с 4 и более ядрами и 4 ГБ ОЗУ и более все попытки проваливались, потому что каждый запрос завершался слишком быстро для перекрытия.
  • Если изменить скрипт для вывода каждого ответа, иногда можно восстановить только имя пользователя и ничего больше. Раздел «Корневая причина» объясняет, почему.
  • Протестировано на версиях 3.0.0 и 3.0.7. Другие версии также могут быть подвержены уязвимости.

Корневая причина

Пакет Debian оставляет creadb.php доступным без входа до тех пор, пока установка не завершена, и с параметром по умолчанию C_UTILIZZA_SEMPRE_DEFAULTS="AUTO" он повторно запускает создание базы данных при каждом запросе. Эта процедура выполняет более 100 SQL-запросов (создание и заполнение таблиц) без блокировки вокруг них, поэтому несколько запросов, приходящих одновременно, запускают её одновременно. Это и есть гонка.

На медленной или загруженной машине параллельные запуски пересекаются и сталкиваются в SQLite базе данных. Как только один запрос начинает создавать таблицы и строки, запросы, пришедшие позже, массово терпят неудачу по разным причинам — строки уже существуют, база данных заблокирована другой записью. При каждом сбое обёртка запросов HotelDruid esegui_query() выводит полный неудачный запрос в HTTP-ответ. Это означает, что один ответ приходит с десятками таких SQL-ошибок, и одна из них содержит чувствительную информацию об учётной записи администратора.

root@kitploit:~
update ...utenti set password = '<hash>', salt = '<salt>', tipo_pass = '5' where idutenti = '1'

Именно так эксплойт определяет успех. Он ищет в ответе set password, которое появляется только тогда, когда этот конкретный запрос выводится, что никогда не происходит в нормальном выводе creadb.php.

Блокировка происходит из-за того же сбоя. Строка администратора сначала вставляется с tipo_pass='n', и только UPDATE выше превращает её в рабочую учётную запись (tipo_pass='5' с установленным паролем). Код, выполняющийся сразу после UPDATE, никогда не проверяет, сработал ли он. Он создаёт файл abilita_login, который включает вход, удаляет ini.php, содержащий учётные данные администратора, а позже записывает ultimo_accesso, что закрывает установку окончательно. Таким образом, когда UPDATE проигрывает гонку, учётная запись остаётся с tipo_pass='n', что страница входа всегда отклоняет, даже с правильным паролем, при этом вход включён, а файл учётных данных удалён. В этот момент пути назад без переустановки нет.

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

Воспроизведение

Запустите эксплойт против цели с атакующей машины:

root@kitploit:~
python3 exploit.py 192.168.1.1

где 192.168.1.1 — IP-адрес машины, на которой работает HotelDruid.

Если сработает, используйте brute.py со словарём для попытки восстановить открытый пароль. Откройте brute.py, установите salt на полученную соль и final_hash на полученный хеш, затем выполните:

root@kitploit:~
python3 brute.py rockyou.txt

где rockyou.txt — ваш словарь.

Обратите внимание: даже с правильными именем пользователя и паролем вы всё равно не сможете войти, как и администратор. Восстановленный пароль верен, но успешная гонка оставила учётную запись застрявшей с tipo_pass='n', поэтому страница входа отклоняет его. Смотрите раздел «Корневая причина».

Исправление

Уязвимость была исправлена в HotelDruid 3.0.8. Вот список изменений, просто найдите «CVE-2025-44203».

Вспомогательная функция блокировки (crea_lock_file(), блокирующий flock(LOCK_EX)) уже существовала в версии 3.0.7 и использовалась в других частях кода. Однако creadb.php никогда её не вызывал. Патч делает две вещи:

  1. Он устанавливает эксклюзивную блокировку вокруг процедуры настройки, так что запросы, приходящие вместе, ждут своей очереди вместо гонки. Исправление реализует это, наконец вызывая эту вспомогательную функцию в creadb.php: она захватывает блокировку непосредственно перед подготовкой администратора и снимает её с помощью distruggi_lock_file() после. Что заставляет это работать — проверка сразу после захвата блокировки. Запрос, который выполняется первым, удаляет ini.php, пока он ещё удерживает блокировку, и каждый запрос повторно читает, существует ли ini.php перед подготовкой, поэтому запросы, стоящие в очереди за ним, захватывают блокировку, обнаруживают, что файл уже удалён, и пропускают весь блок. К моменту выполнения второго запроса установка уже завершена, и он ничего не делает.
  2. Он передаёт флаг молчания двум запросам UPDATE администратора, так что даже если один из них завершится ошибкой, он больше не выводит учётные данные в ответ. Исправление реализует это, добавляя второй аргумент, 1, к двум вызовам esegui_query(): тому, который устанавливает имя пользователя, и тому, который устанавливает пароль и соль. Этот флаг указывает обёртке запросов оставаться тихой при сбое запроса. Она всё ещё записывает ошибку в журнал сервера, но пропускает echo, который в противном случае вывел бы неудачный запрос, включая хеш и соль, на страницу.
root@kitploit:~
creadb.php:

879: esegui_query("update $tableutenti set nome_utente = '".aggslashdb($admin)."' where idutenti = '1'",1);

897: esegui_query("update $tableutenti set password = '$passw', salt = '$salt', tipo_pass = '5' where idutenti = '1'",1);

Ссылки

  • https://nvd.nist.gov/vuln/detail/CVE-2025-44203
  • https://www.cve.org/CVERecord?id=CVE-2025-44203
  • https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-44203
Скачать инструмент