How is a website hacked by a “maliciously encoded image that contained a PHP script hidden inside it”?

My ad server has been hacked over the weekend.

It seems to be a widespread problem, according to this article.

There is something in there that got me thinking...

Attackers used one attack to get login rights to his server, and then uploaded a maliciously encoded image that contained a PHP script hidden inside it, he said. By viewing the image, attackers forced the script to выполнить на сервере

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

16
задан Sam 18 August 2014 в 08:17
поделиться

3 ответа

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

GIF89a<?php
echo 'hi';

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

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

php повторяет начальный GIF89a и выполняет блок .
Помещение блока

35
ответ дан 30 November 2019 в 16:13
поделиться

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

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

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

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

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

5
ответ дан 30 November 2019 в 16:13
поделиться

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

2
ответ дан 30 November 2019 в 16:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: