Remote File Inclusion
RFI - это выполнение удаленных файлов на серверной стороне. Проще говоря, у нас есть сервер, возвращающий с каким то запросом код программы, который будет открыт и запущен на сервере-жертве.
Нахождение RFI
Нахождение RFI сводится к тому, что мы вначале находим LFI.
Поиск LFI Для RFI требуется несколько параметров:
Третий пункт как раз объясняет нам, почему вначале мы ищем именно LFI: LFI не зависит от начала этой строковой переменной (именно из-за Path Traversal - да-да /../ спасет мир)
Изучение фильтров Если вы уже нашли LFI, то пора бы изучить фильтры. Для этого нам нужен минимум символов:
Если хотя бы один из символов не проходит, то RFI отсутствует (если нет преобразования hex,base64 и тд).
Конкатенация к строке инклуда (отличие от LFI реализации) Обычно приписывание другой строки к запросу обходится так же, как и в LFI (и вы это могли найти на части поиска LFI уязвимости). Но тут есть некоторые "фичи".
Если не получится откинуть приписанную строку Рассмотрим пример, где приписывается _lg.php (http://www.root-me.org/en/Challenges/Web-Server/Remote-File-Inclusion). LFI у нас нет тк никакие способы не прошли.
Наш запрос:
Преобразовывает инклуд в:
В этом случае нам требовалось отослать подобную строку:
Объясняю, что происходит:
Если говорить проще, то нам нужно создать такой файл, что при переходе к нему, его url оканчивался на нужную последовательность символов (как в примере _lang.php).
Но! Это не пройдет, если у вас будет приписываться окончание незапускаемого типа файлов (как gif или css).
Фильтруется протокол передачи RFI не пройдет так же, если будут фильтроваться все три протокола:
Если же какой то из них не фильтруется, то эта часть, считайте, успешно пройдена.
Эксплуатация RFI
Большинство информации было написано в предыдущих пунктах,поэтому вкратце. Для эксплуатации нам всего лишь требуется cвой сайт или ftp сервер выходящий в глобальную сеть.
Статьи и полезные ссылки
взято с сайта http://itsecwiki.org/
Last updated