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

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

  1. Тестирование: введение и задачи
  2. Сбор информации с помощью поисковых систем

Определение веб-сервера
Резюме

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

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

Задачи

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

Как тестировать
Тестирование по методу чёрного ящика

Наиболее простой способ определения веб-сервера — это изучить в ответе от сервера заголовок Server, для чего можно использовать Netcat.

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


$ nc 202.41.76.251 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Mon, 16 Jun 2003 02:53:29 GMT
Server: Apache/1.3.3 (Unix) (Red Hat/Linux)
Last-Modified: Wed, 07 Oct 1998 11:18:14 GMT
ETag: «1813-49b-361b4df6»
Accept-Ranges: bytes
Content-Length: 1179
Connection: close
Content-Type: text/html

Изучив заголовок Server мы видим, что вероятно используется веб-сервер Apache версии 1.3.3 на операционной системе Linux.

Однако данный подход несколько ограничен в точности. Существует несколько способов скрыть или изменить заголовок Server.

Поведение протокола

Более тонкие методы принимают во внимание различные характеристики используемых веб-серверов. Ниже приведены несколько методов определения используемого веб-сервера.

Порядок HTTP заголовков

Первый метод заключается в изучении порядка заголовков в ответе веб-сервера. У каждого веб-сервера заголовки расположены по-своему. Рассмотрим несколько примеров:

Ответ от Apache 1.3.23


$ nc apache.example.com 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Sun, 15 Jun 2003 17:10: 49 GMT
Server: Apache/1.3.23
Last-Modified: Thu, 27 Feb 2003 03:48: 19 GMT
ETag: 32417-c4-3e5d8a83
Accept-Ranges: bytes
Content-Length: 196
Connection: close
Content-Type: text/HTML

Ответ от IIS 5.0


$ nc iis.example.com 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Content-Location: http://iis.example.com/Default.htm
Date: Fri, 01 Jan 1999 20:13: 52 GMT
Content-Type: text/HTML
Accept-Ranges: bytes
Last-Modified: Fri, 01 Jan 1999 20:13: 52 GMT
ETag: W/e0d362a4c335be1: ae1
Content-Length: 133

Ответ от Netscape Enterprise 4.1


$ nc netscape.example.com 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Server: Netscape-Enterprise/4.1
Date: Mon, 16 Jun 2003 06:01: 40 GMT
Content-type: text/HTML
Last-modified: Wed, 31 Jul 2002 15:37: 56 GMT
Content-length: 57
Accept-ranges: bytes
Connection: close

Ответ от SunONE 6.1


$ nc sunone.example.com 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Server: Sun-ONE-Web-Server/6.1
Date: Tue, 16 Jan 2007 15:23:37 GMT
Content-length: 0
Content-type: text/html
Date: Tue, 16 Jan 2007 15:20:26 GMT
Last-Modified: Wed, 10 Jan 2007 09:58:26 GMT
Connection: close

В приведенных выше примерах можно увидеть что порядок заголовков Date и Server отличается в Apache, Netscape Enterprise и IIS.

Искаженные запросы

Также полезно отправлять неправильные запросы или же запрашивать несуществующие страницы. Рассмотрим несколько примеров.

Ответ от Apache 1.3.23


$ nc apache.example.com 80
GET / HTTP/3.0

HTTP/1.1 400 Bad Request
Date: Sun, 15 Jun 2003 17:12: 37 GMT
Server: Apache/1.3.23
Connection: close
Transfer: chunked
Content-Type: text/HTML; charset=iso-8859-1

Ответ от IIS 5.0


$ nc iis.example.com 80
GET / HTTP/3.0

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Content-Location: http://iis.example.com/Default.htm
Date: Fri, 01 Jan 1999 20:14: 02 GMT
Content-Type: text/HTML
Accept-Ranges: bytes
Last-Modified: Fri, 01 Jan 1999 20:14: 02 GMT
ETag: W/e0d362a4c335be1: ae1
Content-Length: 133

Ответ от Netscape Enterpise 4.1


$ nc netscape.example.com 80
GET / HTTP/3.0

HTTP/1.1 505 HTTP Version Not Supported
Server: Netscape-Enterprise/4.1
Date: Mon, 16 Jun 2003 06:04: 04 GMT
Content-length: 140
Content-type: text/HTML
Connection: close

Ответ от SunONE 6.1


$ nc sunone.example.com 80
GET / HTTP/3.0

HTTP/1.1 400 Bad request
Server: Sun-ONE-Web-Server/6.1
Date: Tue, 16 Jan 2007 15:25:00 GMT
Content-length: 0
Content-type: text/html
Connection: close

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

Ответ от Apache 1.3.23


$ nc apache.example.com 80
GET / JUNK/1.0

HTTP/1.1 200 OK
Date: Sun, 15 Jun 2003 17:17: 47 GMT
Server: Apache/1.3.23
Last-Modified: Thu, 27 Feb 2003 03:48: 19 GMT
ETag: 32417-c4-3e5d8a83
Accept-Ranges: bytes
Content-Length: 196
Connection: close
Content-Type: text/HTML

Ответ от IIS 5.0


$ nc iis.example.com 80
GET / JUNK/1.0

HTTP/1.1 400 Bad Request
Server: Microsoft-IIS/5.0
Date: Fri, 01 Jan 1999 20:14: 34 GMT
Content-Type: text/HTML
Content-Length: 87

Ответ от Netscape Enterprice 4.1


$ nc netscape.example.com 80
GET / JUNK/1.0

Bad request

Bad request

Your browser sent to query this server could not understand.

 

Ответ от SunONE 6.1


$ nc sunone.example.com 80
GET / JUNK/1.0

Bad request

Bad request

Your browser sent a query this server could not understand.
Инструменты

Автоматическое тестирование

Вместо того, чтобы полагаться на баннер и анализ заголовков веб-сервера вручную, тестировщик может использовать автоматизированные инструменты для определения веб-сервера, так как приходится провести множество тестов, чтобы точно определить используемый веб-сервер. нttprint — один из таких инструментов, он использует словарь «отпечатков» с помощью которого определяет тип и версию используемого веб-сервера.

Онлайн тестирование

Можно использовать онлайн инструменты если тестировщик хочет проводить тестирование более скрытно и не обращаться напрямую к целевому веб-приложению. Примером подобных инструментов, предоставляющим множество информации о целевом веб-сервере, является Netcraft (http://www.netcraft.com/). С помощью данного инструмента можно получить информацию об операционной системе, используемом веб-сервере, времени непрерывной работы сервера, владельце сегмента сети, истории изменения веб-сервера и операционной системы.

Предполагается что проект OWASP Unmaskme Project станет еще одним онлайн инструментом для определения используемого веб-сервера с помощью анализа различных мета-данных. Данный проект все еще находится в разработке, но уже сейчас можно попробовать его наработки в деле — http://desenmascara.me/

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

Рекомендации

Предоставляйте как можно меньше информации о используемом вами веб-сервере.