stringtranslate.com

Уязвимость включения файлов

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

Типы включения

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

Включение удаленного файла ( RFI ) происходит, когда веб-приложение загружает и выполняет удаленный файл. Эти удаленные файлы обычно получаются в форме HTTP или FTP URI как параметр, предоставленный пользователем веб-приложению.

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

Локальное включение файлов ( LFI ) похоже на уязвимость удаленного включения файлов, за исключением того, что вместо включения удаленных файлов для выполнения могут быть включены только локальные файлы, т. е. файлы на текущем сервере. Эта проблема все еще может привести к удаленному выполнению кода путем включения файла, содержащего контролируемые злоумышленником данные, такие как журналы доступа веб-сервера.

Языки программирования

PHP

В PHP основная причина заключается в использовании непроверенного пользовательского ввода с функцией файловой системы, которая включает файл для выполнения. Наиболее заметными являются операторы includeи require. Большинство уязвимостей можно отнести к тому, что начинающие программисты не знакомы со всеми возможностями языка программирования PHP. В языке PHP есть директива, которая, если она включена, позволяет функциям файловой системы использовать URL для извлечения данных из удаленных местоположений. [1] Директива есть allow_url_fopenв версиях PHP <= 4.3.4 и allow_url_includeс PHP 5.2.0. В PHP 5.x эта директива по умолчанию отключена, в предыдущих версиях она была включена по умолчанию. [2] Чтобы воспользоваться уязвимостью, злоумышленник изменит переменную, которая передается одной из этих функций, чтобы заставить ее включить вредоносный код с удаленного ресурса. Чтобы смягчить эту уязвимость, весь пользовательский ввод должен быть проверен перед использованием. [3] [4]

Пример

Рассмотрим этот PHP- скрипт, который включает файл, указанный в запросе:

<?php если  ( isset ( $_GET [ 'язык' ]))  {  include ( $_GET [ 'язык' ]  .  '.php' ); } ?>
< form  method = "get" >  < select  name = "language" >  < option  value = "english" > Английский </ option >  < option  value = "french" > Французский </ option > ... </ select >  < input  type = "отправить" > </ form >

Разработчик намеревался прочитать english.phpили french.php, что изменит поведение приложения для отображения языка по выбору пользователя. Но можно ввести другой путь с помощью languageпараметра.

Лучшим решением в этом случае является использование белого списка допустимых языковых параметров. Если нельзя использовать сильный метод проверки ввода, такой как белый список, то положитесь на фильтрацию ввода или проверку переданного пути, чтобы убедиться, что он не содержит непреднамеренных символов и шаблонов символов. Однако это может потребовать предвосхищения всех возможных проблемных комбинаций символов. Более безопасным решением является использование предопределенного оператора Switch/Case для определения того, какой файл следует включить, а не использование URL или параметра формы для динамической генерации пути.

Страницы JavaServer (JSP)

JavaServer Pages (JSP) — это язык сценариев, который может включать файлы для выполнения во время выполнения.

Пример

Следующий скрипт уязвим к уязвимости включения файла:

<% String p = request.getParameter ( "p" ) ; @include file = " <%=" includes / " + p +" . jsp " %> "      %>

Включения на стороне сервера (SSI)

Server Side Include встречается очень редко и обычно не включается на веб-сервере по умолчанию. Server-side include может использоваться для удаленного выполнения кода на уязвимом веб-сервере. [6]

Пример

Следующий код уязвим к уязвимости удаленного включения файлов:

<!DOCTYPE html> < html > < head > < title > Тестовый файл </ title > </ head > < body > <!--#include file="USER_LANGUAGE"--> </ body > </ html >

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

Смотрите также

Ссылки

  1. ^ "Использование удаленных файлов". PHP . Получено 3 марта 2013 г. .
  2. ^ "Список директив php.ini". PHP . Получено 21 октября 2016 г. .
  3. ^ "Remote File Inclusion". Консорциум по безопасности веб-приложений . Получено 3 марта 2013 г.
  4. ^ "CWE-98: Неправильный контроль имени файла для оператора Include/Require в программе PHP ('PHP Remote File Inclusion')". Перечисление распространенных слабых мест (CWE) . Mitre . Получено 3 марта 2013 г. .
  5. ^ "PHP :: Запрос № 39863 :: file_exists() молча усекает после нулевого байта". bugs.php.net . Получено 21.10.2016 .
  6. ^ "Учебник Apache httpd: Введение в серверные компоненты - Apache HTTP Server версии 2.4". httpd.apache.org . Получено 21 октября 2016 г.

Внешние ссылки