CMS Eleanor - Поиск
Полная версия этой страницы: Официальный форум Eleanor CMS » Uploader и безопасность
Официальный форум Eleanor CMS » Поддержка пользователей системы Eleanor CMS » Использование системы
Страницы: 1, 2
Easy-Web
Пишу модуль. Надо дать возможность простым пользователям загружать файлы jpg и потом переименовывать их. Для злоумышленника полный простор для действий - достаточно дать какому нибудь скрипту расширение jpg, загрузить его и переименовать расширение. Закачанный скрипт получает полный контроль над системой.

Вопросы для обсуждения
1)Можно ли закрыть дыру не меняя class_uploader
2)Можно ли закрыть дыру изменяя class_uploader запретив менять расширение
3)Может ли косо настроенный Apach допускать исполнение скриптов с раширением jpg
Jon
Переименовывать токо админы могут, вроде бы как.
А еси злоумышленник получил доступ до админки - то всё, трындец. Можно обычный комментарий с шелл скриптом сделать.
Easy-Web
Цитата (Jon @ 2010-02-13, 4:32)
Переименовывать токо админы могут, вроде бы как.
А еси злоумышленник получил доступ до админки - то всё, трындец. Можно обычный комментарий с шелл скриптом сделать.

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

Сам себе так сказать помог. Воткнул так называемый "костыль", один из тех которые жизнь всем отравляют. Но мне это помогло.


Собственно изменил файл eleanor_uploader.js

строка 171

var newname=prompt(el_lang['enter_new_name'],file_name);


полностью заменяется на три строки:

var file_name_extension = file_name.slice(file_name.lastIndexOf('.'));
var file_name_tilte = file_name.slice(0,file_name.lastIndexOf('.'));
var newname=prompt(el_lang['enter_new_name'],file_name_tilte)+file_name_extension;


Теперь для переименования доступно только имя файла. Расширение остается неизменным.
Я не понимаю почему этого нельзя было сделать в релизе, ведь это, ё-маё, реальная дыра в движке. Стоит разрешить переименование и трындец сайту.
Плюньте мне в глаз если я неправ.
Alexander
Хороший вопрос :)

Посмотрите на свойства класса Uploader, там Вы найдете свойство allower_types. Это массив, в который можно забить все доступные типы. Это ответ на первый вопрос.
Вы можете закачать любой файл, даже PHP типа - он не будет выполнен при обращении к нему, система предложит его скачать. Можете проверить. Сейчас я обновил архив, в котором нельзя меня тип файла при переименовании, если тип не входит в allowed_types. Это ответ на второй вопрос.
Ответом на третий вопрос буде "см. выше".

То, что Вы изменили JS файл - ничего не даст хорошему взломищику. Поверьте.
Easy-Web
Ну теперь то конечно хорошо что нельзя будет устанавливать неразрешенные расширения. Это тоже выход из положения. Но всетаки давать возможность юзеру менять расширения как перчатки не есть хорошо. Некоторые могут просто машинально удалять расширения (есть такие люди особенно привыкшие переименовывать файлы в Проводнике MS Windows) И тогда даже надписи насчет админа который придет и разберется не появится, а картинка отображаться перестанет.

Да, теперь дырка исчезла, но насчет "система предложит его скачать" могу сказать что у меня очень даже успешно запускается php скрипт, предварительно переименованный в jpg, загруженный и переименованный обратно.
Я всего лишь шелкаю по первой кнопке уплоадера (на которой висит tooltip) и офигенно все запускается. Может быть .htaccess в корне и запрещает что-то скачивать напрямую, но через эту кнопочку скрипт запускается.
Alexander
Zzzhan, именно запускается? Т.е. выполняется?
Easy-Web
Цитата (Alexander @ 2010-02-13, 19:30)
Zzzhan, именно запускается? Т.е. выполняется?


Именно выполняется, я не стал этим скриптом что-то рушить, просто посчитал хэш от какой-то строки функцией md5. После нажатия на кнопку uploadera открылось отдельное окно браузера, так же как оно открывается для отображения фоток, но на экране был результат выполнения функции md5. Именно результат а не содержание php-скрипта. Я считаю это достаточным.

В качестве веб сервера использовалась Linux-машина в моей локалке на которой я настроил джентельменский набор - Apache+MySQL+PHP. Поэтому я и задал вопрос о том что хостинг может быть достаточно кривым и сам в себе иметь дыры. Но мне кажется, что если эта дыра имело место в моем случае, значит может иметь и в других.

Со своей стороны я уже принял меры, но реально переживаю за других пользователей Eleanor.
Alexander
Zzzhan, на сервере установлен mod_rewrite?
Easy-Web
Цитата (Alexander @ 2010-02-14, 2:58)
Zzzhan, на сервере установлен mod_rewrite?


Конечно же да, и в .httpaccess я ничего не заслэшивал
Alexander
Zzzhan, тогда это очень странно. Потому что, следуя логике .htaccess любой запрос файла из папки uploads должен перенаправится на файл download.php
Easy-Web
Цитата (Alexander @ 2010-02-14, 5:33)
Zzzhan, тогда это очень странно. Потому что, следуя логике .htaccess любой запрос файла из папки uploads должен перенаправится на файл download.php


А вы сами пробовали делать это именно через uploader? скорее всего он как-то обходит httpaccess
Я буду продолжать эксперементировать и выкладывать сюда результаты теста.

Может быть в каждой подпапке, где находятся рисунки, необходимо класть httpaccess с нужными опциями? Но тогда это будет геморой, поскольку у меня их будет возможно несколько тысяч
Alexander
Да. Пробовал. Пока проблемм на наблюдалось.
Youshi
./uploads/.htaccess:

<FilesMatch ".(php|phtml|inc|c|htm|html|pl|cgi|shtm)$">
		Order Allow,Deny
		Deny from all
</FilesMatch>
Easy-Web
Разве этот запрет будет работать во вложенных папках?
Youshi
Да, будет.
Alexander
Youshi, а как ты с такими ограничениями будешь качать html файлы, например?
Youshi
Например вообще их оттуда качать не буду ;)

Не считаю правильным хранить в папке uploads хтмл и иже с ними (пакуйте в архивы и будет вам счастие). А кому надо - правило можно изменить. Ничего сверхъестественного там нет.
Easy-Web
Цитата (Youshi @ 2010-02-16, 12:48)
Например вообще их оттуда качать не буду ;)

Не считаю правильным хранить в папке uploads хтмл и иже с ними (пакуйте в архивы и будет вам счастие). А кому надо - правило можно изменить. Ничего сверхъестественного там нет.


Это правильно конечно.

А вот сработает ли это правило, если я например захочу не скопировать туда php-скрипт, а переименовать в *.php закачанный ранее скрипт с расширением *.jpg ?
Youshi
Переименовывайте хоть до посинения. Как только файл будет переименован, юзер потеряет к нему доступ по http.

ЗЫ

2 Sunvas

На будущее ;)
Мона со временем сделать проверку закачиваемых файлов по сигнатурам. Не бог весть какая супер защита, но от быдлохакеров отгородиться вполне себе может помочь.
Alexander
Цитата (Youshi @ 2010-02-16, 10:43)
Мона со временем сделать проверку закачиваемых файлов по сигнатурам.

Имеешь ввиду при закачке JPG файла проверять "внутренности" файла и определять реально ли это JPG? - можно. Пример есть какой-нибудь? Только что делать с текстовыми файлами, с файлами неизвестных типов и т.п.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.