Определение веб-приложений
Резюме
Практически каждое веб-приложение, которое можно представить, уже было разработано. Существуют множество бесплатных и открытых программных проектов, активно используемых по всему миру. Поэтому при тестировании безопасности приложения, скорее всего, вы столкнетесь с целевыми приложениями, которые полностью или частично зависят от известных приложений или фреймворков (например, 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 папкам.
Часто такая информация располагается в секции
<head>
HTTP-ответов, в <meta>
тегах или внизу страницы. Тем не менее, следует анализировать весь ответ, так как это может быть полезно для других целей, таких как проверка скрытых комментариев и полей. Иногда веб-разработчики не обращают внимания на скрытие информации о используемых фреймворках или компонентах. В результате можно наткнуться на что-то подобное внизу страницы:
Специфические файлы и папки
Существует другой подход, который значительно помогает атакующим или тестировщикам с высокой точностью идентифицировать приложения или компоненты. Каждый веб-компонент имеет свою собственную структуру файлов и папок на сервере. Хотя иногда специфические пути могут быть видны в исходном коде HTML, они не всегда явно представлены и могут находиться на сервере.
Чтобы их обнаружить, используется техника, известная как "принудительный просмотр" или "dirbusting". Dirbusting — это перебор целевых папок и имен файлов, используя известные названия, и мониторинг HTTP-ответов для перечисления контента сервера. Эта информация может быть полезна как для поиска файлов по умолчанию, так и для их атак, а также для определения веб-приложения. Dirbusting можно выполнять несколькими способами. Пример ниже демонстрирует успешную атаку dirbusting против цели, работающей на WordPress, с помощью заранее определенного списка и функции "Intruder" в Burp Suite.
Мы можем заметить, что для некоторых специфичных папок WordPress (например, /wp-includes/, /wp-admin/ и /wp-content/) HTTP-ответы составляют 403 (Доступ запрещен), 302 (Перенаправление на wp-login.php) и 200 (ОК) соответственно. Это хороший индикатор того, что цель работает на WordPress. Таким же образом можно проводить dirbusting для различных папок плагинов приложений и их версий. На скриншоте ниже можно увидеть типичный файл CHANGELOG плагина Drupal, который предоставляет информацию о используемом приложении и раскрывает уязвимую версию плагина.
Совет: перед началом dirbusting сначала проверьте файл robots.txt. Иногда там можно найти специфичные для приложения папки и другую конфиденциальную информацию. На скриншоте ниже представлен пример такого файла robots.txt.
Конкретные файлы и папки различаются для каждой конкретной приложения. Если идентифицированное приложение или компонент являются Open Source, может быть полезно установить временную версию во время тестов на проникновение, чтобы лучше понять, какая инфраструктура или функциональность доступны и какие файлы могут остаться на сервере. Однако уже существуют хорошие списки файлов; одним из примеров является FuzzDB — словари предсказуемых файлов и папок.
Расширения файлов
URL-адреса могут включать расширения файлов, что также может помочь в определении веб-платформы или технологии.
Например, в вики OWASP использовался PHP:
https://wiki.owasp.org/index.php?title=Fingerprint_Web_Application_Framework&action=edit§ion=4
Вот несколько распространенных расширений файлов и соответствующих технологий:
- .php – PHP
- .aspx – Microsoft ASP.NET
- .jsp – Java Server Pages
Сообщения об ошибках
Как видно на следующем скриншоте, указанный путь к файловой системе указывает на использование WordPress (wp-content). Также тестировщики должны помнить, что WordPress основан на PHP (functions.php).
Общие идентификаторы
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 для пассивных и агрессивных операций
Пример вывода представлен на следующем скриншоте:
Wappalyzer
Сайт: https://www.wappalyzer.com/
Wappalyzer доступен в нескольких моделях использования, наиболее популярной из которых являются расширения для Firefox и Chrome. Эти расширения работают только на основе сопоставления регулярных выражений и не требуют ничего, кроме загруженной страницы в браузере. Они функционируют полностью на уровне браузера и предоставляют результаты в виде иконок. Хотя иногда могут возникать ложные срабатывания, это очень удобно для быстрого определения технологий, использованных для создания целевого веб-сайта, сразу после его просмотра.
Пример вывода плагина представлен на следующем скриншоте: