• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Выполнение PHP-инъекции

Immensa

New member
02.07.2019
2
0
BIT
0
Доброго времени суток! Данная задача представлена на сайте Хакердома сезона 2019-2020 годов. Я долго сидел над ней, но, видимо, я что-то не до конца понимаю.
На сайте представлен сервис для чтения файлов. В условии указано, что флаг лежит в файле, находящемся рядом с 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(). Следовательно, эксплойт будет содержать также символ комментария.

Решение задачи не принесет мне никакой выгоды и нужно исключительно в образовательных целях.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!