Fire uploader — загружай файл, куда хочешь! — хитрые советы

Загрузка файлов на wordpress – осваиваем хитрости, решаем проблемы

fire uploader — загружай файл, куда хочешь! - хитрые советы

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

Зачем нужно грузить фото на wordpress? Часто загрузка файлов на wordpress необходима для иллюстрации статей, особенно актуально это для туристических сайтов, к примеру.

В категорию wordpress uploads загружаются не только фотографии, но также текстовые документы, zip-архивы с книгами, обучающими курсами, документами и т.д.

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

Момент первый.

Собственно, загрузка файлов на wordpress.

Для того, чтобы загрузить в wordpress фото или файл, необходимо зайти в панель администратора wordpress, в левом меню найти «Медиафайлы», и нажать кнопку «Добавить новый», после чего откроется поле загрузки медиафайла.

В данном меню файлы можно загружать с компьютера. После загрузки файла мы можете получить адрес ссылки на этот файл, нажав в меню «Библиотека файлов» на кнопку «изменить».

Фото на wordpress можно грузить способом, описанным выше, либо непосредственно из текста записи, которую вы делаете. Для этого в поле редактирования записи нажимаете в верхнем поле (маленькие горизонтальные кнопки) на самую первую, где изображен символ экрана. Далее технология загрузки та же.

Момент второй.

Вы загрузили файл, но результат вашего труда вас огорчил. Как исправить? Заходим в поле редактирования записи, находим злополучное wordpress фото и щелкаем на нем левой кнопкой мышки.

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

Нажимаем на горы и видим поле для редактирования, где можно поменять параметры wordpress фото: название, размеры файла (обратите внимание на кнопку «дополнительно»), можно поставить галочку напротив поля «открывать в отдельном окне», можно прописывать к картинке путь ссылки или наоборот удалять.

Момент третий.

Вы жаждете загрузки файла на wordpress, а вместо этого видите сообщение в рамочке чахоточно-желтого цвета: «ошибка при загрузке файла», или wordpress и вовсе начал выдавать ругательства на языке php. Причем этот момент может подстерегать не только неоперившихся вебмастеров, только создавших свой блог, но и зубастых акул, уже потаскавших свои сайты по разным хостингам.

В чем дело – недоумеваете вы. Не спешите расквасить нос своему монитору. Проблема решается довольно просто.

Во-первых, через ftp-клиент зайдите на сервер с папками wordpress, найдите папку wp-content, далее папку uploads и посмотрите права доступа к папке wordpress uploads.

Именно в эту заветную папочку и складывает фото ваш добрый друг wordpress. Если стоит 644 или что-то еще, поменяйте сначала на 755, а потом проверьте – будет ли работать.

Если нет, то спишитесь с хостером и узнайте, какие должны быть права доступа (CMOD value) у папки wordpress uploads.

Многие советуют сразу устанавливать доступ 777 к папке wordpress uploads, но я все же советую узнать у хостера сначала, вдруг 755 хватит. Это зависит от сервера хостера.

Просто права 777 – это практически абсолютная анархия, позволяющая не только вам но и всем страждущим читать, смотреть и осуществлять действия с папкой wordpress uploads. 755 разрешает осуществлять эти манипуляции только вам.

Но если хостер скажет вам, что серверные возможности требуют установки 777 на папку uploads, тогда обязательно ставьте. После чего все должно заработать. Если нет – читайте дальше.

Одно предостережение: во избежания копания странствующих хакеров в вашей папке wp-content (там еще плагины и т.д. знаете ли), ни в коем случае не устанавливайте 777 на всю папку wp-content. Только на uploads.

Момент четвертый.

Вконец измученные хостером, у которого ваш сайт мог потянуть только 10 уников, да и то ночью, вы нашли нового. И даже перевезли на новый хостинг свой сайт! Но вот загрузка файлов wordpress «не пошла» почему-то. Вместо wordpress фото вы видите все тот же бред, что и выше.

Что делать? Проделайте все то же самое, что описано выше. Если не помогло, то делаете следующее: в админке меню в самом низу находите вкладку «параметры» и далее «медиафайлы». У вас откроется страница http://www.вашсайт.ru/wp-admin/options-media.php.

Посмотрите, что написано в поле «Сохранять файлы в этой папке». По умолчанию стоит директория wp-content/uploads, то есть, если у вас в строчке «Сохранять файлы в этой папке» – пусто, это хорошо – значит, файлы сохраняются в нужную папку.

А вот если у вас написаны какие-то данные от старого хостера, немедленно сотрите.

Если вы по непонятной причине сохраняете свои wordpress фото в другой папке, пропишите ее путь в указанной строчке. Желательно правильно. Обратите внимание – ссылка относительная, то есть, имя вашего домена уже подразумевается. Нужно указать только путь к папке. Если напишете вашсайт.

ru/wp-content/имяпапки, то ссылка на ваши файлы будет выглядеть как http://вашсайт.ru/вашсайт.ru/wp-content/имяпапки/название файла. Поэтому лучше не мудрите и оставьте поле «Сохранять файлы в этой папке» пустым, тогда система сама положит файл в директорию wp-content/uploads.

Но не забудьте прописать нужные права у папки, как показано выше.

Оставляем галочку у поля «Помещать загруженные мной файлы в папки по месяцу и году».

Внимание! Если права на папку wordpress uploads проставляются 777, то нужно  заглянуть внутрь нее и проставить 777 у подпапок тоже. Не слушайте тех, кто говорит, что это не нужно.

Если на дворе январь 2011 года, а в папке 2011 стоят права 644 или 755, а должны быть 777, то у вас все равно ничего грузиться не будет. А вот в феврале будет. Потому что система создаст новую папку и присвоит 777, как и в родительской папке wordpress uploads.

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

Момент пятый.

Момент пятый – из разряда курьезов вебмастера. Вы не перевозили сайт на новый хостинг, но ваш хостер, модернизируя хостинг, перевез ваш сайт на новые сервера (с новыми NS адресами), и теперь у вас вдруг перестали загружаться файлы в wordpress.

И вроде бы права у папок правильные, и путь к загрузке файлов прописан верно, но не загружается и все!!! Вы идете в интернет и видите хитроумные рекомендации программеров по изменению чего-то там в папке .htaccess или в php коде еще каких-то папок. Стоп! Не вздумайте этого делать.

Иначе можете испортить весь ваш сайт.

Все решается куда проще. При переносе сайта на новый сервер….адрес ftp сервера тоже меняется! А в вашем ftp клиенте IP-адрес оставлен старым. И вот вы радостно грузите свои wordpress фото на старый сервер. А сайтег-то уже на новом. Не торопитесь смеяться  – на этот крючок попадались многие опытные вебмастера.

Момент шестой.

Кадр из фильма «Челюсти». Вы обновили wordpress или скачали какой-то плагин, а плагин написал ваш сосед – первокурсник технического вуза. Короче, ваши картинки резко перестали загружаться, и вышеописанные действия не помогают. Виноваты в этом вы сами, потому что не сделали бэкап, как советовал вам ваш друг wordpress.

Поэтому откатить сайт назад к предыдущей версии вы не можете. С плагином проще – удалите его к чертовой матери и все, после этого загрузка файлов в wordpress возможно, заработает. Но если ничего не помогает – напишите хостеру, возможно он сможет помочь вам.

К счастью последний момент происходит довольно редко, остается надеяться на то, что с вами этого не приключится.

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

На главную В каталог статей

Источник: https://www.knigopad.ru/?page_id=2203

Эксплуатация уязвимостей в функциях для работы с файлами в PHP — «Хакер»

Тогда скрипт

include («./LightningTemplate.php»);
$lt = new LightningTemplate('./sample.html');
$lt->title = 'My Title';
echo $lt;

сгенерит следующую HTML-страницу:

Пример использования класса Lightning Template

Таким образом, упомянутый класс по заданным шаблонам генерит соответствующий HTML-код. Хотелось бы сразу отметить, что подключение темплейтов в этом классе происходит через уже знакомую тебе конструкцию include, однако это не самое лучшее решение.

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

Самописный фильтр, идущий вместе с классом, как раз и делает всю основную работу по преобразованию HTML-кода. Внесем небольшие изменения в этот фильтр:

