Как веб-сайт взломан «злонамеренно закодированным изображением, содержащим скрытый внутри него скрипт PHP»?

В минувшие выходные мой рекламный сервер был взломан.

Согласно этой статье, это , по-видимому, широко распространенная проблема.

Там есть что-то, что заставило меня задуматься …

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

Как это возможно? Опирается ли это на открытие изображения с помощью GD или аналогичного? Выгружают ли они сценарий, представляющий собой изображение, и каким-то образом его включают?

    Это может быть так же просто, как загрузить файл, например

    GIF89a<?php echo 'hi'; 

    Если ваш сценарий загрузки проверяет тип контента через mime_content_type() или mime_content_type() он распознается как «данные изображения GIF, версия 89a», поскольку GIF89a является единственным шаблоном / магическим числом, которое требуется для идентификации файла как gif.
    И сценарий загрузки OpenX, по-видимому, сохранил предложенное имя файла, то есть было возможно сохранить этот «образ» как foo.php на сервере. Теперь, если вы запросили этот файл через http://hostname/uploaddir/foo.php сценарий был выполнен как скрипт php, поскольку веб-серверы обычно / часто определяют тип содержимого только расширением имени файла, например, через

     <FilesMatch "\.php$"> SetHandler application/x-httpd-php </FilesMatch> 

    php затем перекликается с ведущим GIF89a и выполняет блок <?php ...code...
    Помещение блока <? Php в комментарий gif немного сложнее, но в основном одно и то же.

    Ваш сервер анализирует этот файл по причине w / e. Нападающие помещают PHP в комментарий к изображению.

    Как вы проверяете файл – это изображение? Если вы делаете это исключительно по типу mime, то я считаю, что они могут подделывать заголовок изображения и включать в себя все, что захотят после этого. VolkerK имеет практический пример

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

    Служить изображения напрямую с сервера; Хорошее предложение – сохранить эти изображения в каталоге, где их можно обслуживать без PHP.

    Я думаю, что это суть, кто-то меня исправит, если я ошибаюсь.

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