Вводная

Цель работы

Ознакомиться с принципами внедрения вредноносных файлов и защиты от них.

Введение

Различные веб-приложения позволяют пользователям загружать файлы. Форумы позволяют пользователям загружать «аватары». Фотогалереи позволяют загружать фотографии. Социальные сети предоставляют возможности по загрузке изображений, видео, и т.д. Блоги позволяют загружать опять же аватарки и/или изображения.

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

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

К прочтению рекомендуются две статьи:
Первая часть
Вторая часть

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

В данной лабораторной будет использовано понятие "shell script". Аналогами в контексте являются "web shell", "php shell" и так далее. Это некий вредоносный скрипт (программа), который злоумышленники используют для управления чужими сайтами и серверами: выполнения команд терминала, перебора паролей, доступа к файловой системе и так далее. Для размещения скрипта чаще всего используются уязвимости в коде сайта или подбор паролей.

Задание

Внимание! Уязвимости создаются и эксплуатируются только на ваших тестовых проектах. Запрещается их демонстрация на каких либо внешних сайтах.

  • Реализуйте заведомо уязвимый алгоритм для загрузки пользовательских изображений (реализуйте один из "неудачных" вариантов проверки). Затем, напрямую или при помощи загруженного шелл скрипта (вы можете использовать данный шелл, любой другой или написать свой) выполните последующие действия:
    1. Вывод информации о среде (как минимум phpinfo());
    2. Листинг файлов и директорий уязвимого сайта;
    3. Загрузка дополнительных файлов на сайт;
    4. Исполнение системных (Windows или Linux) команд на севере;
  • Реализуйте корректное исправление данной уязвимости.

Вопросы

  1. Какие бывают ошибки при проверке загружаемого файла?
  2. Как можно гарантировать безопасную загрузку файла?
  3. Что такое web shell?
  4. Что может сделать взломщик при наличии загруженного web shell?
  5. Как можно проверить сайт на наличие внедрённого web shell?
  6. Как можно понизить степень угрозы настройками веб сервера при наличии успешно эксплуатируемой уязвимости?