public function filter($in, $out, &$consumed, $closing) {
while ($bucket = stream_bucket_make_writeable($in)) {
$patterns = array(

'/{%s+ifs+(.+?)s+%}/e',

);
$replacements = array(

«''»,

);
$bucket->data = preg_replace($patterns,
$replacements, $bucket->data);

В строке, начинающейся с «'
——————————2421143106617—

Как несложно догадаться, при заполнении формы мы выбрали файл hello.txt, который содержит «».

Когда PHP-скрипт на удаленном сервере получает этот запрос, интерпретатор PHP создает на сервере временный файл с именем типа phpseUm44, в который и попадает содержимое hello.txt.

Этот временный файл хранится до завершения работы скрипта, а потом автоматически удаляется (подробнее о временных файлах в PHP читай в предыдущем номере нашего журнала). Также создается массив $_FILES следующего вида:

Array ( [uploadfile] => Array ( [name] => hello.txt [type] => text/plain [tmp_name] => /tmp/phpseUm44 [error] => 0 [size] => 33 )
)

Тут важно понимать, что $_FILES[uploadfile][type] совпадает с элементом Content-Type, который формируется на стороне клиента. Обычно браузер автоматически заполняет этот элемент в зависимости от выбранного файла, поэтому некоторые веб-мастера, наивно надеясь обезопасить себя от загрузки зловредных PHP-скриптов, проводят только вот такую простенькую проверку:

$_FILES[«file»][«type»] == «image/gif»

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

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

Например, в зависимости от настроек веб-сервера файл pic.php.myext вполне может быть обработан как PHP-скрипт. Таким образом, безопасный аплоад файлов — это не только проверки в скриптах, но и грамотно решенный вопрос о местонахождении и обработке загруженных файлов.

Читайте также:  Шпаргалка: горячие клавиши для mac и windows - хитрые советы

При этом также не стоит забывать и об особенностях самого PHP, связанных с массивом $_FILES.

Первая уязвимость, о которой я бы хотел рассказать, — это недостаточная обработка имени файла при его загрузке. Эта уязвимость помечена на сайте bugs.php.net как приватная, тем не менее если постараться, все-таки можно найти ее описание.

Источник: https://xakep.ru/2012/10/01/php-vulnerabilities/

Небезопасная выгрузка файлов на веб-сайты: эксплуатация и обход фильтров — HackWare.ru

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

Перечислим некоторые варианты атаки на сайты, позволяющие выгружать на них файлы:

  • загрузка вредоносного кода
  • загрузка файлов слишком большого размера для переполнения хранилища сервера
  • внедрение в имя файла тэга для XSS
  • загрузка вредоносных файлов, которые не исполняются на сервере, а предназначаются для других пользователей (или для снижения позиций в поисковой выдаче – думаю, вы видели эти страшные предупреждения поисковых машин, если в результатах выдачи присутствовал сайт с вредоносными файлами)

Возможны ещё более экзотические варианты, связанные с атакой на веб-приложения, которые обрабатывают полученные картинки.

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

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

Как узнать, какую фильтрацию использует тот или иной сайт?

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

Это называется тестирование по принципу чёрного ящика: мы не знаем, что там внутри и как оно работает, но мы можем что-то подать на вход и получить на выходе результат, именно анализ выхода (результата) и даёт нам знания о работе веб-сайта и применяемых в нём защит.

1. Отсутствие какой-либо проверки выгружаемых данных

Это самый простой вариант, такое можно встретить только на самодельных сайтах начинающих программистов на PHP.

Алгоритм здесь следующий:

  1. Определяем, какой адрес получают файлы, выгруженные на сайт.
  2. Создаём бэкдор.
  3. Выгружаем его на уязвимый сайт.
  4. Подключаемся к бэкдору.

В качестве «полигона» для тестирования я воспользуюсь Damn Vulnerable Web Application (DVWA).

Я не буду пытаться установить этот набор уязвимых программ в Kali Linux (на данный момент присутствуют некоторые проблемы с установкой в современные системы, т.к.

DVWA требует именно PHP 5, а в современных дистрибутивах Linux по умолчанию используется PHP 7). Я воспользуюсь Web Security Dojo, где DVWA уже установлен и прекрасно работает.

В Web Security Dojo откройте браузер и перейдите по ссылке http://localhost/dvwa/index.php

Перейдите во вкладку DVWA Security и измените уровень безопасности на low, сохраните изменения.

Перейдите во вкладку Upload:

Чтобы узнать, по какому адресу доступны выгружаемые файлы, давайте загрузим любой файл (обычную картинку) и посмотрим, куда они сохраняются.

Сама картинка не выводится, нам сразу показывают её расопложение:

../../hackable/uploads/1.jpg succesfully uploaded!

Две точки означают переход на один уровень вверх от показываемой страницы, т.к.

мы сейчас находимся в http://localhost/dvwa/vulnerabilities/upload/#, то нам нужно подняться два раза на один уровень вверх, это получается http://localhost/dvwa/ и уже из этого каталога адрес нашего файла hackable/uploads/1.jpg, т.е. полный адрес получается таким:

http://localhost/dvwa/hackable/uploads/1.jpg

Давайте проверим, открыв этот адрес в строке браузера:

Да, всё так.

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

На каждой уязвимой странице DVWA есть кнопка View Source, которая позволяет увидеть уязвимый исходный код:

Как видим, какая-либо проверка отсутствует совершенно. Т.е. переходим к созданию бэкдора и его выгрузке на сервер.

Создание бэкдора для выгрузки на веб-сайт

Для этого можно использовать Weevely, PhpSploit, другую программу или вообще написать бэкдор самому.

Я по старой привычке буду использовать Weevely. В Web Security Dojo отсутствуют и Weevely, и PhpSploit, поэтому я начну с установки Weevely:

sudo apt-get update sudo apt-get install g++ python-pip libyaml-dev python-dev sudo pip install prettytable Mako PyYAML python-dateutil PySocks —upgrade git clone https://github.com/epinna/weevely3.git cd weevely3/ python2 ./weevely.py

Для создания бэкдора с именем index2.php, защищённого паролем hackware, я использую следующую команду:

python2 ./weevely.py generate hackware ~/index2.php

Отлично, бэкдор создан и размещён по в файле /home/dojo/index2.php.

Наконец-то, выгружаем этот файл на сервер:

Файл успешно выгружен и теперь должен быть доступен по адресу http://localhost/dvwa/hackable/uploads/index2.php

Подключаемся к нашему бэкдору так:

python2 ./weevely.py http://localhost/dvwa/hackable/uploads/index2.php hackware

Бэкдор на связи и он работает!

2. Обход фильтрации Content-Type

Опять перейдите на страницу DVWA Security и выберите там medium (средний) уровень безопасности. Возвращаемся в File Upload, и опять пробуем выгрузить наш бэкдор:

Т.е. мы получили «Your image was not uploaded.».

Хмммм… Давайте заглянем в исходный код:

Строки, которые не позволили нам выгрузить бэкдор:

$uploaded_type = $_FILES['uploaded']['type']; $uploaded_type == «image/jpeg»

Т.е. на стороне сервера проверяется, файл какого типа загружен. Принимаются файлы только image/jpeg. Что можно сделать в этой ситуации?

Нужно подумать, а ОТКУДА скрипт на сервере получает информацию о типе присланного файла? А получает он его (в данном случае) от… нашего веб-браузера, из тела запроса Content-Type.

А всё, что приходит от пользователя, может быть поддельным и модифицированным любым образом!

Есть разные способы реализации изменения передаваемых данных, я покажу на примере Burp Suite.

Настройка прокси в Burp Suite для модификации передаваемых данных

В Web Security Dojo уже имеется Burp Suite – можете воспользоваться им. Если вы хотите самую последнюю версию Burp Suite, то скачайте её с официального сайта по .

Алгоритм действия:

  1. Мы настроем прокси сервер в Burp Suite.
  2. Нашему браузеру мы укажем использовать прокси сервер для связи с сайтами.
  3. В Burp Suite мы настроем правило для замены на лету нужных нам отправляемых данных.

Запустите Burp Suite, это можно сделать из меню, либо, если вы скачали свежую версию, так:

java -jar ./Downloads/burpsuite_free_*.jar

Переходим во вкладку Proxy -> Options. Там в самом верху в Proxy Listeners нажимаем Add и добавляем новый прослушиватель: на любом не занятом порту, например, 7070. В качестве Specific Address выберите IP компьютера атакующего (т.е. той машины, где запущен Burp).

Здесь же перейдите во вкладку Request handling и поставьте галочку на Support invisible proxying (enable only if needed):

Когда добавите новый прослушиватель, поставьте галочку там, где Running (это будет означать, что он задействован в данное время):

Теперь спуститесь в самый низ, найдите Allow requests to web interface using fully-qualifyed DNS hostnames и поставьте там галочку:

Теперь перейдите в Proxy -> Intercept, отключите его:

Теперь в браузере открываете Настройки -> Advanced -> Network -> Connections Settings:

Там выберите Manual Proxy Configuration и в полях HTTP Proxy введите IP и порт прокси в Burp Suite.

Обновим страницу http://localhost/dvwa/vulnerabilities/upload/ и убедимся, что связь действительно осуществляется через прокси:

Давайте выгрузим на сервер самую обычную картинку. Она успешно загружено, а мы переходим в Burp Suite для анализа данных:

Очень внимательно смотрим на строку:

Content-Type: image/jpeg

Теперь давайте попробуем выгрузить наш бэкдор. Я переименовал свой файл в index3.php, просто чтобы не путаться с предыдущим примером. Итак, пробуем его выгрузить, получаем ошибку, возвращаемся в Burp Suite для анализа данных:

Ещё внимательнее смотрим на строку:

Content-Type: application/x-php

Думаю, теперь всем понятно, что мы будем отправлять файл index3.

php, но будем заменять строку Content-Type: application/x-php на строку Content-Type: image/jpeg. Т.е.

сервер получит наш вредоносный файл, и получит строку Content-Type: image/jpeg. Тип image/jpeg разрешён в скрипте для сохранения на сервер, поэтому сервер сохранит его.

В Burp переходим в Proxy -> Options. Находим там Match and Replace. Нажимаем Add для добавления нового правила:

Переключаемся с Request header на Request body.

В поле Match вводим Content-Type: application/x-php, в поле Replace вводим строку Content-Type: image/jpeg:

Сохраняем, проверьте, чтобы стояла галочка на Enabled:

Теперь возвращаемся к DVWA и пытаемся выгрузить файл с бэкдором index3.php:

Получаем:

Т.е. «../../hackable/uploads/index3.php succesfully uploaded!».

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

Подключимся к новому бэкдору:

cd weevely3/ python2 ./weevely.py http://localhost/dvwa/hackable/uploads/index3.php hackware

Отлично, мы внутри:

3. Эксплуатация XSS уязвимости при выгрузке изображений

Перейдите во вкладку DVWA Security и измените уровень безопасности на high, сохраните изменения.

Пара слов об уровне high в DVWA. Разработчики утверждают, что на «этом уровне приложение является неуязвимым, а исходный код веб-приложениях на уровне high является примером безопасных практик программирования».

Читайте также:  Восстанавливаем мышцы после тренировки: 4 естественных способа - хитрые советы

Это не так, на уровне high такой же говнокод как и на других уровнях и учиться нужно не по нему. Если вы «обложились» защитами от одной из угроз, а о других угрозах забыли, то это не делает ваш код намного безопаснее. [Начиная с DVWA v1.9.

введён уровень «невозможный», который теперь безопасен ко всем уязвимостям, а уровень «высокий» теперь назван «расширением среднего уровня».]

Если сервер никак не проверяет или не изменяет имя файла, то в имя файла можно добавить тэг. При открытии этого файла (картинки) браузер интерпретирует его именно как тэг!

Создайте файл примерно с таким названием:

«>.jpg

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

И вот что мы получаем:

4. Обход фильтрации по имени файла

Здесь возможны самые разные варианты, которые связаны с неудачной фильтрацией, приведём только некоторые общие случаи:

  • фильтрация на основе наличия в файле строки расширения. Например, на сервере разрешены изображения и скрипт для проверки полученного файла ищет в нём строку .jpg. Это неправильный подход, поскольку shell.jpg.php пройдёт такую проверку как разрешённый для сохранения. Нужно делать проверку именно по расширению присланного файла.
  • фильтрация на основе чёрного списка. В этой ситуации фильтры могут не знать о некоторых расширениях, которые также могут выполнятся на сервере, например, .phtml, .php3/.php4/.php5, .jsp, shell.jpg.PhP (обфускация). Кроме того, использование чёрного списка, если в нём отсутствует фильтр файла .htaccess могут привести к реализации следующей схемы:

загружается файл .htaccess примерно следующего содержания:

AddType application/x-httpd-php .mp3

После этого все (как в этом примере) файлы .mp3 начинаются обрабатываться PHP интерпретатором. Т.е. может быть загружен файл с разрешённым расширением .mp3, но в этом файле будет PHP код, который на сервере будет обрабатываться именно как PHP.

Это неполный список, существуют ещё варианты обхода проверки расширения, в том числе довольно экзотические.

5. Запись файла в любую директорию файловой системы.

В DVWA даже на низком уровне безопасности применяется PHP функция basename. И это правильно! Поскольку если бы её не было, то заменяя на лету передаваемое имя файла, например, с 1.jpg на ../../dvwa/images/logo.png мы могли бы заменить логотип сайта.

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

Есть неплохие способы проверить, является ли загружаемый файл изображением или нет.

Если программист, слишком надейсь на такую проверку, не фильтрует файлы с расширениями PHP (либо сработала методика обхода проверки), то возможно загрузить настоящее изображение, которое будет проходить тест на картинку, но в которое в качестве метаинформации внедрён PHP код. Когда такое изображение запрашивается с сервера, то добавленный в него PHP код будет исполнятся на сервере.

7. Проверка безопасности файла на стороне клиента

Это самое наивное, что может придумать веб-разработчик. Ни в коем случае нельзя полагаться на какую-либо валидацию с помощью JavaScript, HTML5 и т.д.

Проверка на стороне клиента = отсутствию проверки вообще.

8. Отсутствие проверки размера выгружаемого на сервер файла

Если такая проверка отсутствует, то недоброжелатели с автоматизированными скриптами выгрузки буквально за считанные часы/дни займут всё выделенное под директорию выгрузки место, а если размер этой директории не ограничен, то и на всём сервере…

9. Загрузка вредоносных файлов, не предназначенных для выполнения на сервере

Примерами таких файлов могут быть вирусы с расширением .exe. Они не страшны серверу на Linux, тем не менее, они предоставляются угрозу другим пользователям и могут привести к тому, что сервер (его IP, адрес домена) попадут в разнообразные чёрные списки.

Также сайты со зловредным содержимым исключаются из результатов поиска или писсимизируются поисковыми системами.

Т.е. такие файлы приносят вред не только сторонним лицам, но и вполне определённый, измеряемый вред серверу и веб-сайту.

Заключение

Итак, мы рассмотрели небезопасную выгрузку файлов на веб-сайты, данная уязвимость позволяет атакующему выгрузить вредоносные файлы на веб-сервер и провести некоторые другие атаки. Мы коснулись вопросов эксплуатации и обхода фильтров.

Тема не исчерпывается этим разделом. Существует больше методик обхода фильтров. Кроме того, при выгрузке бэкдора на сервер не всегда достаточно прав для получения полного контроля.

Возможны ситуации, когда нужно изменять файлы, которые администратор выполняет со своими привилегиями. Внесённые таким образом атакующим команды будут выполнены с недоступными для него привилегиями.

Также в рамках последующей эксплуатации возможно внедрение XSS на страницы сайта и расширение атаки на инфраструктуру с уязвимого сервера.

Связанные статьи:

Источник: https://HackWare.ru/?p=1304

Куда сохраняются файлы, скаченные из Интернета?

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

Естественно, пути сохранения файлов, которые мы качаем из сети, могут отличаться в зависимости от программы. Так, например, при закачке браузером используется один путь, а торрент-программами другой, менеджерами закачек, такими как Download Master – третьи. Но естественно все папки в этих программах для сохранения файлов можно переназначить, для своего удобства.

Итак, в этом уроке мы рассмотрим куда сохраняются файлы в самых популярных программах, и разберем, как изменить путь для закачки и сохранения по умолчанию. Одним словом, сделаем так, чтобы все файлы которые мы будем загружать из интернета помещались в одну папку, например, в «Загрузки» на диске (D:).

В общем, пойдем по следующей схеме: смотрим, куда сохраняется всё скачанное на данный момент и тут же изменяем эту папку, на ту, которая для нас более удобна.

Поехали!

Куда сохраняются файлы, скаченные из интернета?

Начнем с браузера Гугл Хром. Чтобы понять куда на данный момент он сохраняет файлы, нужно перейти в его настройки, нажав по соответствующей иконке в правом верхнем углу и выбрать пункт «Настройки».

Затем нам нужно нажать по ссылке « Показать дополнительные настройки ».

Потом опуститься чуть ниже и увидеть, что здесь есть параметр «Загрузки». Пункт «Расположение загружаемых файлов» указывает куда на данный момент сохраняются файлы, скаченные из интернета.

Нажав по кнопке «Изменить» мы можем выбрать другую папку, например, «Загрузки» на диске (D:), как и договорились.

Выполненные изменения вступили в силу и теперь всё скачанное из интернета будет сохраняться именно в эту папку.

Хочу обратить ваше внимание на пункт: « Запрашивать место для сохранения каждого файла перед загрузкой », установив галочку напротив которого, каждый раз нам придется выбирать папку в которую мы хотим закачать файл.

В браузере Mozilla Firefox схема похожа. Нам нужно перейти в настройки, нажав по соответствующим пунктам.

И сразу на первой вкладке «Основные» мы видим куда на данный момент сохранятся файлы. В данном случае это папка Загрузки для сохранения файлов в Windows по умолчанию. Она находится на системном диске.

Рекомендую через кнопку «Обзор» изменить этот путь. Или можно установить переключатель на пункт « Всегда выдавать запрос на сохранение файлов » и каждый раз при закачке файлов выбирать нужную вам папку, как и в случае с Гугл Хром.

Думаю, на браузерах мы пока что остановимся, и посмотрим куда сохраняются файлы в других программах, например, uTorrent которая используется для закачки файлов с торрент-трекеров.

Открыв программу мы можем выделить нужную нам закачку и нажать на клавиатуре кнопку «Enter» и папка в которую скачивается файл, или уже скачан тут же откроется. Это самый простой способ в uTorrent найти файл, который мы закачиваем.

А если пойти дальше и перейти в Настройки программы.

А затем перейти на вкладку «Папки», то можно выбрать удобные вам пути, как для сохранения скачанных файлов, так и для тех, которые ещё только загружаются.

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

Нужно открыть главное окно программы Download Master и перейти по пути «Инструменты – Настройки».

И на вкладке «Закачки» увидеть куда сохраняются все скачанные файлы, а при необходимости изменить этот путь воспользовавшись одноименной кнопкой.

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

Надеюсь теперь скаченные файлы из интернета не затеряются у вас на компьютере. И всё будет отлично. Удачи.

Источник

Источник: https://pomogaemkompu.temaretik.com/322657056405588470/kuda-sohranyayutsya-fajly-skachennye-iz-interneta/

Upload файлов. Возможности. Примеры. Настройка сервера

Что такое Upload files, или почему не работает
copy («c:imagessample.jpg», «http://mysite.ru/uploads/sample.jpg «)

Даже если у Вас в распоряжении всего один компьютер, на котором совмещен и сервер и рабочая станция, не стоит забывать о том, что php использует технологию клиент/сервер.

Файл, который мы хотим загрузить, как правило, находится на машине клиента, т.е. пользователя, обыкновенного посетителя сайта. Место назначения — сервер.

Для того чтобы совершить процесс передачи файла, нам понадобиться следующая форма: Send this file:

При этом в поле action должен быть указан URL Вашего php-скрипта, который в дальнейшем будет заниматься обработкой загружаемых файлов. Скрытое поле MAX_FILE_SIZE должно предшествовать полю выбора файла, и содержать максимально допустимый размер файла в байтах.

Его назначение — проверка размера файла еще до момента отправки файла на сервер.

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

Читайте также:  Как использовать телефон в качестве загрузочного диска для компьютера - хитрые советы

Что происходит, когда пользователь выбрал файл на своем диске, и нажал на кнопку «Send file»? Браузер отсылает файл на сервер, где php-интерпретатор помещает его в свою временную директорию, присваивая ему случайное имя и выполняет скрипт, указанный в поле action.

Как должен выглядеть upload.php?$uploaddir = '/var/www/uploads/';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir. $_FILES['userfile']['name'])) { print «File is valid, and was successfully uploaded.»;
} else { print «There some errors!»;
}

При написании скрипта, возникает естественный вопрос: как получить информацию о загруженном файле и достучаться до самого файла. Если Вы используете PHP версии 4.1.0 и старше, лучше всего будет обратиться к глобальному массиву $_FILES.

Для каждого загруженного файла он содержит хеш-массив, со следующими данными:

  • $_FILES['userfile']['name'] — оригинальное имя файла, такое, каким его видел пользователь, выбирая файл;
  • $_FILES['userfile']['type'] — mime/type файла, к примеру, может быть image/gif; это поле полезно сохранить, если Вы хотите предоставлять интерфейс для скачивания загруженных файлов;
  • $_FILES['userfile']['size'] — размер загруженного файла;
  • $_FILES['userfile']['tmp_name'] — полный путь к временному файлу на диске;
  • $_FILES['userfile']['error'] — Начиная с версии 4.2.0, содержит код ошибки, который равен 0, если операция прошла успешно.

Для PHP версии ниже 4.1.0 этот массив называется $HTTP_POST_FILES. Не стоит забывать, что в отличие от $_FILES этот массив не является суперглобальным и при обращении к нему, к примеру, из функции, необходимо явно указывать global $HTTP_POST_FILES;

Если в настройках Вашего сервера register_globals=on, будут созданы дополнительные переменные вида $userfile_name, $userfile_type, $userfile_size… Учитывая, что, начиная с версии 4.2.0, в настройках по умолчанию register_globals=off использования этих переменных не рекомендовано, даже если они определены. Лучший способ получения информации о загружаемых файлах — использовать массив $_FILES.

Для работы с загруженными файлами лучше всего использовать встроенные функции is_uploaded_file() и move_uploaded_file(), которые проверяют, был ли загружен файл, и помещают его в указанную папку соответственно. Более детальную информацию Вы можете найти на страницах руководства. Не стоит изобретать велосипед и работать самому с временными файлами, копировать их, удалять. Это уже сделано до Вас и для Вас.

Настройка сервера

Я все сделал правильно, но у меня что-то не работает. Может, у меня неправильно сконфигурирован сервер?

Если Вы «все сделали правильно», но Ваш код неработает, или работает неправильно, не спешите отчаиваться. Возможно проблема не в Ваших руках, а в неверных настройках сервера. Вот список директив, которые имеют отношения к загрузке файлов:

В файле php.ini:

  • Если Вы хотите узнать, где расположен Ваш php.ini, выполните
  • file_uploads — возможность запретить или разрешить загрузку файлов в целом. По умолчанию On.
  • upload_max_filesize — максимальный размер файла, который может быть загружен.

    Если Вам необходимо работать с большими файлами, измените эту настройку. По умолчанию 2М. Не забудьте изменить post_max_size.

  • post_max_size — общее ограничение сверху на размер данных, передаваемых в POST запросе.

    Если Вам необходимо работать с большими файлами, или передавать несколько файлов одновременно, измените эту настройку. Значение по умолчанию 8М.

  • upload_tmp_dir — временная директория на сервере, в которую будут помещаться все загружаемые файлы.

    Проверьте, какие на нее выставлены права(если на данном этапе у Вас возникли сложности, смотрите пояснения в конце статьи). Такая директория должна существовать и у пользователя, под которым выполняется Apache, также должны быть права на запись в эту директорию.

    Если Вы работаете с включенным ограничением open_basedir — то временный каталог должен находиться внутри. Вам не нужно заботиться о ее чистке или об уникальности имен, PHP решает эту проблему за Вас.

В файле httpd.conf:

  • Прежде всего, убедитесь, что Вы используете веб-сервер Apache 1.3 (последняя версия на момент написания статьи — 1.3.27). Если Вы используете Apache 2.0, Вам следует прочитать следующий отрывок из документации:

    Do not use Apache 2.0 and PHP in a production environment neither on Unix nor on Windows.

  • Если Вы получили сообщение «POST Method Not Allowed», это означает, что надо искать что-то похожее на следующие директивы, и использовать ключевое слово Allow:

    Order allow,deny
    Allow from all

  • Проблемы с загрузкой бинарных файлов — классический вопрос «почему бьются файлы при upload». Вот способ решения, предложенный Димой Бородином (http://php.spb.ru): В директории, где лежит скрипт, делаем файл .htaccess, в котором пишем:CharsetDisable OnВ файл httpd.conf дописать строки:

    CharsetRecodeMultipartForms Off

Небольшие пояснения, к этому рецепту: вышеописанная проблема, когда загруженные на сервер архивы не распаковываются и картинки не отображаются, может возникать из-за того, что используется веб-сервер Russian Apache. Директива CharsetDisable отключает модуль charset-processing module, т.е.

никакой перекодировки при скачивании файлов, находящихся в данной папке, происходить не будет. Директива CharsetRecodeMultipartForms выключает перекодировку данных, переданных методом POST с заголовком Content-Type: multipart/form-data. Т.е.

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

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

Используйте директиву CharsetRecodeMultipartForms, которая появилась в PL23, но при этом вам все-равно придется перекодировать вручную текстовые части запросов. Для этого можно использовать Russian Apache API, доступное в других модулях или Russian Apache Perl API, доступное из mod_perl.

Один из примеров определения кодировки вы можете найти тут: http://tony2001.phpclub.net/detect_charset/detect.phps

Самая свежая документация по Russian Apache находится на его официальном сайте: http://apache.lexa.ru/.

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

Также возможна настройка параметров Apach с помощью .htaccess:

php_value upload_max_filesize 50M
php_value post_max_size 50M

Дополнительные возможности

Пример формы загрузки нескольких файлов: Send these files:

И не забудьте увеличить post_max_size, если предполагается много файлов

Автоматическая загрузка файлов на сервер

Не стоит забывать, что файлы на диске пользователя — конфиденциальная информация, к которой ни JavaScript, ни уж тем более PHP не имеют ни малейшего отношения. До тех пор, пока пользователь сам не выбрал файл при помощи ни о какой работе с ним не может идти и речи. И не забывайте, что у данного поля ввода атрибут value защищен от записи.

Хранение файлов в базе данных mySQL

Если Вы собрались хранить загружаемы файлы в базе данных, Вам необходимо помнить следующие моменты:

  • Необходимо использовать поле типа BLOB
  • Перед тем, как класть в базу, не забыть применить к строке mysql_escape_string()
  • При отображении файла необходимо указывать заголовок content/type

Помните, что скрипт отображающий ваш HTML никак не связан со скриптом, который должен выводить изображение. Это должны быть два различные приложения.

Хранение картинок в базе не является хорошем стилем. Гораздо удобней хранить в базе лишь пути к файлам изображений.

Получение свойств изображения

Если перед вами возникла задача проверить тип или размеры картинки перед загрузкой файла на сервер, вам потребуется функция getimagesize().

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

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

Загрузка файлов, имеющих русско-язычное название

При загрузке на сервер файлов, необходимо проверять их оригинальные имена на предмет наличия «нестандартных» символов (к примеру русских букв). В случае их присутствия необходимо произвести замену. Оригинальное имя файла можно найти в переменной $_FILES['userfile']['name']. Как перекодировать русскоязычную строку в транслит можно можно найти в примерах PHP.

Отображения статуса загрузки (Progress bar)

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

Права на файлы

Проблемы с правами на сервере (upload_tmp_dir)

В Unix-подобных операционных системах каждой папке, файлу, ссылке выставлены соответствие права доступа. Они могут выглядеть как rwx-rw-r- или же как число 754.

Доступность файла или каталога зависят от идентификатора пользователя и идентификатора группы, в которую он входит. Режим в целом описывается в терминах трех последовательностей, по три буквы в каждой: Владелец Группа Прочие (u) (g) (o) rwx rwx rwx

Здесь владелец, члены группы и все прочие пользователи обладают правами чтения файла, записи в него и его выполнения. Права — любая осмысленная комбинация следующих букв:

r Право на чтение. (4) w Право на запись. (2) x Право на выполнение (поиск в каталоге). (1)

Для того, что бы загрузка файлов на сервер работала корректно, необходимо реализовать один из двух вариантов

  • Установить владельцем каталога пользователя, с чьими привелегиями выполняется apache. Это можно узнать из файла httpd.conf или просмотрев список процессов на сервере. Права на каталог должны быть 700 (rwx——).
  • Независимо от того, кто является владельцем каталога, установить права 777 (rwxrwxrwx).$max_image_width = 380;
    $max_image_height = 600;
    $max_image_size = 64 * 1024;
    $valid_types = array(«gif»,»jpg», «png», «jpeg»); if (isset($_FILES[«userfile»])) { if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { $filename = $_FILES['userfile']['tmp_name']; $ext = substr($_FILES['userfile']['name'], 1 + strrpos($_FILES['userfile']['name'], «.»)); if (filesize($filename) > $max_image_size) { echo 'Error: File size > 64K.'; } elseif (!in_array($ext, $valid_types)) { echo 'Error: Invalid file type.'; } else { $size = GetImageSize($filename); if (($size) && ($size[0] < $max_image_width) && ($size[1] < $max_image_height)) { if (@move_uploaded_file($filename, "/www/htdocs/upload/")) { echo 'File successful uploaded.'; } else { echo 'Error: moving fie failed.'; } } else { echo 'Error: invalid image properties.'; } } } else { echo "Error: empty file."; } } else { echo ' Send this file: '; }

    Оригинал статьи находится на сайте PHP Club

    Как скачать файл с сервера?

    Ещё примеры работы с файлами на PHP

    Читать дальше: Работа с базами данных MySQL на PHP

  • Источник: https://htmlweb.ru/php/php_upload.php

    Ссылка на основную публикацию