Перейти к содержанию

Upload payload


Одной из основных задач при тестировании на проникновение и CTF задач, является доставка полезной нагрузки в web приложение, для возможности RCE.

Сделать это возможно если приложение обладает возможностью загрузки файлов.

В случае, если механизм загрузки/проверки загружаемых файлов имеет изъяны, доставка необходимой полезной становится тривиальной задачей.

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

Вышеописанные механизмы проверки/ограничения загрузки нелегитимных файлов подраздедяются по способу выполнения на:

  • выполняемые на стороне клиента;
  • выполняемые на стороне сервера.

Первые, как правило представляют из себя javascript код. Их можно обойти различными спопобами.

Отключение выполнения javascript кода на стороне клиента.

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

Загрузка через curl.

Загружая файлы через curl не используется браузер в котором выполняется javascript код.

Редактирование расширения и (или) MIME type загружаемого файла.

Как бы банально это не звучало, в некоторых случаях это может сработать.

Для изменения MIME type файла, запрос загружающий файл должен быть перехвачен и изменен, например с помощью Burp Suite.
Кроме того, сюда же можно отнести добавление null byte в расширение файла. Подробнее тут под пунктом 9.

К сведению

Использование null byte не актуально в современных версиях PHP

Удаление целевого javascript кода.

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

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

Фильтры выполняемые на стороне сервера работают с уже загруженными файлами, анализуруя их расширение, MIME type и Magic Number. Работы по преодолению таких фильтров разительно отличается от фильтров на стороне клиента, потому как принцип их работы представляет из себя черный ящик. Обход таких фильтров возможен через:

  1. перебор различных вариантов расширений;

  2. Изменение MIME типа;

  3. Изменение первых байт файла которые определяют его тип (Magic number).

Так же, частным случаем преодоления фильтров на стороне сервера (при условии, что этот веб сервер - apache) является атака связанная с модификация файла .htaccess. В основу которой заложены два принципа:

Файл .htaccess определяет некоторые конфигурационные параметры web сервера apache. В частоности записанная в файл .htaccess инструкция:

AddType application/x-httpd-php .available_extension
заставит apache выполнять все файлы с расширение .available_extension как файлы php.

Файл .htaccess может быть опеределен в каждой директории сайта.