27.07.2015 @ 13:09 Перевод OWASP Testing Guide. Часть 1.3. owasp, web security Представляю вашему вниманию третью часть перевода 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 19050 Web security Читать дальше >>