CICADA8: "Болтун и тайник" write-up

CICADA8: "Болтун и тайник" write-up

CICADA8

Информация, полученная от бота Цикадовича, приводит к веб-странице, которая при каждом обновлении присылает случайно сгенерированные имя и фамилию.

Пример выводимой информации.

На первый взгляд, на этом возможности сайта заканчиваются. Однако к заданию был приложен словарь для перебора, и, если им воспользоваться, можно обнаружить еще один веб-путь - /actuator.

Вывод страницы /actuator.

Перед нами Spring Boot Actuator, более того - уязвимая его конфигурация, ведь доступ к пути /heapdump позволяет получить доступ к снимку памяти запущенного на сервере приложения.

Снимок имеет довольно большой размер, поэтому стоит вдумчиво подойти к тому, что в нем стоит искать. Наиболее логичный вариант - стандартные для Spring-приложений названия переменных, используемых, например, для подключения к базе данных. При поиске стоит помнить, что текстовые представления строк в heapdump'e всегда заканчиваются символом "!".

Пробуем найти строки spring.datasource.url, spring.datasource.username и spring.datasource.password и обнаруживаем всю информацию для подключения к базе данных:

Информация для подключения к базе данных.

Проанализировав ее, становится ясно, что на порту 5432 находится PostgreSQL с базой usernames_db, к которой можно подключиться от лица пользователя controller с паролем P4ssw0rd1337!.

Успешно подключаемся к базе данных и первым делом проверяем права пользователя, от лица которого мы подключились. Для этого используем команду \du+:

Проверка прав пользователя.

Некоторые версии клиента PostgreSQL не отображают наличие pg_read_server_files при использовании команды \du+. Однако роль можно обнаружить при помощи скриптов, перечисляющих права и возможности пользователя.

Пользователь controller - член роли pg_read_server_files, позволяющей читать произвольные файлы. Попробуем осмотреться в файловой системе при помощи команды select * from pg_ls_dir('/');.

Содержимое корня файловой системы.

Прямо в корне файловой системы находится файл flag.txt. Читаем его с помощью pg_read_file() и получаем флаг.

Чтение флага.




Report Page