L
lukeone
Гость
Теория
Уязвимость php - include одна из самых известных, но между тем и самых распространённых "дыр" встречающихся сегодня в php сценариях. Она возникает, когда по невнимательности, незнанию, либо по какой-то другой ведомой только ему одному причине, программист позволяет использовать данные, переданные сценарию в виде параметров, без дополнительной проверки (такие данные ещё называют "мечеными") в качестве параметра функцией include. Для того, чтобы лучше разобраться в принципе действия данной уязвимости, необходимо иметь некоторое представление о вышеназванной функции.
php функция include, а также include_once
Данная функция используется для подключения к запущенному php сценарию дополнительных программных модулей. Причём, в отличие от похожей по свойствам require, функция include исполняет эти модули непосредственно в своём процессе. А следовательно, прикрепляемые таким образом модули будут исполняться не как отдельные сценарии, а как части подключившего их к себе сценария. Точнее, include будет исполнять только ту часть файла, которая заключена между спец. тэгами:
"<?php" или "<?"
"?>"
Всё остальное php просто выдаёт в виде текста. Т.е. если подключить текстовый файл (например: /etc/passwd ) не содержащий указанных тэгов, всё содержимое этого файла будет выдано интерпретатором.
Пример вызова:
include($file);
Как вы наверное заметили, функция include имеет всего 1 параметр ($file), который указывает путь и имя файла подключаемого модуля. Стоит отметить также, что в юниксоподобных системах (в зависимости от настроек php) в качестве параметра можно передавать не только путь и имя файла, но и url (Интернет адрес) файла(!!!).
Практика
Предположим, на некотором ВЕБ-сервере установлен следующий php сценарий:
<?php
include($http_get_vars["file"]);
?>
А также множество различных подключаемых сценариев-модулей для него:
home.php
feedback.php
...
Автор этого сценария предполагал, что все посетители сайта будут мирно переходить от одной страницы к другой нажимая кнопочки, ссылочки и прочие объекты управления. А сценарий, в зависимости от переданного параметра file, будет присоединять один или другой модуль, таким образом генерируя различные html страницы (чаще всего include используют именно таким образом).
Примеры запросов:
Для просмотра ссылки Войдиили Зарегистрируйся
Чтобы проверить есть ли уязвимость в данной форме, нам нужно просто изменить запрос:
Для просмотра ссылки Войдиили Зарегистрируйся
На выходе получим содержимое файла passwd.
Если на сервере в опциях php включен режим отладки, выявить подобную уязвимость не составляет особого труда.
Уязвимость php - include одна из самых известных, но между тем и самых распространённых "дыр" встречающихся сегодня в php сценариях. Она возникает, когда по невнимательности, незнанию, либо по какой-то другой ведомой только ему одному причине, программист позволяет использовать данные, переданные сценарию в виде параметров, без дополнительной проверки (такие данные ещё называют "мечеными") в качестве параметра функцией include. Для того, чтобы лучше разобраться в принципе действия данной уязвимости, необходимо иметь некоторое представление о вышеназванной функции.
php функция include, а также include_once
Данная функция используется для подключения к запущенному php сценарию дополнительных программных модулей. Причём, в отличие от похожей по свойствам require, функция include исполняет эти модули непосредственно в своём процессе. А следовательно, прикрепляемые таким образом модули будут исполняться не как отдельные сценарии, а как части подключившего их к себе сценария. Точнее, include будет исполнять только ту часть файла, которая заключена между спец. тэгами:
"<?php" или "<?"
"?>"
Всё остальное php просто выдаёт в виде текста. Т.е. если подключить текстовый файл (например: /etc/passwd ) не содержащий указанных тэгов, всё содержимое этого файла будет выдано интерпретатором.
Пример вызова:
include($file);
Как вы наверное заметили, функция include имеет всего 1 параметр ($file), который указывает путь и имя файла подключаемого модуля. Стоит отметить также, что в юниксоподобных системах (в зависимости от настроек php) в качестве параметра можно передавать не только путь и имя файла, но и url (Интернет адрес) файла(!!!).
Практика
Предположим, на некотором ВЕБ-сервере установлен следующий php сценарий:
<?php
include($http_get_vars["file"]);
?>
А также множество различных подключаемых сценариев-модулей для него:
home.php
feedback.php
...
Автор этого сценария предполагал, что все посетители сайта будут мирно переходить от одной страницы к другой нажимая кнопочки, ссылочки и прочие объекты управления. А сценарий, в зависимости от переданного параметра file, будет присоединять один или другой модуль, таким образом генерируя различные html страницы (чаще всего include используют именно таким образом).
Примеры запросов:
Для просмотра ссылки Войди
Чтобы проверить есть ли уязвимость в данной форме, нам нужно просто изменить запрос:
Для просмотра ссылки Войди
На выходе получим содержимое файла passwd.
Если на сервере в опциях php включен режим отладки, выявить подобную уязвимость не составляет особого труда.