Итак исходные данные: есть $filename -- получаемая от пользователя и вообще никак не обрабатываемая переменная, $path -- то, что выдается пользователю
Получается $path из $filename вот так: $path = '../'.$filename.'.zip';
Все уповают на то что дописывается .zip и проблемы секурности это решает, мол можем получить только .zip архивы. Я так не считаю, но и доказать обратное не могу. Буду рад если кто-то подкинет идею.
P.S. то что ../ можем хоть сколько раз вводить и прыгать по всему серверу - этого не достаточно, нужно чтоб как-то можно было файлы с другим расширением качать.
Спустя 39 минут, 12 секунд (8.06.2012 - 16:29) neadekvat написал(а):
Давай с другого конца - что ты предлагаешь?
Спустя 2 часа, 16 минут, 45 секунд (8.06.2012 - 18:45) Nightwalker_nsk написал(а):
Этот .zip смотрится как беспомощный костыль, который не внушает доверия и я хочу доказать что так делать нельзя. Хочешь качать только архивы - проверяй хотя бы еще и тип файла который отдаешь + слэши в имени. Потому что, насмотревшись на хаки в Си, где можно манипулируя \0 резать строки как угодно, приписывание расширения не смотрится как секьюрити фича. Еще раз: кроме .zip нет вообще никаких преград на даунлоад любого файла.
Спустя 39 минут, 51 секунда (8.06.2012 - 19:25) neadekvat написал(а):
Цитата (Nightwalker_nsk @ 8.06.2012 - 19:45) |
я хочу доказать что так делать нельзя. |
Ты автор статей или преподаватель?
Если нет, то, знаешь, не парься. Некоторым кодерам хоть кол на голове теши. Есть правило - обрабатывать все данные, которые приходят от пользователя. И не важно, можно сломать или нельзя. Вот тебе пример: хер его знает, какой тут спец-символ надо поставить, чтобы можно было скачать любой файл. Но это для нас. А у кого-то хер знает, и он сделает это. Не здесь - так в другом месте скрипта.
Тут ведь какой принцип действует: если человек привык обрабатывать входные данные, то он будет делать это всегда. А если он еще рассуждает: делать это в данном случаи или нет - то хотя бы один раз он примет неправильное решение.
Другое дело, что надо с умом подходить к фильтрации данных и выбирать подходящие для данного случая инструменты и решения.
Спустя 2 минуты, 2 секунды (8.06.2012 - 19:27) Guest написал(а):
Нет я девелопер который рефакторит старый код и будет очень круто если я найду дыру, которой можно скачать весь проект:) дыру которой можно слить всю базу уже нашел, остались исходники:)
Спустя 2 минуты, 29 секунд (8.06.2012 - 19:30) neadekvat написал(а):
Цитата (Guest @ 8.06.2012 - 20:27) |
будет очень круто если я найду дыру, которой можно скачать весь проект |
Ломать сайт при условии, что у тебя уже есть все его исходники - это же неинтересно.
Спустя 1 минута, 57 секунд (8.06.2012 - 19:32) Nightwalker_nsk написал(а):
Сори, верхний пост мой, не заметил что тут можно постить гостям. А по теме - пхп развращает своей простотой и вседозволенностью и отсюда получается огромное количество секьюрити багов, для меня вопрос принципа всегда сохранять стройность кода и не допускать таких вещей. И просто завязался спор - гуд такая "защита" или нет, вот и спросил совета у комьюнити может кто сталкивался с хаком подобных мест.
Спустя 4 минуты, 26 секунд (8.06.2012 - 19:36) neadekvat написал(а):
Цитата (Nightwalker_nsk @ 8.06.2012 - 20:32) |
И просто завязался спор - гуд такая "защита" или нет, вот и спросил совета у комьюнити может кто сталкивался с хаком подобных мест. |
Не гуд.
Пример: так уж случилось, что часто в корне или на уровень выше хранят дампы базы или исходники одним архивом. И если дамп обычно держится в .tar.gz, то архив исходников - именно в zip.
Таким образом, при некотором умении, наличии времени, терпения и большого желания, можно выловить эти файлы (особенно учитывая, сколько архивов я видел с именем www.zip).
Спустя 3 минуты, 22 секунды (8.06.2012 - 19:39) Nightwalker_nsk написал(а):
Никто не хранит архивы с исходниками в www директории, а если и хранит то это его проблемы, так же никто не дает процессу сервера пермишн на директории выше www, ну а если дает то это тоже его проблемы, речь не об этом, это не тот случай. Т.ч. по сути дыры никакой нет если ничего нельзя сделать с расширением или как-то отсечь его.
Спустя 3 минуты, 11 секунд (8.06.2012 - 19:43) neadekvat написал(а):
Цитата (Nightwalker_nsk @ 8.06.2012 - 20:39) |
а если и хранит то это его проблемы |
Криворукие админы и программисты - это все та же проблема, нэ?
Цитата (Nightwalker_nsk @ 8.06.2012 - 20:39) |
так же никто не дает процессу сервера пермишн на директории выше www |
А нафига там какие-то разрешения (да, по-русски это звучит именно так)? Мы же не собираемся файл исполнять. Мы его тупо оттуда тащим, вот и все.
Спустя 6 минут, 59 секунд (8.06.2012 - 19:50) Nightwalker_nsk написал(а):
Если вы fopen'ом попытаетесь открыть файл который за пределами www на нормальном хостинге то получите Could't read file ибо прав на чтение у вас естественно за пределами корневой директории не будет. Это аксиоматика.
Спустя 8 минут, 50 секунд (8.06.2012 - 19:58) neadekvat написал(а):
Зачем мне fopen? readfile прекрасно справится.
За пределами www-каталога запрещается выполнение скриптов. Но я могу вынести туда скрипты, подключать их include'ом и они будут вполне себе рабочими. Никогда не встречал совет выносить важные скрипты (например, ядро фреймворка) за пределы корнивого каталога?
За пределами www-каталога запрещается выполнение скриптов. Но я могу вынести туда скрипты, подключать их include'ом и они будут вполне себе рабочими. Никогда не встречал совет выносить важные скрипты (например, ядро фреймворка) за пределы корнивого каталога?
Спустя 28 минут, 27 секунд (8.06.2012 - 20:27) AlmazDelDiablo написал(а):
Если не ошибаюсь, то с помощью .htaccess решается то, какие файлы можно отдавать на скачивание (могу ошибаться). Плюс все каталоги, в которых лежат системные файлы, через тот же .htaccess закрываются от доступа из-вне. Так что если разработчик хоть чуть-чуть понимает, что он делает, то «гулять» по директориям не получится.
Спустя 10 часов, 54 минуты, 5 секунд (9.06.2012 - 07:21) Nightwalker_nsk написал(а):
Кому интересно - добавление нулевого байта %00 в конец $filename при magic_quotes_gpc = off отсечет расширение архива, даже в самой последней версии php, проверено. Спасибо за внимание.
Спустя 7 часов, 36 минут, 58 секунд (9.06.2012 - 14:58) neadekvat написал(а):
Цитата (Nightwalker_nsk @ 9.06.2012 - 08:21) |
Кому интересно - добавление нулевого байта %00 в конец $filename при magic_quotes_gpc = off отсечет расширение архива, даже в самой последней версии php, проверено. Спасибо за внимание. |
Эм.. а у меня не работает. Продемонстрируй испольование, можт я не так пробую.