Статья [Новичкам] LFI или как открывать произвольный файл на сервере.

Всем салам. Сегодня хотелось бы поговорить о такой уязвимости, как Local File Inclusion (LFI). Наличие данной уязвимости очень опасно. Но давайте обо всем оп порядку.

[0] - Немного теории

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

Хочу сказать, что это является, как бы вступительной статьей по LFI, где мы будем рассматривать разные варианты LFI и в итоге, окончательная статья в цикле Безопасный PHP, как же все-таки от него защищаться.

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

[1] - Практика

Показывать это на боевых сайтах я не буду, потому что, как минимум это незаконно, а возьмем для эксперимента DVWA. А в следующей статье мы поднимем сайт на тестовом серваке и в подробностях будем тестировать. Итак, начнем:

[1.1] - Нулевая фильтрация

Зайдем на DVWA и выбираем соответственно уязвимость File Inclusion:

У этой страницы ссылка выглядит так:

1516476333515.png


Вот тут-то и есть наша уязвимость, откуда мы можем обращаться к серверу и читать его файлы. А ведь требовалась элементарная фильтрация, чтобы этого не допустить. Итак, для этого нам нужно указать путь к файлу. Такой вариант LFI уязвимости считается самым базовым.

1516476352802.png


Для демонстрации, в корневой папке я создал копию главной страницы и изменил его заголовок. И в запросе вместо передачи параметру page нашего файла, я передал ему файл, который находится в корневой папке. А так как мы находимся во вложенных папках, чтобы выйти из них указываем ../ что значит, на 1 папку выше и после указываем сам файл. И в итоге получаем содержимое файл. Обычно при проверке LFI уязвимости ссылаются на passwd, который расположена /etc/passwd.

И чтобы было понятно, что же это такое «нулевая фильтрация», на примере кода:
Код:
$file = $_GET['page'];

[1.2] - Base64 или php filter

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

1516476434335.png


Строка это, как вы уже поняли в base64 расшифровав его, мы получим содержимое файла:

1516475954880.png


Этот LFI в реальности редко сейчас можно встретить. Но она достаточно часто используется в CTF соревнованиях.

Поиск LFI может производится двумя способами:
  • Автоматический
  • Ручной
Автоматический я делаю с помощью spider в BurpSuite. Может потом эту тему тоже рассмотрим.
И ручной, тут, когда находим что-то типа .php?page=home, пытаемся изменить значение параметра, если успешно выполняется, то аллелуя.

С помощью дорков можно найти, возможно, уязвимые объекты:

inurl:.php?main=*php
inurl:.php?file=
inurl:.php?inc=*php
inurl:.php?pg=*php
inurl:.php?include_file=*php
inurl:.php?main=*html
inurl:.php?inc=*html
inurl:.php?pg=*html
inurl:.php?id=
inurl:.php?action=
inurl:.php?content=
inurl:.php?page=

И еще можете прочитать про сканер дорков ZEUS-SCANNER

Также можно еще много своих дорков намутить. На этом думаю все, в следующей части мы разберем еще 2 типа LFI и как нужно от них защищаться.

И помните. Фильтровать вход, экранировать выход! Всем удачи.
 
Последнее редактирование:
Спасибо, очень познавательно, но в этом веке никто параметр page не ставит
 
Кстати в статье совершенно не затронена тема RCE через LFI.
например через:
/proc/self/environ /proc/self/fd/* /var/log/apache/access.log
и тд
Ну и полезная софтина для поиска и эксплуатации LFI https://github.com/D35m0nd142/LFISuite
 
Последнее редактирование модератором:
Кстати в статье совершенно не затронена тема RCE через LFI.
например через:
/proc/self/environ /proc/self/fd/* /var/log/apache/access.log
и тд
Ну и полезная софтина для поиска и эксплуатации LFI https://github.com/D35m0nd142/LFISuite
Может это потому что 1 часть?) Кроме этого там много чего еще не затронуто...
 
  • Нравится
Реакции: prox00
На самом деле, это смешно.
Во первых есть конфигурационный файл , элементарно открыть и прописать практически для всех папок и файлов запрет.
Во вторых есть регулярные выражения для защиты от URL, или смотреть первый пункт.
В третьих есть множество методов защиты в PHP.
В четвертых смотреть и изучить все три метода.
 
Как по мне, слишком мало информации для одной статьи, не было даже классического %00, попытка растянуть на большее кол-во статей?
 
  • Нравится
Реакции: m0ze
LFI через загрузку файлов/картинок, запись в сессию, phpinfo.
%00 можно забыть, как и отбрасывание пути через слэши. Также можно забыть про RCE через environ, логов или mail.
Вы той инфой, что уже 10 лет как есть в сети, вообще не пользуетесь, да?
 
  • Нравится
Реакции: m0ze
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!