Сайт пытается загрузить файл что это значит

Обновлено: 07.07.2024

Часто при попытке запустить файлы, скачанные из интернета, появляется примерно такое окно:


Как Windows определяет, что файл был загружен из Интернета

Такую "черную метку" файлу обычно ставит браузер Internet Explorer. При этом файл можно переименовать, скопировать или даже переместить на другой диск, предупреждение все равно будет оставаться. Снять блокировку с файла можно примерно так. Но каким образом система определяет, что файл скачан из интернета? Эта информация записывается в так называемые альтернативные потоки NTFS. Суть технологии альтернативных потоков заключается в том, что у файла на дисковой системе NTFS одновременно может быть несколько потоков, содержащих данные. Проводник Windows и большинство файловых менеджеров могут работать только с главным потоком, который представляет собой основное содержимое файла.

Зато альтернативные потоки NTFS можно легко посмотреть в консоли обычной командой DIR с ключом /R


Просмотр альтернативных потоков NTFS при помощи команды DIR

Можно воспользоваться консольной утилитой Streams от Mark Russinovich.


Просмотр альтернативных потоков NTFS при помощи программы Streams

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


Просмотр альтернативных потоков NTFS при помощи NTFS Stream Explorer

Или бесплатная утилита AlternateStreamView от NirSoft.


Просмотр альтернативных потоков NTFS при помощи программы AlternateStreamView

Что же интересного записано в этом файле, а главное, как его открыть? Проще всего это делается при помощи обычного Блокнота, который входит в состав каждой Windows. Набираем в командной строке следующее:

notepad C:\setup.exe:Zone.Identifier
В Блокноте открывается содержимое альтернативного потока Zone.Identifier. Да, это самый обычный текстовый (а точнее ini) файл:

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

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


Удаление альтернативного потока через программу Streams
Удаление альтернативного потока программой NTFS Stream Explorer
Удаление альтернативного потока программой AlternateStreamView

Альтернативный поток NTFS также удаляется при разблокировке файла через меню Проводника Windows. После удаления потока файл запускается без каких-либо предупреждений.

Можно ли заблокировать файл обратно? Да, можно. Для этого, как несложно догадаться, надо создать альтернативный поток Zone.Identifier с нужным содержимым. Делается это при помощи все того же Блокнота уже знакомой нам командой:

notepad C:\setup.exe:Zone.Identifier
На запрос о создании нового файла надо ответить подтверждением.

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

[ZoneTransfer]
ZoneId=3
После этого файл снова становится небезопасным со всеми вытекающими последствиями. Путем несложных экспериментов я также выяснил, что значение ZoneId=4 при попытке запустить файл приводит вот к такому интересному эффекту:

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

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

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

image

Автор: Haboob Team

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

Фильтрация на стороне клиента

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

Обход фильтрации на стороне клиента

1. <script type="text/javascript">

2. var _validFileExtensions = [".jpg", ".jpg", ".bmp", ".jpg", ".jpg"];

3. function Validate(oForm)

4. var arrInputs = oForm.getElementsByTagName("input");

5. for (var i = 0; i < arrInputs.length; i++)

6. var oInput = arrInputs[i];

7. if (oInput.type == "file")

8. var sFileName = oInput.value;

9. if (sFileName.length > 0)

10. var blnValid = false;

11. for (var j = 0; j < _validFileExtensions.length; j++)

12. var sCurExtension = _validFileExtensions[j];

13. if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase())

14. blnValid = true;

21. return false;

Как показано выше, JavaScript обрабатывает запрос перед отсылкой на сервер. Внутри кода происходит проверка, принадлежит ли расширение файла графическому формату (jpg, jpeg, bmp, gif, png). Этот метод фильтрации можно обойти после изменения содержимого запроса и самого файла на вредоносный код с расширением, способствующим выполнению этого кода.


Рисунок 1: Результат проверки файла на предмет присутствия расширения из списка графических форматов

Как показано на рисунке, загрузчик файлов приостанавливает отправку запроса, если мы пытаемся загрузить php-файл напрямую.


Рисунок 2: Запрос, формируемый во время загрузки файла

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

Проверка на стороне сервера

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

В черном списке находятся расширения файлов, которые не принимаются к загрузке ни при каких обстоятельствах, например, php, aspx. В случае с белым списком ситуация полностью противоположная. В этом перечне находятся только те расширения файлов, которые разрешены для загрузки на сервер, например, jpg, jpeg, gif.

Обход проверки на стороне сервера

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

В случае с обходом черного списка можно попробовать загрузить файлы со следующими расширениями: pht, phpt, phtml, php3, php4, php5, php6.

Обход белого списка осуществляется при помощи некоторых трюков, как, например, добавление пустого байта в имя файла (shell.php%00.jpg) или использование двойного расширения (shell.jpg.php).

В некоторых случаях проверку можно обойти при помощи расширений с измененным регистром одного из символов: pHp, Php, phP.

