Введение

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

Веб-страницы часто используют язык сценариев, известный как SSI, который работает на сервере. Большинство веб-серверов, включая Apache, IIS, Ngnix, LiteSpeed ​​и другие, поддерживают стандарт SSI. В большинстве случаев SSI используется в ситуациях, когда разработчик хочет выполнить незначительные действия, чтобы обеспечить небольшой уровень автоматизации на статическом веб-сайте или установить переменные среды для CGI или компьютерных изображений. Для включения внешних файлов или выполнения CGI-скриптов или системных действий до загрузки текущей страницы или до завершения рендеринга страницы вам потребуется использовать директиву include.

Что включает в себя SSI/серверная сторона?

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

Давайте обсудим некоторые из его директив:

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

директива «exec» выполнит команду на сервере независимо от того,

Сервер Unix или Windows. Далее это зависит от того, какой тип значения мы собираемся передать здесь.

Например, здесь я передаю «whoami» в качестве значения команды Linux, которая помогает идентифицировать пользователя в системе. Если команды Linux выполняются, это означает, что на сервере установлена ​​операционная система на базе Linux.

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

Существует вероятность внедрения SSI, поскольку проверка ввода не была реализована должным образом. Директива сервера может быть очень легко выполнена вводом.

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

Почему это угроза?

Инъекция SSI опасна, потому что она может перерасти в удаленное выполнение кода (RCE) или злоумышленник может взять на сервер оболочку, которая позволяет злоумышленнику получить контроль над сервером и выполнять фрагменты команд под своим руководством. Оба этих исхода вредны. Эта уязвимость имеет высокий уровень серьезности, поскольку она позволяет относительно легко выполнить директиву сервера, позволяет злоумышленнику получить доступ к файлам сервера и получить конфиденциальную информацию с сервера.

Пользовательские данные могут быть переданы в источник веб-страницы через приложения для обмена сообщениями, а также приложения системы управления контентом. Поскольку контент будет отправлен на сервер, злоумышленник может воспользоваться привилегией и вставить туда оператор Include на стороне сервера. Затем, не прилагая особых усилий, злоумышленник может вставить туда произвольную системную команду, а локальный веб-сервер в дальнейшем выполнит эти команды. Уровни разрешений, установленные на сервере, определяют возможность использования сервера. Есть несколько директив SSI, которые считаются стандартными и могут быть полезны в зависимости от требований пользователя. Например:

Юникс:

Если пользователь хочет получить информацию из операционной системы на базе Unix.

Конфигурация .Net:

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

Значение переменной:

Если пользователь хочет получить значение переменной, то приведенный ниже фрагмент вернет значение или переменную.

CGI-скрипт:

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

Системная команда:

Если пользователь хочет получить вывод с помощью системных команд, он может использовать приведенную ниже команду.

Как работает директива SSI?

Чтобы проверить, уязвимо ли приложение для внедрения SSI или нет, мы сначала проверяем расширение URL-адреса, т.е. оно должно быть таким, как .stm, .shtm, shtml, а затем передаем эти символы один за другим в поля ввода ‹!#=/."-› и [a-zA-Z0–9].

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

Например: когда пользователь перехватывает трафик с помощью любого инструмента перехвата, такого как Burp Suite, он может изменить заголовок запроса в соответствии со своими потребностями. Если заголовок запроса выглядит так:

Теперь пользователь хочет получить некоторые данные или хочет запустить системные команды на сервере, он может изменить заголовок запроса и изменить заголовок запроса, чтобы он выглядел так:

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

Как смягчить SSI?

  • Необходимо отключить директиву exec на сервере, чтобы предотвратить или уменьшить последствия внедрения SSI. В будущем вам следует отключить выполнение SSI на веб-страницах отдельных лиц, если в этом нет необходимости.
  • Если для некоторых конкретных страниц требуется SSI, команда должна выполнить некоторые конкретные шаги, такие как:
  • Включите только те отдельные директивы SSI, которые необходимы для страницы, а не все директивы SSI.
  • Необходимо выполнить санитарную обработку пользовательского ввода, поэтому объект HTML должен быть закодирован до того, как он будет предоставлен на страницу с разрешениями на выполнение SSI.
  • Используйте SUExec[5], который делает пользователя владельцем файла, а не пользователем веб-сервера.
  • Отключить загрузку HTML-страниц, если для этого нет деловых причин; в противном случае злоумышленник может контролировать загрузку с помощью директив SSI. В случае, если данные пользователя динамически загружают HTML-страницы, содержимое рассматриваемой HTML-страницы необходимо правильно закодировать, прежде чем рассматриваемая HTML-страница может быть представлена.

Заключение

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