Тема: Task #7
Показать сообщение отдельно

  #18  
Старый 24.05.2019, 10:45
dooble
Участник форума
Регистрация: 30.12.2016
Сообщений: 218
С нами: 4931606

Репутация: 138
По умолчанию

На рдоте задание запускалось с залоченным способом 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
    );
 
Ответить с цитированием