1. if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"

2. && $imageFileType != "gif" )

3. echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";

В коде выше показан пример кода загрузчика файлов, принимающего лишь несколько расширений (jpg, jpeg, gif). Далее рассмотрим пример обхода различных типов проверок.

Пример обхода черного списка


Рисунок 3: Обход фильтра при помощи загрузки файла с непопулярным расширением

На рисунке выше показан обход проверки при помощи загрузки файла с расширением .php5, который принимается сервером Apache и далее запускается автоматически как обычный php-файл.

Пример обхода белого списка

Пример обхода белого списка


Рисунок 4: Обход фильтра при помощи загрузки файла с двойным расширением

На рисунке выше показано, как можно обойти белый список через загрузку php-файла с двойным расширением.

Проверка заголовка CONTENT-TYPE

Обход проверки Content-Type

Этот класс фильтров можно обойти посредством изменения в файле shell.php или shell.aspx содержимого параметра Content-Type на значение «image/png», «image/jpeg» или «image/gif».

3. $mimetype = mime_content_type($_FILES['file']['tmp_name']);

4. if(in_array($mimetype, array('image/jpeg', 'image/gif', 'image/png')))

5. move_uploaded_file($_FILES['file']['tmp_name'], '/uploads/' . $_FILES['file']['name']);

9. echo 'Upload a real image';

В коде выше мы видим, что проверяется MIME-тип, являющийся частью заголовка Content-Type, у файла, загружаемого на сервер. В данном случае загрузчик принимает только файлы со следующими типами: image/jpeg, image/gif и image/png. Мы можем легко обойти этот фильтр, изменив поле Content-Type во время загрузки исполняемого файла на тот MIME-тип, который принимается веб-сервером.


Рисунок 5: Пример измененного поля Content-Type при загрузке php-скритпа

Проверка заголовка CONTENT-LENGTH

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

Обход проверки CONTENT-LENGTH

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

1. if ($_FILES["fileToUpload"]["size"] > 30)

2. echo "Sorry, your file is too large.";

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

Этичный хакинг и тестирование на проникновение, информационная безопасность

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

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

  • загрузка вредоносного кода
  • загрузка файлов слишком большого размера для переполнения хранилища сервера
  • внедрение в имя файла тэга для 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 уже установлен и прекрасно работает.

01

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

02

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

03

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

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

04

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

05

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

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

06

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

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

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

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

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

07

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

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

09

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

10

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

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

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

11

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

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

12

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

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

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

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

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

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

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

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

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

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

13

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

14

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

15

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

16

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

17

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

18

19

20

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

21

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

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

22

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

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

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

23

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

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

24

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

25

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

26

27

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

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

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

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

28

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

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

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

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

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

29

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

30

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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


Это - статья с пошаговым руководством..

Проблема

Ряд антивирусов, а также программ очистки и оптимизации может вызвать системные конфликты. Следует учитывать, что при наличии в системе нескольких антивирусных программ могут возникнуть разного рода проблемы, в связи с чем рекомендуется установить только один антивирус. Данная статья посвящена решению проблем, связанных с загрузкой из Internet Explorer.

Решение

Решение 1: Удалить другие установленные антивирусы и программы оптимизации

Примечание: Помните, что нужно сохранить только один антивирус. Для решения этой проблемы рекомендуем, если захотите, установить Microsoft Security Essentials, и если это приложение поможет, его можно и оставить установленным. Подробную информацию по загрузке и установке Microsoft Security Essentials см. в статье с пошаговым руководством: Как установить Microsoft Security Essentials


Щелкните Пуск , а затем Панель управления.



В Панели управления выберитеПрограммы.



Далее щелкните Программы и компоненты.



Чтобы найти антивирус, проверьте по порядку все установленные приложения (самые распространенные - Norton Security, Avast, Nod32, Kapersky и др.) и программы оптимизации (например, TuneUp). Обнаруженные программы выделите и щелкните Удалить или изменить.


Дополнительную информацию о процедуре удаления антивирусов или антишпионских утилит можно найти на сайте Как удалить антивирусное или антишпионское ПО?

Решение 2: Сбросить параметры конфигурации Internet Explorer

Нажмите эту кнопку для загрузки утилиты Microsoft Fix It: Сбросить параметры конфигурации Internet Explorer.

Подробную информацию об использовании этой утилиты, а также о том, как сбросить параметры конфигурации Internet Explorer вручную, см. в статье: Как сбросить параметры конфигурации Internet Explorer.

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

Примечание: если вы работаете не на том компьютере, где возникла проблема, можете сохранить автоматическое исправление на флэш-носитель или CD и впоследствии использовать на нужном компьютере.

Ваше мнение важно для нас! Мы ждем ваших отзывов по данным статьям; оставьте их в поле для комментариев в нижней части страницы. Ваши отзывы помогают нам повышать качество контента. Заранее спасибо!

Читайте также: