Видим главную страницу Перехватим и посмотрим запрос на прочтение лога

Способ 1: Code Analysis

Видим, что флаг лежит в /home/overseer/flag.txt Видим, что все, что подается в log_file “санитизируется” и проверяется на / в начале. Вот и ошибка. При вызове sanitize_filename последовательности ../ заменяются не рекурсивно. Исходя из этого, мы можем составить payload такого типа. Тут, выделенные красным блоки уберутся, но все, что осталось, все равно соберется в последовательности ../ Получаем флаг.

Способ 2: Fuzzing

По логике задания, можно предположить, что будет LFI и можно попробовать пофаззить. Сохраним запрос в файл. Запустим ffuf с листом на LFI тестинг от Джейсона Хаддикса.

ffuf -request search.req -request-proto http -w /opt/SecLists/Fuzzing/LFI/LFI-Jhaddix.txt

И также получаем рабочие payload’ы на чтение файлов. Из исходного кода находим файл, который нужно прочитать, и так же читаем, как и в первом способе.