June 12, 2020

4.1.9 Определение движка веб-приложения

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

Задачи тестирования

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

Как тестировать?

Куки

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

Рассмотрим следующий запрос:

GET / HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
'''Cookie: wp-settings-time-1=1406093286; wp-settings-time-2=1405988284'''
DNT: 1
Connection: keep-alive
Host: blog.owasp.org

Параметр cookie wp-settings-time-1 был установлен автоматически, и он дает нам информацию об используемой платформе (Wordpress). Однако стоит помнить о том, что имена куков могут быть изменены.

HTML код

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

Одним из наиболее распространенных маркеров являются комментарии, которые напрямую раскрывают используемое приложение. Более часто можно обнаружить пути, характерные для определенного приложения, например, css файлы и/или js каталоги. Различные специфичные имена переменных в скриптах также позволяют опеределить веб-приложение.

В приведенном ниже примере из исходного кода сразу можно узнать веб-приложение и его версию:

<meta name="generator" content="WordPress 3.9.2" />

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

Специфичные файлы и каталоги

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

Для обнаружения подобных ресурсов нам нужно произвести брутфорс директорий и файлов — запрашиваются файлы и каталоги из заранее заготовленного списка, впоследствии изучаются ответы от сервера. Полученная информация может быть использована не только для определения веб-приложения, но и для проведения непосредственно атаки. Рассмотрим пример брутфорса директорий в WordPress приложении с помощью Burp Intruder:

Мы можем увидеть специфичные для WordPress папки (/wp-includes/, /wp-admin/ и /wp-content/) Статусы HTTP-ответов имеют значение 403 (Забыто или перенаправлено), 302 (Найдено и перенаправленно , в данном случае на wp-login.php) и 200 (OK). Это хороший показатель того , что наша цель работает на движке WorpPress. Таким же образом мы можем определить и другие движки , и даже их версию. На скриншоте ниже мы можем увидить типичный CHANGELOG файл , плагина для Drupal , который содержит информацию об используемом движке.

Совет: перед брутом директорий в первую очередь проверяйте файл robots.txt. Иногда там можно найти скрытые папки и другую конфеденциальную информацию. Вот пример, такого файла robots.txt

Файлы и каталоги различны для каждого веб-приложения. Рекомендуется установить соответствующие веб-приложение во время проведения пентеста для того, чтобы лучше понимать его инфраструктуру и определить файлы, которые могли остаться на сервере. Существуют несколько хороших списков файлов и одним из лучших являются списки из FuzzDB, в разделе predictable files/folders (http://code.google.com/p/fuzzdb/).

Распространенные идентификаторы веб-приложений

Куки

phpBB — phpbb3_

WordPress — wp-settings

1C-Bitrix — BITRIX_

AMPcms — AMP

Django CMS — django

DotNetNuke — DotNetNukeAnonymous

e107 — e107_ttz

EPiServer — EPiTrace, EPiServer

Graffiti — CMSgraffitibot

HotaruCMS — hotarubile

ImpressCMS — ICMSession

Indico — MAKACSESSION

InstantCMS — InstantCMS[logdate]

KenticoCMS — CMSPreferredCulture

MODx — SN4[12symb]

TYPO3 — fe_typo_user

Dynamicweb — Dynamicweb

LEPTON — lep[somenumeric_value+sessionid]

Wix — Domain=.wix.com

VIVVO — VivvoSessionId

HTML код

Wordpress — <meta name="generator" content="WordPress 3.9.2" />

phpBB — &lt;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)" />

DotNetNukeDNN Platform - http://www.dnnsoftware.com

Инструменты

Данные здесь инструменты так же были рассмотрены в прошлых частях. Стоит учитывать что есть ещё большое колличество различных инструментов , но мы перечисляем лишь основные

WhatWeb

Сайт: http://www.morningstarsecurity.com/research/whatweb

На данный момент один из лучших инструментов. Входит в состав Kali линукс по-умолчанию. Написан на Ruby, для определения использует:

  • текстовые строки (чувствителен к регистру)
  • регулярные выражения
  • гугл дорки (ограниченное число ключевых слов)
  • хеши MD5
  • урлы
  • паттерны HTML тегов
  • кастомный Ruby код для пассивного и активного определения

На скриншоте показан пример работы

BlindElephant

Сайт: https://community.qualys.com/community/blindelephant

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

Пример работы :

pentester$ python BlindElephant.py http://my_target drupal
Loaded /Library/Python/2.7/site-packages/blindelephant/dbs/drupal.pkl with 145 versions, 478 differentiating paths, and 434 version groups.
Starting BlindElephant fingerprint for version of drupal at http://my_target

