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


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

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

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

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

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

Author: Sam, 2010-08-30

3 answers

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

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....
Поместить блок

 34
Author: VolkerK, 2015-10-06 02:54:50

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

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

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

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

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

 5
Author: The Pixel Developer, 2017-05-23 12:10:08

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

 2
Author: Artefacto, 2010-08-30 00:05:49