Представляю вашему вниманию очередную часть перевода OWASP Testing Guide. В данной статье речь пойдет о изучении расширений файлов.



Резюме

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

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

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

Как тестировать
Брутфорс расширений файлов

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

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

Пример:

Тестировщик обнаружил файл connection.inc. При попытке доступа к нему — получаем его содержимое:


<? mysql_connect("127.0.0.1", "root", "") or die("Could not connect"); ?>

Благодаря данному файлу тестировщик сразу определит используемую тестируемым вебприложением СУБД — MySQL, а также учетную запись, используемую для подключения.
Содержимое файлов со следующими расширениями никогда не должны выдаваться веб-сервером, так как они могут содержать чувствительную информацию:

  • .asa
  • .inc

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

  • .zip, .tar, .gz, .tgz, .rar, …: архивные файлы
  • .java: исходный код Java
  • .txt: текстовые файлы
  • .pdf: PDF документы
  • .doc, .rtf, .xls, .ppt, …: офисные документы
  • .bak, .old и прочие расширения, используемые для резервного копирования.

Сверху приведены лишь несколько примеров, существует слишком много файловых расширений, чтобы приводить их здесь. Более полный список расширений файлов — http://filext.com/

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

Загрузка файлов

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

Примеры

  • file.phtml выполняется как PHP код
  • выдается веб-приложением, но не обрабатывается обработчиком PHP ISAPI
  • shell.phPWND может быть загружен
  • SHELL~1.PHP будет расширенна операционной системой, а затем обработается обработчиком PHP ISAPI

Тестирование по методу белого ящика

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

Инструменты

Nessus и Nikto могут определить наиболее часто используемые директории. Также могут пригодится следующие инструменты: