Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > HTTP сервера > Что-то вроде bug report


Автор: Рысь 26.01.07, 14:36
Сюда скидываем следующее:
1. Описание дырки
2. Способы устранения/минимизации последствий/защиты.

Перед постом обязательно почитать BugTrack соответствующего языка.
Если соберетесь публиковать эксплойт (рабочий код), то лучше скиньте его сначала мне. Во избежание, так сказать.

Автор: Pr0[)!9Y 26.01.07, 16:54
Недостаточная проверка данных при использовании функции getimagesize().

Язык: PHP 4/5
Источник: прверка рисунка на вшивость
Классификация: выполнение произвольного кода
Функция: getimagesize()
Описание:
Функция getimagesize не совсем корректно обрабатывает графические файлы, проверка осуществляется на основе начала файла (содержащего служебную информацию) к тому же независимо от расширения файла. Существует возможность дописать в конец файла произвольный PHP код. При этом изображение будет распознано как корректное.
Опасность заключается в том, что проверка загруженных графических файлов на основе одной лишь функции getimagesize позволяет закачать любой PHP файл.

Пример:
Любое GIF изображение открывается каким либо текстовым редактором, в конец дописывается PHP код, файл переименовывается в somefile.php и закачивается на сервер, при недостаточной проверке данных файл окажется загруженным с расширением PHP, что позволит его исполнить.

Защита:
Дополнительно проверять входные файлы на корректность имени.
Один из вариантов:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    if(preg_match('/\.(gif|png|jpg|jpeg)$/i',$_FILES['userfile']['name'])){
        //Необходимые операции
    }
PS:
Пост призван указать на аккуратность использования этой функции, а не на её неверность.

Автор: Miscђka 26.01.07, 18:19
А кто сказал, что getimagesize() должна проверять вшивость картинки? Она возвращает размер и предполагаемый тип. Баг или дыра в данном случае не в языке, а в программисте, который использует эту функцию не по назначению.

Автор: Рысь 26.01.07, 20:12
Цитата Pr0[)!9Y @
Наверно стоит произвести зачиску по жесткой схеме
поставила на отложенное удаление все, кроме поста Pr0[)!9Y и замечания от Miscђka

ЗЫ: предложения по названию принимаются...

Добавлено
И еще для размышления:
Цитата nerezus @
Далеко ходить не надо: файл с именем blah.ext1.ext2, где в апаче не зарегана ext2, будет работать так, как будто .ext2 в имени нету.
Например blah.php.lol будет обработан хендлером для пхп.
Защита: исправить регэксп на /^[^.]+\.(gif|png|jpg|jpeg)$/i

Автор: nerezus 04.02.07, 09:10
Цитата
Защита: исправить регэксп на /^[^.]+\.(gif|png|jpg|jpeg)$/i
Ну это немного не то.
Для закачек: либо давать закачивать файлы только с определенными расширениями(т.е. все, что не разрешено - запрещено), либо менять имена файлов при закачке.

Однако даже если есть возможность закачать картинку, то в нее можно запихать свой код(поэтому некоторые движки держат картинки/аватары в базе).
И если движок содержит локальный инклюд, то.... можно сказать, что инклюд становится нелокальным =)
Таким образом, к примеру, была поломана mazafaka.ru :D

Сообщения были разделены в тему "проверка данных при использовании функции getimagesize()"

Автор: lyubchick 31.05.08, 06:49
Здравствуйте,

у меня проблема:

Я создаю папки которые были с помощью Php

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    mkdir($_SERVER['DOCUMENT_ROOT']."/galerypath/".$newMenuItem_path, 0777);


Вот папки которые таким образом создаются, они имеют следующие параметры:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    drwxrwxrwx    8 hostnam  hostnam      4096 May 31 09:27 .
    drwxr-xr-x   18 hostnam  hostnam      4096 May 30 10:26 ..
    drwxr-xr-x    3 99       99           4096 May 29 12:16 ..odnotonni1
    drwxr-xr-x    3 99       99           4096 May 29 14:43 1111
    drwxr-xr-x    3 99       99           4096 May 30 09:54 odnoton
    drwxr-xr-x    3 99       99           4096 May 29 12:25 odnotonni
    drwxrwxrwx    3 hostnam  hostnam      4096 May 29 15:16 odton
    drwxr-xr-x    3 99       99           4096 May 29 12:26 ondnotonni


Папка odton была создана через фтп. С ней все нормально.
Но другие папки были созданы через php команду. К эитм папкам созданым програмным путем из скриптов есть доступ (то есть я могу сохранять и удалять внутри их файлы).
К тем же папкам нет доступа по фтп. То есть я не могу изменять их параметры (доступ на запись и т.д.). И самое главное: Я не могу из фтп сохранить в них файлы. Не могу также по фтп удалить эти папки и удалить файлы из них.

Автор: seelts 31.05.08, 09:19
Давно не общался с никсами, но что-то ещё помню...

rwxr-xr-x
владелец может всё, остальные только читать и исполнять
...
владельцы у odton'а и остальных папок - разные пользователи, потому что пхп и фтп сервера (или правильнее сказать "демоны"? поправьте плиз) запускаются от разных пользователей... отсюда и все неурядицы...
....
вобщето в баг репорт имхо неверно писать это... где здесь ПХПшный баг?

Автор: Pr0[)!9Y 31.05.08, 14:22
lyubchick, бывает такое. Не разбирался с чем это связано, но указание прав при создании у меня что-то тоже не всегда работает. Вообщем так:
1) попробуй chmod
2) umask(0000);

Добавлено
А тема действительно должна быть отдельной, по крайней мере до выяснения.

Автор: Axis 03.06.08, 03:17
В данном случае просто фтп сервер сохраняет файлы от одного пользователя, веб сервер от того под которым запущен, вот они и ставят влядельцев так. Высталяй права, а так как группы разные, то надо выставлять полные права, что совсем не безопасно, можно использовать chown для смены владельца. Но это может сделать только владелец или рут.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)