Local File Inclusion
https://t.me/e7teamВсем привет!
Сегодня мы рассмотрим уязвимость, под названием Local File Inclusion (Включение локальных файлов).
Введение:
Local File Inclusion (далее LFI) это уязвимость, с помощью которой хакер может получить доступ к локальным файлам WEB-сервера. В связи с этим происходит полная компрометация данных, а в особых случаях открывается возможность для проведения атаки XSS (межсайтовый скриптинг) и удаленному выполнению кода.

Основное:
LFI появляется из-за недостаточной фильтрации, входных данных и параметров кода. Данной уязвимости в большей степени подвержены сайты, написанные на PHP, а таких между прочим 80% всего интернета.
Существует два способа поиска данной уязвимости: Ручками и автоматизированный (с помощью софта). Рассмотрим пример, в котором будем работать ручками. Для демонстрации нам понадобится уязвимое WEB-приложение DVWA.
Итак, подключаемся и выбираем уровень сложности. На выбор нам дано: low, medium и high. Для начала рассмотрим простой вариант (рис.1).

Далее выбираем вкладку File Inclusion и перед нами появилась исходная страница нашего таска. Далее в адресной строке браузера, мы видим параметр include.php. С помощью данной конструкции, происходит включение файла в код сценария, во время исполнения этого сценария (рис.2). Вот и давайте поэксплуатируем данный скрипт.

Попробуем вывести параметр etc/passwd, который содержит всю информацию о пользователях, в текстовом виде. Для этого вместо конструкции include.php добавим ../../../../../../../../etc/passwd (рис.3). Параметр в виде символов (../../../../../../../../) это уязвимость под названием Path Traversal, она позволяет подняться по иерархии в каталоге файлов, так как /etc/ это корневой каталог, то нам нужно до него добраться.

В итоге мы получаем, вывод файла etc/passwd. В данном случае, любая фильтрация ввода, отсутствует (рис.4).

Теперь, давайте рассмотрим пример посложнее и выберем уровень medium. Открываем файл file1.php, нажимаем на view source и взглянем на код (рис.5).

Мы видим код, который фильтрует значения символов и букв. Это значит, что если мы введем в адресную строку ссылку, которая будет содержать указанные символы и буквы, то у нас ничего не получится. Поэтому вместо http мы впихнем HTTP, так как в любом языке программирования, присутствует чувствительность к регистру. Введем например HTTP://google.com (рис.6).

Какая неожиданность, предстал сам гугл. Ну и напоследок рассмотрим high. Сразу смотрим исходный код и видим Input Validation с оператором if, которые сообщают нам, что если выполнится условие в скобках, то выйдет ошибка (рис.7).

Я думаю уже все догадались, что мы можем сделать (рис.8).

Вывод:
Итак, сегодня мы рассмотрели уязвимость LFI. Это очень коварная уязвимость, которая имеет много вариаций.
Для предотвращения этой атаки, следует использовать всевозможные средства защиты, такие как: WAF(Файрвол WEB-приложений), фильтрация входных данных и безопасная разработка(что бывает крайне редко). В следующих статьях, мы рассмотрим более изощренные варианты данной атаки.
Внимание! Информация предоставлена строго в ознакомительно-развлекательных целях. Автор данной статьи, а также ресурс на котором размещена статья, не несут ответственности за любые противоправные действия, совершенные после прочтения данной статьи и применения действий описанных в этой статье.