Представляю вашему вниманию третью часть перевода OWASP Testing Guide. В данной статье речь пойдет об определении веб-сервера.
Предыдущие статьи:
Определение веб-сервера
Резюме
Определение веб-сервера является одной из наиважнейших задач при проведении тестирования безопасности веб-приложений. Зная версию и тип используемого веб-сервера можно определить известные уязвимости и воспользоваться соответствующими эксплоитами во время тестирования.
Сейчас используются несколько серверов различных производителей и версий. Тестирование значительно упрощается, если известен тип веб-сервера. Определить веб-сервер можно отправляя на него различные команды и анализируя его реакцию, данная реакция может отличатся у разных веб-серверов. Зная как каждый веб-сервер реагирует на команды и, собирая эти реакции в базу данных, пентестер может определить какой веб-сервер используется. Стоит отметить то, что зачастую необходимо использовать несколько команд, так как различные версии могут реагировать одинаково на одну и ту же команду. Довольно редко разные версии абсолютно одинаково реагируют на все 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.
Инструменты
- httprint — http://net-square.com/httprint.html
- httprecon — http://www.computec.ch/projekte/httprecon/
- Netcraft — http://www.netcraft.com
- Desenmascarame — http://desenmascara.me
Автоматическое тестирование
Вместо того, чтобы полагаться на баннер и анализ заголовков веб-сервера вручную, тестировщик может использовать автоматизированные инструменты для определения веб-сервера, так как приходится провести множество тестов, чтобы точно определить используемый веб-сервер. нttprint — один из таких инструментов, он использует словарь «отпечатков» с помощью которого определяет тип и версию используемого веб-сервера.
Онлайн тестирование
Можно использовать онлайн инструменты если тестировщик хочет проводить тестирование более скрытно и не обращаться напрямую к целевому веб-приложению. Примером подобных инструментов, предоставляющим множество информации о целевом веб-сервере, является Netcraft (http://www.netcraft.com/). С помощью данного инструмента можно получить информацию об операционной системе, используемом веб-сервере, времени непрерывной работы сервера, владельце сегмента сети, истории изменения веб-сервера и операционной системы.
Предполагается что проект OWASP Unmaskme Project станет еще одним онлайн инструментом для определения используемого веб-сервера с помощью анализа различных мета-данных. Данный проект все еще находится в разработке, но уже сейчас можно попробовать его наработки в деле — http://desenmascara.me/
Справочные материалы
- Saumil Shah: «An Introduction to HTTP fingerprinting» — http://www.net-square.com/httprint_paper.html
- Anant Shrivastava : «Web Application Finger Printing» — http://anantshri.info/articles/web_app_finger_printing.html
Рекомендации
Предоставляйте как можно меньше информации о используемом вами веб-сервере.
Если нужна помощь с переводом — с радостью возьмусь!
можно скооперироваться) напиши мне, пожалуйста, на почту — abychutkin@gmail.com и обсудим что да как
Большое дело делаете! Очень надеюсь, что доведете до конца и потом можно будет составить целый переведенный гайд
спасибо большое