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

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

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

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

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

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

Ответы [ 3 ]

34 голосов
/ 30 августа 2010

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

GIF89a<?php
echo 'hi';

Если ваш скрипт загрузки проверяет тип содержимого с помощью fileinfo или 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-комментарий немного сложнее, но в основном то же самое. </p>

5 голосов
/ 30 августа 2010

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

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

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

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

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

2 голосов
/ 30 августа 2010

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

...