На рдоте задание запускалось с залоченным способом php://
поскольку слишком просто.
Нам будет тяжело двигаться дальше, если будем застревать на таких задачках.
Давайте попробуем вместе посмотреть, что тут может быть сложного.
Есть инклюд файла, в который можем писать произвольную информацию
Код:
if (isset($_GET['page'])){
if (validate($_GET['page'])) include($_GET['page']);
И это RFI, т.е. можем применять различные обертки (врапперы).
Http://, https:/, ftp:// и ftps:// запрещены функцией validate(), но список поддерживаемых врапперов у php гораздо
шире.
Пробуем работать с оберткой php://, просто потому, что она умеет работать с фильтрами, а мы умеем применять ее в инклюдах для чтения содержимого скриптов.
Именно способность фильтровать потоки на чтение и запись нам и нужна.
Т.е. считанный файл и он же, но обработанный некоторым фильтром (или последовательностью фильтров), уже будут содержать различающуюся информацию и этим можно манипулировать.
А штатных фильтров, работающих с php:// достаточно, чтобы составить несколько вариантов RCE.
Ну и не забываем выполнить требование валидатора
Код:
$rules = Array(
'login.php' => OK,
'view.php' => OK
);