June 3, 2020

4.1.2 Определение веб-сервера

Определение веб-сервера - это задача определения типа и версии веб-сервера, на котором выполняется целевой объект. Хоть веб сервер обычно и определяется средствами автоматического тестирования, всё же нам важно понимать, по каким признакам они это делают и почему это может быть нам полезно.

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

Задачи

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

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

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

Перехват баннера

Перехват баннера выполняется путём отправки HTTP-запроса на веб сервер и проверки заголовка его ответа.

К примеру вот ответ от сервера на Apache

HTTP/1.1 200 OK
Date: Thu, 05 Sep 2019 17:42:39 GMT
Server: Apache/2.4.41 (Unix)
Last-Modified: Thu, 05 Sep 2019 17:40:42 GMT
ETag: "75-591d1d21b6167"
Accept-Ranges: bytes
Content-Length: 117
Connection: close
Content-Type: text/html
...

Вот еще один ответ, на этот раз от nginx.

HTTP/1.1 200 OK
Server: nginx/1.17.3
Date: Thu, 05 Sep 2019 17:50:24 GMT
Content-Type: text/html
Content-Length: 117
Last-Modified: Thu, 05 Sep 2019 17:40:42 GMT
Connection: close
ETag: "5d71489a-75"
Accept-Ranges: bytes
...

А вот как выглядит ответ от lighttpd.

HTTP/1.0 200 OK
Content-Type: text/html
Accept-Ranges: bytes
ETag: "4192788355"
Last-Modified: Thu, 05 Sep 2019 17:40:42 GMT
Content-Length: 117
Connection: close
Date: Thu, 05 Sep 2019 17:57:57 GMT
Server: lighttpd/1.4.54

В этих примерах тип и версия сервера нам чётко предоставлены. Однако , чаще всего информация о сервере скрывается, или видоизменяется. Например, вот отрывок из ответа на запрос сайта с измененным заголовком:

HTTP/1.1 200 OK
Server: Website.com
Date: Thu, 05 Sep 2019 17:57:06 GMT
Content-Type: text/html; charset=utf-8
Status: 200 OK
...

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

  • Дата
  • Сервер
  • Последнее изменение
  • ETag
  • Access-Range
  • Длина содержимого
  • Тип подключения
  • Тип содержимого

Однако в nginx и obscured server поля распологаются в следующем порядке:

  • Сервер
  • Дата
  • Тип содержимого

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

Отправка изкаженных запросов

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

Например, вот ответ на запрос несуществующего метода SANTA CLAUS с сервера Apache.

GET / SANTA CLAUS/1.1


HTTP/1.1 400 Bad Request
Date: Fri, 06 Sep 2019 19:21:01 GMT
Server: Apache/2.4.41 (Unix)
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>

Ответ на тот же запрос, но уже от nginx.

GET / SANTA CLAUS/1.1


<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.17.3</center>
</body>
</html>

На этот раз lighttpd

GET / SANTA CLAUS/1.1


HTTP/1.0 400 Bad Request
Content-Type: text/html
Content-Length: 345
Connection: close
Date: Sun, 08 Sep 2019 21:56:17 GMT
Server: lighttpd/1.4.54

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>400 Bad Request</title>
 </head>
 <body>
  <h1>400 Bad Request</h1>
 </body>
</html>

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

Использование средств автоматического сканирования

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

Вот некоторые часто используемые инструменты сканирования , включающие в себя функционал идентификации веб-сервера

  • Netcraft, онлайн-инструмент, который сканирует веб-сайты на наличие информации, включая веб-сервер.
  • Nikto, cli инструмент, с открытым исходным кодом
  • Nmap, cli инструмент , с открытым кодом , который также имеет gui, названный Zenmap-ом.

Предпосылки

Хотя открытая информация о сервере сама по себе является уязвимостью,всё же это информация, которая может помочь злоумышленникам в использовании других уязвимостей, которые могут быть найдены ранее. По этой причине рекомендуется принять некоторые меры предосторожности. Эти меры включают в себя:

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

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


Contact: t.me/freedomf0x t.me/Slippery_Fox twitter.com/FlatL1ne xmpp(жаба_ёпт):flatl1ne@freedomfox.im

При поддержке друзей: 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 admin@freedomfox.im)

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