Доброго времени суток! Данная задача представлена на сайте Хакердома сезона 2019-2020 годов. Я долго сидел над ней, но, видимо, я что-то не до конца понимаю.
На сайте представлен сервис для чтения файлов. В условии указано, что флаг лежит в файле, находящемся рядом с index.php. Вот ссылка непосредственно на
В итоге получаем:
Насколько я понял, уязвимой является функция eval(), но я не смог подобрать эксплойт, который выполнил бы произвольный код.
Также нашел подсказку, в которой явно говорится, что здесь необходимо выполнить php-инъекцию и что комментарии в виде двойного слеша (//) будут отфильтровываться функцией basename(). Следовательно, эксплойт будет содержать также символ комментария.
Решение задачи не принесет мне никакой выгоды и нужно исключительно в образовательных целях.
На сайте представлен сервис для чтения файлов. В условии указано, что флаг лежит в файле, находящемся рядом с index.php. Вот ссылка непосредственно на
Ссылка скрыта от гостей
. Есть возможность прочитать часть кода страницы для чтения файлов с помощью ее самой же, если передать ей правильный параметр:
Ссылка скрыта от гостей
В итоге получаем:
PHP:
50)
exit("Имя файла слишком длинное.");
$fileName = basename($file);
if (strpos($file, "readme") === false) {
exit("Это неправильный путь, можно скачивать только файлы, в именах которых есть «readme».");
}
echo 'Содержимое файла '.$file.':';
echo "
";
readfile($file);
echo "
";
eval("fwrite(fopen('stats/stats.txt', 'a'), \"$fileName\n\");");
?>
Насколько я понял, уязвимой является функция eval(), но я не смог подобрать эксплойт, который выполнил бы произвольный код.
Также нашел подсказку, в которой явно говорится, что здесь необходимо выполнить php-инъекцию и что комментарии в виде двойного слеша (//) будут отфильтровываться функцией basename(). Следовательно, эксплойт будет содержать также символ комментария.
Решение задачи не принесет мне никакой выгоды и нужно исключительно в образовательных целях.