Файл для загрузки сайта image_upload.php
использовался для загрузки файла 89471928047.php.jpg
. Это была простая форма загрузки файла, которая копирует файл tmp в ту же папку изображений.
Как им удалось выполнить его и загрузить в него другие файлы. Кто-то знает, как это возможно?
PHP version was 5.1.6
, который обновляется ровно час назад или по расписанию с хостом до 5.3.8
... что a, совпадение?
Возможно ли выполнить PHP с расширением file.php.jpg?
Ответ 1
Проверьте файл .htaccess
Используя AddType
в вашем файле .htaccess, вы можете добавить много других расширений, из которых можно запустить PHP. Как правило, расширения .html
могут использоваться при использовании PHP внутри самих себя. Итак, да, возможно:
AddType application/x-httpd-php .jpg
Вы можете проверить это, если хотите.
- Создайте каталог с двумя файлами:.htaccess и test.php.jpg
- Установить содержимое .htaccess на
AddType application-x-httpd-php .jpg
- Установить содержимое test.php.jpg в
<?php echo 'foo'; ?>
- Доступ к test.php.jpg через localhost
Если все идет так, как планировалось, на экран выводится "foo". Вы можете расширить его, чтобы перемещать файлы /tmp
, если хотите.
Определенно, с чем вы хотите быть очень осторожным.
Проверить открытые вызовы, чтобы включить/потребовать
Другим способом, который это могло быть сделано, является вызов require()
или include()
(или любого из методов _once()
), который хакер смог загрузить в свой badfile.php.jpg
файл, который был загружен под видом невинного образа:
<?php
include $_GET["file"];
?>
В приведенном выше примере (упрощенный пример) хакер может пройти по пути к своему файлу .php.jpg
и загрузить его содержимое и обработать его как PHP-код.
Другие (пугающие) идеи
Требовать, включать и связанные с ними методы - это не единственные способы обработки внешних скриптов - к сожалению, вы также можете использовать eval()
. Я бы надеялся, что вы ничего не сделаете. Если у вас были какие-либо скрипты на вашем сервере, которые использовали какую-либо одну из функций файла, чтобы прочитать содержимое другого script, а затем eval()
, чтобы оценить этот контент как PHP, это также может обеспечить уязвимое отверстие безопасности в вашем сайт.
Ответ 2
Ваш image_upload.php
небезопасен, проверьте следующее:
- разрешает ли только расширения изображений? В противном случае можно напрямую загрузить файл PHP. (Я думаю, вы охвачены этим, но дважды проверьте).
- проверяет, действительно ли загруженный файл является изображением? Здесь нет ответа, он не проверяет содержимое. Добавьте эту проверку! С помощью этого единственного шага вы закроете первоначальное нарушение.
Чтобы проверить, может ли это изображение вы можете запустить getimagesize в файле, он вернет FALSE, если это не изображение.
Как можно выполнить этот файл? Во-первых, как вы знаете, что он был выполнен? Вы видели побочные эффекты?
- Один из способов заключается в том, что они могут иметь подделывать другие файлы
- Вторым способом, возможно, более вероятно, что они использовали несаминированные входы из ваших сценариев, чтобы включить или изменить код. В этом случае вы можете найти доказательства, только взглянув на журналы.
Как посмотреть журналы?
Проверьте дату и время загруженного файла и начните искать там подозрительную активность (посмотрите на странные параметры URL-адреса). Когда вы найдете один или несколько IP-адресов, делая злые вещи, grep журнал для этих (тех) IP-адресов, чтобы увидеть всю историю.
Еще одна важная информация, которую вы знаете: вы пишете сайт или используете CMS или аналогичный, и в этом случае, что это такое и какая версия? Вы должны проверить опубликованные уязвимости и обновить в случае.
Ответ 3
Проблема вызвана тем, что ваш сервер использует по умолчанию /etc/httpd/conf.d/php.conf:
rpm -ql php-5.1.6-39.el5_8
/etc/httpd/conf.d/php.conf
/usr/lib64/httpd/modules/libphp5-zts.so
/usr/lib64/httpd/modules/libphp5.so
/var/lib/php/session
/var/www/icons/php.gif
Содержимое/etc/httpd/conf.d/php.conf:
#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
# Use of the "ZTS" build with worker is experimental, and no shared
# modules are supported.
LoadModule php5_module modules/libphp5-zts.so
</IfModule>
#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php
Обратите внимание на последнюю строку AddHandler php5- script.php. Это вызывает эту проблему и требует замены более безопасной конфигурации
Вы можете узнать больше об этом и о том, как применить исправление здесь (см. последний ответ):
http://core.trac.wordpress.org/ticket/11122
также см. это: