В минувшие выходные мой рекламный сервер был взломан.
Согласно этой статье, это , по-видимому, широко распространенная проблема.
Там есть что-то, что заставило меня задуматься …
Атакующие использовали одну атаку, чтобы получить права входа на свой сервер, а затем загрузили злонамеренно закодированное изображение, содержащее скрытый внутри него скрипт 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
и других функций потока.