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

Предыдущие статьи:

  1. Тестирование: введение и задачи
  2. Сбор информации с помощью поисковых систем
  3. Определение веб-сервера
  4. Поиск информации в метафайлах веб-сервера
  5. Определение веб-приложений на сервере
  6. Поиск утечек информации в комментариях и метаданных
  7. Определение точек входа веб-приложения
  8. Составление карты веб-приложения
  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

Однако стоит помнить о том, что имена куки могут быть изменены.

Исходный код страниц

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

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

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


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

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

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

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

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

Wordpress_dirbusting

В приведенном примере видно, что были обнаружены несколько директорий, характерных для WordPress: /wp-includes/, /wp-admin/ и /wp-content/. Как говорилось ранее мы не ограничены только брутфорсом каталогов, можно также брутить различные файлы:

Drupal_botcha_disclosure

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

Robots-info-disclosure

Файлы и каталоги различны для каждого веб-приложения. Рекомендуется установить соответствующие веб-приложение во время проведения пентеста для того, чтобы лучше понимать его инфраструктуру и определить файлы, которые могли остаться на сервере. Существуют несколько хороших списков файлов и одним из лучших являются списки из 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_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

Исходный код страниц

Веб-приложение Ключевые слова
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

Полезная информация и больше примеров: https://www.owasp.org/index.php/Web-metadata

Инструменты

Рассмотрены в предыдущей части перевода.

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

  1. Saumil Shah: «An Introduction to HTTP fingerprinting» — http://www.net-square.com/httprint_paper.html
  2. Anant Shrivastava : «Web Application Finger Printing» — http://anantshri.info/articles/web_app_finger_printing.html

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

Рассмотрено в предыдущей части перевода.