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

Мой рекламный сервер был взломан в выходные.

Кажется, широко распространенная проблема, согласно этой статье.

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

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

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

Ответ 1

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

GIF89a<?php
echo 'hi';

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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