Интерпретация изображения в формате JPEG в виде PHP-скрипта

0

Я решаю некоторые проблемы с хакерством в сети от natas overthewire. На уровне 12 я должен загрузить изображение на сервер, а затем сервер дает мне точную ссылку, в которой он загрузил изображение. Я использую это, написав простой скрипт php, повторяющий содержимое пароля. Это работает, потому что я могу загрузить его как.php файл, и сервер также сохраняет его в этом формате. На уровне 13 представлена аналогичная задача, но здесь сервер проверяет, является ли это файлом изображения, вызывая функцию exif_imagetype(). Я просто изменяю существующий файл изображения в блокноте и вставляю свой скрипт в конец.

Мой вопрос: если сервер просто проверил расширение файла и отклонил, если файл не был расширением.jpg, было бы лучше, потому что в этом случае, даже если бы я загрузил скрипт, он никогда не будет выполняться сервером, как это было бы интерпретируется как файл изображения, а сервер php никогда не будет анализировать файл. Итак, зачем использовать такую функцию, как exif_imagetype()?

  • 0
    ren nastyvirus.exe cutekittens.jpg . «Ну и дела, это говорит, что .jpg, это должно быть изображение»
  • 0
    Какая польза от того, что это вирус, если вещь, которая будет его выполнять, всегда будет интерпретировать его как образ? Если скрипт php не выполняет его, то, даже если это не изображение, это не принесет никакого вреда. Пожалуйста, объясните ... Я могу ошибаться.
Показать ещё 1 комментарий
Теги:
image

1 ответ

0

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

Например, это может быть пример элементарной проверки расширений:

$extension = end( explode('.', $_FILES['my_file']['name'] );
// or:
$extension = strrchr($_FILES['file']['name'], '.');  

Это хорошо и хорошо, и действительно отлично работает для имен файлов, таких как myfile.jpg, malicious.php и т.д.

Однако это может быть легко подделано недобросовестным пользователем с различными хаками. Наиболее трудным для обхода является печально известная инъекция NULL-байта:

shell.php%0delete0.jpg

Вы можете узнать больше о инъекции нулевых байт здесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню