Перейти к содержанию

Определение веб-приложений

Резюме

Практически каждое веб-приложение, которое можно представить, уже было разработано. Существуют множество бесплатных и открытых программных проектов, активно используемых по всему миру. Поэтому при тестировании безопасности приложения, скорее всего, вы столкнетесь с целевыми приложениями, которые полностью или частично зависят от известных приложений или фреймворков (например, WordPress, phpBB, Mediawiki). Знание компонентов веб-приложения помогает в процессе тестирования и значительно сокращает затраты времени на тестирование. Известные веб-приложения имеют характерные HTML-заголовки, куки и структуру каталогов, которые можно использовать для их идентификации.

Цели тестирования

Определить используемые компоненты веб-приложений.

Как проводить тестирование

Тестирование без доступа к исходному коду (Black-Box Testing)

Существует несколько распространенных мест, которые следует проверить для определения фреймворков или компонентов:

  • HTTP-заголовки
  • Куки
  • Исходный код HTML
  • Конкретные файлы и папки
  • Расширения файлов
  • Сообщения об ошибках

HTTP-заголовки Самый простой способ определения веб-фреймворка — это посмотреть поле X-Powered-By в HTTP-заголовке ответа. Многие инструменты могут использоваться для определения целевого приложения. Самым простым из них является netcat.

Пример запроса-ответа HTTP:

$ nc 127.0.0.1 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Server: nginx/1.0.14
X-Powered-By: Mono

Из поля X-Powered-By можно понять, что, вероятно, используется фреймворк Mono. Однако этот метод не всегда работает, так как можно легко отключить заголовок X-Powered-By. Также существуют техники, позволяющие скрыть HTTP-заголовки.

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

Пример HTTP-запроса:

Cakephp HTTP Request

Кука CAKEPHP была автоматически установлена, что дает информацию о используемом фреймворке. Однако возможно изменить имена куки, что может усложнить идентификацию.

Исходный код HTML Этот метод основан на поиске определенных шаблонов в исходном коде HTML страницы. Часто можно найти много информации, которая помогает тестировщику распознать конкретный компонент. Одним из распространенных маркеров являются комментарии в HTML, которые могут указывать на используемый фреймворк. Также можно найти специфичные для фреймворка пути к CSS или JS папкам. html.png Часто такая информация располагается в секции <head> HTTP-ответов, в <meta> тегах или внизу страницы. Тем не менее, следует анализировать весь ответ, так как это может быть полезно для других целей, таких как проверка скрытых комментариев и полей. Иногда веб-разработчики не обращают внимания на скрытие информации о используемых фреймворках или компонентах. В результате можно наткнуться на что-то подобное внизу страницы: sample.png

Специфические файлы и папки

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

Чтобы их обнаружить, используется техника, известная как "принудительный просмотр" или "dirbusting". Dirbusting — это перебор целевых папок и имен файлов, используя известные названия, и мониторинг HTTP-ответов для перечисления контента сервера. Эта информация может быть полезна как для поиска файлов по умолчанию, так и для их атак, а также для определения веб-приложения. Dirbusting можно выполнять несколькими способами. Пример ниже демонстрирует успешную атаку dirbusting против цели, работающей на WordPress, с помощью заранее определенного списка и функции "Intruder" в Burp Suite. burp.png Мы можем заметить, что для некоторых специфичных папок WordPress (например, /wp-includes/, /wp-admin/ и /wp-content/) HTTP-ответы составляют 403 (Доступ запрещен), 302 (Перенаправление на wp-login.php) и 200 (ОК) соответственно. Это хороший индикатор того, что цель работает на WordPress. Таким же образом можно проводить dirbusting для различных папок плагинов приложений и их версий. На скриншоте ниже можно увидеть типичный файл CHANGELOG плагина Drupal, который предоставляет информацию о используемом приложении и раскрывает уязвимую версию плагина. drupal.png Совет: перед началом dirbusting сначала проверьте файл robots.txt. Иногда там можно найти специфичные для приложения папки и другую конфиденциальную информацию. На скриншоте ниже представлен пример такого файла robots.txt. robots.png Конкретные файлы и папки различаются для каждой конкретной приложения. Если идентифицированное приложение или компонент являются Open Source, может быть полезно установить временную версию во время тестов на проникновение, чтобы лучше понять, какая инфраструктура или функциональность доступны и какие файлы могут остаться на сервере. Однако уже существуют хорошие списки файлов; одним из примеров является FuzzDB — словари предсказуемых файлов и папок.

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

Например, в вики OWASP использовался PHP:

https://wiki.owasp.org/index.php?title=Fingerprint_Web_Application_Framework&action=edit&section=4

Вот несколько распространенных расширений файлов и соответствующих технологий:

  • .php – PHP
  • .aspx – Microsoft ASP.NET
  • .jsp – Java Server Pages

Сообщения об ошибках
Как видно на следующем скриншоте, указанный путь к файловой системе указывает на использование WordPress (wp-content). Также тестировщики должны помнить, что WordPress основан на PHP (functions.php). error_2.png

Общие идентификаторы

Cookies

Framework Cookie name
Zope zope3
CakePHP cakephp
Kohana kohanasession
Laravel laravel_session
phpBB phpbb3_
WordPress wp-settings
1C-Bitrix BITRIX_
AMPcms AMP
Django CMS django
DotNetNuke DotNetNukeAnonymous
e107 e107_tz
EPiServer EPiTrace, EPiServer
Graffiti CMS graffitibot
Hotaru CMS hotaru_mobile
ImpressCMS ICMSession
Indico MAKACSESSION
InstantCMS InstantCMS[logdate]
Kentico CMS CMSPreferredCulture
MODx SN4[12symb]
TYPO3 fe_typo_user
Dynamicweb Dynamicweb
LEPTON lep[some_numeric_value]+sessionid
Wix Domain=.wix.com
VIVVO VivvoSessionId

HTML Source Code

Application Keyword
WordPress <meta name="generator" content="WordPress 3.9.2" />
phpBB <body id="phpbb">
Mediawiki <meta name="generator" content="MediaWiki 1.21.9" />
Joomla <meta name="generator" content="Joomla! - Open Source Content Management" />
Drupal <meta name="Generator" content="Drupal 7 (http://drupal.org)" />
DotNetNuke DNN Platform - [http://www.dnnsoftware.com](http://www.dnnsoftware.com)

Общие маркеры

  • %framework_name%
  • powered by
  • built upon
  • running

Специфические маркеры

Framework Keyword
Adobe ColdFusion <!-- START headerTags.cfm
Microsoft ASP.NET __VIEWSTATE
ZK <!-- ZK
Business Catalyst <!-- BC_OBNW -->
Indexhibit ndxz-studio

Устранение недостатков

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

Инструменты

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

WhatWeb
Сайт: https://github.com/urbanadventurer/WhatWeb

На данный момент это один из лучших инструментов для отпечатков на рынке. Включен в стандартную сборку Kali Linux. Язык: Ruby. Совпадения для отпечатков выполняются с помощью:

  • Строк текста (чувствительность к регистру)
  • Регулярных выражений
  • Запросов в Google Hack Database (ограниченный набор ключевых слов)
  • MD5-хешей
  • Распознавания URL
  • Шаблонов HTML-тегов
  • Пользовательского кода на Ruby для пассивных и агрессивных операций

Пример вывода представлен на следующем скриншоте: whatweb.png

Wappalyzer

Сайт: https://www.wappalyzer.com/

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

Пример вывода плагина представлен на следующем скриншоте: wappalyzer.png