Как сайт, взломанный "злонамеренно закодированным изображением, содержащим скрытый внутри него 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
и другие функции потока.