Hit http://my_target/CHANGELOG.txt
File produced no match. Error: Retrieved file doesn't match known fingerprint. 527b085a3717bd691d47713dff74acf4

Hit http://my_target/INSTALL.txt
File produced no match. Error: Retrieved file doesn't match known fingerprint. 14dfc133e4101be6f0ef5c64566da4a4

Hit http://my_target/misc/drupal.js
Possible versions based on result: 7.12, 7.13, 7.14

Hit http://my_target/MAINTAINERS.txt
File produced no match. Error: Retrieved file doesn't match known fingerprint. 36b740941a19912f3fdbfcca7caa08ca

Hit http://my_target/themes/garland/style.css
Possible versions based on result: 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9, 7.10, 7.11, 7.12, 7.13, 7.14

...

Fingerprinting resulted in:
7.14


Best Guess: 7.14

Wappalyzer

Сайт: http://wappalyzer.com

Wappalyzer — это плагин для Firefox или Chrome. Для определения использует только регулярные выражения, чтобы он заработал нужно просто загрузить страницу в браузере. Работает полностью в браузере и выдает результаты в виде иконок. Иногда он выдает ложные результаты, но все же полезно узнать о технологиях, используемых веб-приложением сразу после его загрузки.

Пример работы:

Справочные материалы

Противодействие атакующему

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

HTTP заголовки

Проверьте конфигурацию и отключите или обфусцируйте все заголовки, раскрывающие информацию об используемых технологиях. Вот интересная статья об обфускации HTTP заголовков используя Netscaler: http://grahamhosking.blogspot.ru/2013/07/obfuscating-http-header-using-netscaler.html

Куки

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

HTML-код

Просмотрите исходный код страниц и удалите все, что явно указывает на фреймворк.

Общие рекомендации:

  • убедитесь, что нет визуальных маркеров, раскрывающих фреймворк
  • удалите все ненужные комментарии (информация об авторских правах, информация о багах, комментарии характерные для фреймворка)
  • удалите в теге META аттрибут generator
  • используйте свои собственные css и js файлы, также не сохраняйте их в директориях созданных фреймворком
  • не используйте скрипты по-умолчанию и обфусцируйте их,если вам все же нужно их использовать

Определенные файлы и каталоги

Общие рекомендации:

  • удалите все неиспользуемые и ненужные файлы. Это также относится к текстовым файлам, раскрывающим версию фреймворка или любую другую важную информацию
  • запретите доступ к другим файлам, необходимо выдавать 404 ошибку при доступе из вне. Это можно сделать, например, с помощью файла htaccess, добавив в него RewriteCond или RewriteRule. Ниже приведен пример запрета двух распространенных в WordPress директорий:
RewriteCond %{REQUEST_URI} /wp-login\.php$ [OR]
RewriteCond %{REQUEST_URI} /wp-admin/$
RewriteRule $ /http://your_website [R=404,L]

Однако, это не единственный способ запрета доступа. В некоторых фреймворках существуют плагины для автоматизации этого процесса, например, в WordPress — StealthLogin (http://wordpress.org/plugins/stealth-login-page).

Общие рекомендации

  • Управление контрольными суммами — данный подход используется для того, чтобы помещать автоматизированным сканерам, анализирующим контрольные суммы статических файлов. Существует два метода управления контрольными суммами:
    • изменение расположения статических файлов (например, перенести файлы в другой каталог или переименовать существующий каталог)
    • изменение содержимого файла — даже небольшое изменение файла приводит к кардинальному изменению контрольной суммы, тоесть достаточно добавить всего лишь один байт в конце файла
  • управляемый хаос — довольно забавный и эффективный метод. Нужно добавить фиктивные файлы и каталоги из других фреймворков для того чтобы сбить с толку автоматизированные сканнеры и запутать атакующих. Правда, нужно быть крайне аккуратным, так как существует опасность перезаписи существующих файлов.

Перевод подготовлен специально для канала t.me/FreedomF0x

Contact: t.me/freedomf0x t.me/Slippery_Fox twitter.com/FlatL1ne

xmpp(жаба_ёпт): [email protected]

При поддержке друзей: t.me/in51d3 t.me/NeuroAliceMusic t.me/vulnersBot t.me/darknet_prison

Our private (no logs) xmpp server: FreedomFox.im (for add, write to [email protected])

Хорошо там где нас нет (с) Русские хакеры
Добре там де нас немає (с) Російські хакери