Intereting Posts
Я хочу добавить вспомогательные массивы в один массив в php newline не работает в PHP-почте В чем разница между модификаторами доступа в php? paginated api request, как узнать, есть ли другая страница? Многостраничные массивы массивов PHP PHP __PHP_Incomplete_Class Объект с моими данными $ _SESSION Uncaught ReferenceError: checkLoginState не определяется с помощью API facebook php json_decode не работает без кавычек на ключе PHP: включить внутри включенного файла Есть ли способ переписать LESS-переменную с помощью компилятора LESS в PHP? найти параметры в url, используя php Не найдено ни одного результата для запроса, хотя ожидалась хотя бы одна строка wordpress: идентификатор категории и идентификатор сообщения не получаются, когда я изменяю постоянную ссылку как автоматически копировать весь каталог в виде эскизов, используя phpthumb (или некоторую другую библиотеку) Загрузочная разбивка по страницам встроенная реализация

Можно ли вводить php-оболочку в изображение? Как это будет работать?

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

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

Благодарю.

    Повторная кодировка изображения не заставит кого-то загружать оболочку. Единственный верный способ предотвратить его – перекодировать и сканировать изображение на наличие тэгов php.

    Пример оболочки PHP PNG, которая выдержит повторное кодирование

    Да, его нужно будет загружать, возможно, с помощью предоставленной пользователем переменной во включенном пути, например:

    include('templates/' . $_GET['page']); 

    Они также могли бы позволить пользователю установить полное имя файла с расширением .php, поэтому все, что им нужно сделать, это загрузить его в браузере.

    Убедитесь, что getimagesize() не возвращает false, использует произвольное имя файла и принудительно getimagesize() расширение файла. Если это вообще возможно, не сохраняйте загруженное изображение в доступном в Интернете месте, так как оно также может содержать JS и, следовательно, быть вектором XSS.

    Повторное кодирование изображения также позволяет вам удалять неприятные метаданные и мусор в конце, что разрешено несколькими форматами (например, JPEG)

    Есть некоторые способы защитить себя от таких трюков. Проверьте их здесь

    Также прочитайте эту статью, которая объясняет атаку и способы ее решения.

    Главное в этом – использование функции basename php для отсрочки таких атак.

    Я знаю, что есть способ (или был) способ сохранить php-файл как .gif и запустить его код. В эксплоите, который я видел на странице загрузки, тип mime был установлен как GIF, и изображение было загружено чем-то вроде: require('myimage.gif'); Когда myimage.gif был фактически файлом PHP, переименованным в .gif , в том числе файл выполнил бы полезную нагрузку php, иначе файл был просто нормальным gif. Я видел этот эксплойт для сценария загрузки, хакер также hex отредактировал myimage.gif так что байты 47 49 46 38 39 предшествовали остальной части файла. Эти байты представляют собой заголовок GIF и будут обманывать PHP, думая, что файл был GIF, позволяя загружать файл PHP в обход проверки типа файла «вперед». Это можно было бы легко устранить, построив лучшую проверку файлов, чтобы убедиться, что весь файл является законным. Самый простой способ, который я могу придумать, – попытаться загрузить изображение с помощью GD и посмотреть, есть ли у него ошибка. Я не думаю, что GD выполнит полезную нагрузку PHP, но я не уверен, вам придется протестировать. Я предполагаю, что почти один и тот же эксплойт был выполнен или может быть выполнен для tiff или любого типа файла.

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

    1) Установите несколько типов файлов, которые вы можете сделать Array('.png', '.jpg', '.txt', 'etc') если его не в массиве НЕ разрешить. Даже если вы запретите .php , на некоторых серверах все еще есть .php3, .php5 т. Д.

    2) Gaard против myimage.php.gif , сохраняя загруженный файл в md5 (или имя rand) имени файла (исключая тип файла), поэтому myimage.php.gif станет ef0ca703846cdb7a0131ac2889304a27.gif

    3) Проверьте целостность файла, убедитесь, что заголовок и остальная часть файла являются законными.

    4) Не используйте require('myimage.gif'); вместо этого распечатать его содержимое

    Если вы используете только функции GD для управления изображениями, вы должны быть в порядке. Чтобы быть в безопасности, вы можете конвертировать все входящие изображения в конкретный формат, который вы можете считать «безопасным» (мне нравится PNG или JPG, в зависимости от того, является ли вывод вывода браузером или каким-то высоким качеством -Распечатать). Кроме того, никогда не используйте имя imoage, предоставленное пользователем в вашей собственной файловой системе. Таким образом, он не сможет помещать странные данные в имя файла. Чтобы быть более безопасным, вы можете использовать утилиту преобразования imagemagik командной строки. Это быстрее и безопаснее.

    Я не знаю об этом конкретном эксплойте, но обычно использует такие функции, используя ошибки в программном обеспечении, которое загружает изображение. Если PHP или, точнее, библиотека, загружающая изображение TIFF, выделяет неправильный объем памяти для хранения изображения, он может попытаться загрузить изображение в меньшем объеме памяти, чем зарезервировано. Это называется переполнением буфера.

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

    Эти проблемы могут возникнуть, если в библиотеке изображений есть ошибка. Я думаю, что такая ошибка существует для GIF в IE 5. Объем выделенной памяти не определялся фактическим размером файла, а информацией о размере файла в заголовке файла. Это позволило людям создавать поврежденные файлы gif, заканчивая фрагментом кода, который был написан в сегменте кода процесса и может быть выполнен.

    Мне пришло в голову блестящее решение.
    Если вы сохраняете свои изображения на отдельном сервере / домене / CDN / независимо от того, у вас нет прямого доступа к вашему коду, вы выполнили свою миссию!

    Да, оно может. Создайте файл tif (php-code.tif) со следующим кодом

     <?php die("TIF file malicious code works"); 

    Затем в другом скрипте make include 'php-code.tif' ;

    Посмотрите сами, что происходит …

    Да, это означает, что злоумышленник имеет доступ к вашему серверу или вы сами загрузили файл в качестве темы или плагина для cms … oups!


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

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

    Однако есть способы использовать изображения для атак Cross-Site-Scripting для пользователей, использующих Internet Explorer

    Вы также должны быть осторожны, чтобы пользователи не могли загружать изображения, которые будут использоваться в качестве ввода PHP. Например. быть включенным () d по какой-либо причине или загружаться с расширением .php.

    Apache Multiviews может даже привести к тому, что изображения с именем image.php.jpg будут выполнены при некоторых обстоятельствах (хотя я не уверен в этом).

    Вы можете кодировать веб-оболочки в png-изображение, если вы это сделаете правильно, он также сможет пережить повторное кодирование.

    взгляните на это